• Nicholas Bellinger's avatar
    target: Add generic active I/O shutdown logic · a17f091d
    Nicholas Bellinger authored
    This patch adds the initial pieces of generic active I/O shutdown logic.
    This is intended to be a 'opt-in' feature for fabric modules that
    includes the following functions to provide a mechinism for fabric
    modules to track se_cmd via se_session->sess_cmd_list:
    
    *) target_get_sess_cmd() - Add se_cmd to sess->sess_cmd_list, called
       from fabric module incoming I/O path.
    *) target_put_sess_cmd() - Check for completion or drop se_cmd from
       ->sess_cmd_list
    *) target_splice_sess_cmd_list() - Splice active I/O list from
       ->sess_cmd_list to ->sess_wait_list, can called with HW fabric
       lock held.
    *) target_wait_for_sess_cmds() - Walk ->sess_wait_list waiting on
       individual ->cmd_wait_comp.  Optional transport_wait_for_tasks()
       call.
    
    target_splice_sess_cmd_list() is allowed to be called under HW fabric
    lock, and performs the splice into se_sess->sess_wait_list and set
    se_cmd->cmd_wait_set.  Then target_wait_for_sess_cmds() walks the list
    waiting for individual target_put_sess_cmd() fabric callbacks to
    complete.
    
    It also adds TFO->check_release_cmd() to split the completion and memory
    release calls, where a fabric module uses target_put_sess_cmd() to check
    for I/O completion during session shutdown.  This is currently pushed out
    into fabric modules as current fabric code may sleep here waiting for
    TFO->check_stop_free() to complete in main response path, and because
    target_wait_for_sess_cmds() calling TFO->release_cmd() to free fabric
    descriptor memory directly.
    
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Roland Dreier <roland@purestorage.com>
    Signed-off-by: default avatarNicholas A. Bellinger <nab@linux-iscsi.org>
    a17f091d
target_core_transport.c 130 KB