lkml.org 
[lkml]   [2020]   [May]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 12/80] scsi: iscsi: Report unbind session event when the target has been removed
    Date
    From: Wu Bo <wubo40@huawei.com>

    [ Upstream commit 13e60d3ba287d96eeaf1deaadba51f71578119a3 ]

    If the daemon is restarted or crashes while logging out of a session, the
    unbind session event sent by the kernel is not processed and is lost. When
    the daemon starts again, the session can't be unbound because the daemon is
    waiting for the event message. However, the kernel has already logged out
    and the event will not be resent.

    When iscsid restart is complete, logout session reports error:

    Logging out of session [sid: 6, target: iqn.xxxxx, portal: xx.xx.xx.xx,3260]
    iscsiadm: Could not logout of [sid: 6, target: iscsiadm -m node iqn.xxxxx, portal: xx.xx.xx.xx,3260].
    iscsiadm: initiator reported error (9 - internal error)
    iscsiadm: Could not logout of all requested sessions

    Make sure the unbind event is emitted.

    [mkp: commit desc and applied by hand since patch was mangled]

    Link: https://lore.kernel.org/r/4eab1771-2cb3-8e79-b31c-923652340e99@huawei.com
    Reviewed-by: Lee Duncan <lduncan@suse.com>
    Signed-off-by: Wu Bo <wubo40@huawei.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/scsi/scsi_transport_iscsi.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
    index fff9c4d0f7c80..42b97f1196232 100644
    --- a/drivers/scsi/scsi_transport_iscsi.c
    +++ b/drivers/scsi/scsi_transport_iscsi.c
    @@ -2016,7 +2016,7 @@ static void __iscsi_unbind_session(struct work_struct *work)
    if (session->target_id == ISCSI_MAX_TARGET) {
    spin_unlock_irqrestore(&session->lock, flags);
    mutex_unlock(&ihost->mutex);
    - return;
    + goto unbind_session_exit;
    }

    target_id = session->target_id;
    @@ -2028,6 +2028,8 @@ static void __iscsi_unbind_session(struct work_struct *work)
    ida_simple_remove(&iscsi_sess_ida, target_id);

    scsi_remove_target(&session->dev);
    +
    +unbind_session_exit:
    iscsi_session_event(session, ISCSI_KEVENT_UNBIND_SESSION);
    ISCSI_DBG_TRANS_SESSION(session, "Completed target removal\n");
    }
    --
    2.20.1


    \
     
     \ /
      Last update: 2020-05-01 15:28    [W:4.108 / U:0.492 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site