]> Pileus Git - ~andy/linux/blobdiff - drivers/scsi/libiscsi.c
Merge remote-tracking branch 'regulator/fix/palmas' into tmp
[~andy/linux] / drivers / scsi / libiscsi.c
index 143bbe448bec6b7e4a22f52eeb3c718c64815473..82c3fd4bc938511e5242fbbef85cbec077b3c119 100644 (file)
@@ -1909,6 +1909,16 @@ static enum blk_eh_timer_return iscsi_eh_cmd_timed_out(struct scsi_cmnd *sc)
        ISCSI_DBG_EH(session, "scsi cmd %p timedout\n", sc);
 
        spin_lock(&session->lock);
+       task = (struct iscsi_task *)sc->SCp.ptr;
+       if (!task) {
+               /*
+                * Raced with completion. Blk layer has taken ownership
+                * so let timeout code complete it now.
+                */
+               rc = BLK_EH_HANDLED;
+               goto done;
+       }
+
        if (session->state != ISCSI_STATE_LOGGED_IN) {
                /*
                 * We are probably in the middle of iscsi recovery so let
@@ -1925,16 +1935,6 @@ static enum blk_eh_timer_return iscsi_eh_cmd_timed_out(struct scsi_cmnd *sc)
                goto done;
        }
 
-       task = (struct iscsi_task *)sc->SCp.ptr;
-       if (!task) {
-               /*
-                * Raced with completion. Just reset timer, and let it
-                * complete normally
-                */
-               rc = BLK_EH_RESET_TIMER;
-               goto done;
-       }
-
        /*
         * If we have sent (at least queued to the network layer) a pdu or
         * recvd one for the task since the last timeout ask for
@@ -2807,6 +2807,7 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session)
        kfree(session->username);
        kfree(session->username_in);
        kfree(session->targetname);
+       kfree(session->targetalias);
        kfree(session->initiatorname);
        kfree(session->ifacename);
 
@@ -3200,7 +3201,7 @@ int iscsi_set_param(struct iscsi_cls_conn *cls_conn,
                sscanf(buf, "%d", &session->initial_r2t_en);
                break;
        case ISCSI_PARAM_MAX_R2T:
-               sscanf(buf, "%d", &session->max_r2t);
+               sscanf(buf, "%hu", &session->max_r2t);
                break;
        case ISCSI_PARAM_IMM_DATA_EN:
                sscanf(buf, "%d", &session->imm_data_en);
@@ -3233,6 +3234,8 @@ int iscsi_set_param(struct iscsi_cls_conn *cls_conn,
                return iscsi_switch_str_param(&session->password_in, buf);
        case ISCSI_PARAM_TARGET_NAME:
                return iscsi_switch_str_param(&session->targetname, buf);
+       case ISCSI_PARAM_TARGET_ALIAS:
+               return iscsi_switch_str_param(&session->targetalias, buf);
        case ISCSI_PARAM_TPGT:
                sscanf(buf, "%d", &session->tpgt);
                break;
@@ -3299,6 +3302,9 @@ int iscsi_session_get_param(struct iscsi_cls_session *cls_session,
        case ISCSI_PARAM_TARGET_NAME:
                len = sprintf(buf, "%s\n", session->targetname);
                break;
+       case ISCSI_PARAM_TARGET_ALIAS:
+               len = sprintf(buf, "%s\n", session->targetalias);
+               break;
        case ISCSI_PARAM_TPGT:
                len = sprintf(buf, "%d\n", session->tpgt);
                break;