[SCSI] libiscsi: add more informative failure message during iscsi scsi eh
authorMike Christie <michaelc@cs.wisc.edu>
Fri, 31 Dec 2010 08:22:18 +0000 (02:22 -0600)
committerJames Bottomley <James.Bottomley@suse.de>
Fri, 31 Dec 2010 15:51:54 +0000 (09:51 -0600)
This adds a more informative error code and message
for the iscsi scsi eh session drop paths. This allows
you to distinguish if the session was dropped due to
a connection failure vs the iscsi layer dropping
the session due to scsi eh failure processing.

Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>

drivers/scsi/libiscsi.c
include/scsi/iscsi_if.h

index 7551abe..3eddab0 100644 (file)
@@ -1796,9 +1796,9 @@ static int iscsi_exec_task_mgmt_fn(struct iscsi_conn *conn,
                                      NULL, 0);
        if (!task) {
                spin_unlock_bh(&session->lock);
+               iscsi_conn_printk(KERN_ERR, conn, "Could not send TMF.\n");
                iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
                spin_lock_bh(&session->lock);
-               ISCSI_DBG_EH(session, "tmf exec failure\n");
                return -EPERM;
        }
        conn->tmfcmd_pdus_cnt++;
@@ -2203,7 +2203,7 @@ int iscsi_eh_abort(struct scsi_cmnd *sc)
                goto success_unlocked;
        case TMF_TIMEDOUT:
                spin_unlock_bh(&session->lock);
-               iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
+               iscsi_conn_failure(conn, ISCSI_ERR_SCSI_EH_SESSION_RST);
                goto failed_unlocked;
        case TMF_NOT_FOUND:
                if (!sc->SCp.ptr) {
@@ -2290,7 +2290,7 @@ int iscsi_eh_device_reset(struct scsi_cmnd *sc)
                break;
        case TMF_TIMEDOUT:
                spin_unlock_bh(&session->lock);
-               iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
+               iscsi_conn_failure(conn, ISCSI_ERR_SCSI_EH_SESSION_RST);
                goto done;
        default:
                conn->tmf_state = TMF_INITIAL;
@@ -2371,7 +2371,7 @@ failed:
         * we drop the lock here but the leadconn cannot be destoyed while
         * we are in the scsi eh
         */
-       iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
+       iscsi_conn_failure(conn, ISCSI_ERR_SCSI_EH_SESSION_RST);
 
        ISCSI_DBG_EH(session, "wait for relogin\n");
        wait_event_interruptible(conn->ehwait,
@@ -2453,7 +2453,7 @@ int iscsi_eh_target_reset(struct scsi_cmnd *sc)
                break;
        case TMF_TIMEDOUT:
                spin_unlock_bh(&session->lock);
-               iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED);
+               iscsi_conn_failure(conn, ISCSI_ERR_SCSI_EH_SESSION_RST);
                goto done;
        default:
                conn->tmf_state = TMF_INITIAL;
index a8631ac..c3e1cbc 100644 (file)
@@ -263,6 +263,7 @@ enum iscsi_err {
        ISCSI_ERR_INVALID_HOST          = ISCSI_ERR_BASE + 18,
        ISCSI_ERR_XMIT_FAILED           = ISCSI_ERR_BASE + 19,
        ISCSI_ERR_TCP_CONN_CLOSE        = ISCSI_ERR_BASE + 20,
+       ISCSI_ERR_SCSI_EH_SESSION_RST   = ISCSI_ERR_BASE + 21,
 };
 
 /*