target: Fix max_cmd_sn increment w/o cmdsn mutex regressions
authorRoland Dreier <roland@purestorage.com>
Tue, 8 Sep 2015 13:14:18 +0000 (06:14 -0700)
committerNicholas Bellinger <nab@linux-iscsi.org>
Fri, 11 Sep 2015 07:32:28 +0000 (00:32 -0700)
Current for-next iscsi target is broken:

commit 109e2381749c1cfd94a0d22b2b54142539024973
Author: Roland Dreier <roland@purestorage.com>
Date:   Thu Jul 23 14:53:32 2015 -0700

    target: Drop iSCSI use of mutex around max_cmd_sn increment

This patch fixes incorrect pr_debug() + atomic_inc_return() usage
within iscsit_increment_maxcmdsn() code.

Also fix funny iscsit_determine_maxcmdsn() usage and update
iscsi_target_do_tx_login_io() code.

Reported-by: Sagi Grimberg <sagig@mellanox.com>
Cc: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Cc: Roland Dreier <roland@purestorage.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/iscsi/iscsi_target_device.c
drivers/target/iscsi/iscsi_target_nego.c

index 07d2ef67dba658f83030672fa83eccba63f8c310..0382fa24b53bab9365ad315019ead4d24f2f750e 100644 (file)
@@ -47,16 +47,19 @@ void iscsit_determine_maxcmdsn(struct iscsi_session *sess)
         * core_set_queue_depth_for_node().
         */
        sess->cmdsn_window = se_nacl->queue_depth;
-       atomic_set(&sess->max_cmd_sn, (u32) atomic_read(&sess->max_cmd_sn) + se_nacl->queue_depth - 1);
+       atomic_add(se_nacl->queue_depth - 1, &sess->max_cmd_sn);
 }
 
 void iscsit_increment_maxcmdsn(struct iscsi_cmd *cmd, struct iscsi_session *sess)
 {
+       u32 max_cmd_sn;
+
        if (cmd->immediate_cmd || cmd->maxcmdsn_inc)
                return;
 
        cmd->maxcmdsn_inc = 1;
 
-       pr_debug("Updated MaxCmdSN to 0x%08x\n", atomic_inc_return(&sess->max_cmd_sn));
+       max_cmd_sn = atomic_inc_return(&sess->max_cmd_sn);
+       pr_debug("Updated MaxCmdSN to 0x%08x\n", max_cmd_sn);
 }
 EXPORT_SYMBOL(iscsit_increment_maxcmdsn);
index 74d041e815f4d197a54f6c486fceb55dc8454135..4d08afe71e67a3f8cd27c075849bab2cea3e1698 100644 (file)
@@ -366,8 +366,6 @@ static int iscsi_target_do_tx_login_io(struct iscsi_conn *conn, struct iscsi_log
                return -1;
 
        login->rsp_length               = 0;
-       login_rsp->exp_cmdsn            = cpu_to_be32(login_rsp->exp_cmdsn);
-       login_rsp->max_cmdsn            = cpu_to_be32(login_rsp->max_cmdsn);
 
        return 0;
 }