scsi: iscsi: Drop session lock in iscsi_session_chkready()
authorMike Christie <michael.christie@oracle.com>
Sun, 7 Feb 2021 04:46:08 +0000 (22:46 -0600)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 9 Feb 2021 03:39:04 +0000 (22:39 -0500)
The session lock in iscsi_session_chkready() is not needed because when we
transition from logged into to another state we will block and/or remove
the devices under the session, so no new I/O will be sent to the drivers
after the block/remove. I/O that races with the block/removal is cleaned up
by the drivers when it handles all outstanding I/O, so this just added an
extra lock in the main I/O path. This patch removes the lock like other
transport classes.

Link: https://lore.kernel.org/r/20210207044608.27585-10-michael.christie@oracle.com
Reviewed-by: Lee Duncan <lduncan@suse.com>
Signed-off-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/scsi_transport_iscsi.c

index 2e68c0a876986d3733412bc968e85731d2501432..969d24d580e29b46a23d4df097bd19121e837c18 100644 (file)
@@ -1701,10 +1701,8 @@ static const char *iscsi_session_state_name(int state)
 
 int iscsi_session_chkready(struct iscsi_cls_session *session)
 {
-       unsigned long flags;
        int err;
 
-       spin_lock_irqsave(&session->lock, flags);
        switch (session->state) {
        case ISCSI_SESSION_LOGGED_IN:
                err = 0;
@@ -1719,7 +1717,6 @@ int iscsi_session_chkready(struct iscsi_cls_session *session)
                err = DID_NO_CONNECT << 16;
                break;
        }
-       spin_unlock_irqrestore(&session->lock, flags);
        return err;
 }
 EXPORT_SYMBOL_GPL(iscsi_session_chkready);