• Mike Christie's avatar
    scsi: target: core: Break up target_submit_cmd_map_sgls() · 750a1d93
    Mike Christie authored
    This breaks up target_submit_cmd_map_sgls() into 3 helpers:
    
     - target_init_cmd(): Do the basic general setup and get a refcount to the
       session to make sure the caller can execute the cmd.
    
     - target_submit_prep(): Do the mapping, cdb processing and get a ref to
       the LUN.
    
     - target_submit(): Pass the cmd to LIO core for execution.
    
    The above functions must be used by drivers that either:
    
     1. Rely on LIO for session shutdown synchronization by calling
        target_stop_session().
    
     2. Need to map sgls.
    
    When the next patches are applied then simple drivers that do not need the
    extra functionality above can use target_submit_cmd() and not worry about
    failures being returned and how to handle them, since many drivers were
    getting this wrong and would have hit refcount bugs.
    
    Also, by breaking target_submit_cmd_map_sgls() up into these 3 helper
    functions, we can allow the later patches to do the init/prep from
    interrupt context and then do the submission from a workqueue.
    
    Link: https://lore.kernel.org/r/20210227170006.5077-5-michael.christie@oracle.com
    Cc: Bart Van Assche <bvanassche@acm.org>
    Cc: Juergen Gross <jgross@suse.com>
    Cc: Hannes Reinecke <hare@suse.de>
    Cc: Nilesh Javali <njavali@marvell.com>
    Cc: Michael Cyr <mikecyr@linux.ibm.com>
    Cc: Chris Boot <bootc@bootc.net>
    Cc: Felipe Balbi <balbi@kernel.org>
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: Stefan Hajnoczi <stefanha@redhat.com>
    Tested-by: default avatarLaurence Oberman <loberman@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarHimanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: default avatarMike Christie <michael.christie@oracle.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    750a1d93
target_core_transport.c 95 KB