• Nicholas Bellinger's avatar
    iser-target: Add missing se_cmd put for WRITE_PENDING in tx_comp_err · 03e7848a
    Nicholas Bellinger authored
    This patch fixes a bug where outstanding RDMA_READs with WRITE_PENDING
    status require an extra target_put_sess_cmd() in isert_put_cmd() code
    when called from isert_cq_tx_comp_err() + isert_cq_drain_comp_llist()
    context during session shutdown.
    
    The extra kref PUT is required so that transport_generic_free_cmd()
    invokes the last target_put_sess_cmd() -> target_release_cmd_kref(),
    which will complete(&se_cmd->cmd_wait_comp) the outstanding se_cmd
    descriptor with WRITE_PENDING status, and awake the completion in
    target_wait_for_sess_cmds() to invoke TFO->release_cmd().
    
    The bug was manifesting itself in target_wait_for_sess_cmds() where
    a se_cmd descriptor with WRITE_PENDING status would end up sleeping
    indefinately.
    Acked-by: default avatarSagi Grimberg <sagig@mellanox.com>
    Cc: Or Gerlitz <ogerlitz@mellanox.com>
    Cc: <stable@vger.kernel.org> #3.10+
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    03e7848a
ib_isert.c 91 KB