Patch "target: Fix TAS handling for multi-session se_node_acls" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
target: Fix TAS handling for multi-session se_node_acls
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
target-fix-tas-handling-for-multi-session-se_node_acls.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
ebde1ca5a908b10312db4ecd7553e3ba039319abMon Sep 17 00:00:00 2001
From: Nicholas Bellinger <[email protected]>
Date: Sat, 16 Jan 2016 12:49:49 -0800
Subject: target: Fix TAS handling for multi-session se_node_acls
From: Nicholas Bellinger <[email protected]>
commit ebde1ca5a908b10312db4ecd7553e3ba039319ab upstream.
This patch fixes a bug in TMR task aborted status (TAS) handling when multiple sessions are connected to the same target WWPN endpoint and se_node_acl descriptor, resulting in TASK_ABORTED status to not be generated for aborted se_cmds on the remote port.
This is due to core_tmr_handle_tas_abort() incorrectly comparing se_node_acl instead of se_session, for which the multi-session case is expected to be sharing the same se_node_acl.
Instead, go ahead and update core_tmr_handle_tas_abort() to compare tmr_sess + cmd->se_sess in order to determine if the LUN_RESET was received on a different I_T nexus, and TASK_ABORTED status response needs to be generated.
--- drivers/target/target_core_tmr.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-)
drivers/target/target_core_tmr.c +9 -7
@@ -76,7 +76,7 @@ void core_tmr_release_req(struct se_tmr_ }static void core_tmr_handle_tas_abort ( -struct se_node_acl *tmr_nacl, +struct se_session *tmr_sess,struct se_cmd *cmd,int tas) {
@@ -84,7 +84,7 @@ static void core_tmr_handle_tas_abort(/* * TASK ABORTED status (TAS) bit support */ -if ((tmr_nacl && (tmr_nacl != cmd->se_sess->se_node_acl)) && tas) { +if (tmr_sess && tmr_sess != cmd->se_sess && tas) { remove = false;transport_send_task_abort (cmd); }
@@ -273,7 +273,7 @@ static void core_tmr_drain_tmr_list(static void core_tmr_drain_state_list (struct se_device *dev,struct se_cmd *prout_cmd, -struct se_node_acl *tmr_nacl, +struct se_session *tmr_sess,int tas,struct list_head *preempt_and_abort_list) {
@@ -364,7 +364,7 @@ static void core_tmr_drain_state_list(cancel_work_sync (&cmd->work);transport_wait_for_tasks (cmd); -core_tmr_handle_tas_abort (tmr_nacl, cmd, tas); +core_tmr_handle_tas_abort (tmr_sess, cmd, tas);target_put_sess_cmd (cmd); } }
@@ -377,6 +377,7 @@ int core_tmr_lun_reset( {struct se_node_acl *tmr_nacl =NULL ;struct se_portal_group *tmr_tpg =NULL ; +struct se_session *tmr_sess =NULL ;int tas;/* * TASK_ABORTED status bit, this is configurable via ConfigFS
@@ -395,8 +396,9 @@ int core_tmr_lun_reset(* or struct se_device passthrough.. */ if (tmr && tmr->task_cmd && tmr->task_cmd->se_sess) { - tmr_nacl = tmr->task_cmd->se_sess->se_node_acl; - tmr_tpg = tmr->task_cmd->se_sess->se_tpg; + tmr_sess = tmr->task_cmd->se_sess; + tmr_nacl = tmr_sess->se_node_acl; + tmr_tpg = tmr_sess->se_tpg;if (tmr_nacl && tmr_tpg) { pr_debug("LUN_RESET: TMR caller fabric: %s" " initiator port %s\n",
@@ -409,7 +411,7 @@ int core_tmr_lun_reset( dev->transport->name, tas);core_tmr_drain_tmr_list (dev, tmr, preempt_and_abort_list); -core_tmr_drain_state_list (dev, prout_cmd, tmr_nacl, tas, +core_tmr_drain_state_list (dev, prout_cmd, tmr_sess, tas, preempt_and_abort_list);/*
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/qla2xxx-fix-stale-pointer-access.patch queue-4.4/target-fix-remote-port-tmr-abort-se_cmd-fabric-stop.patch queue-4.4/target-fix-lun_reset-active-tmr-descriptor-handling.patch queue-4.4/target-fix-race-with-scf_send_delayed_tas-handling.patch queue-4.4/target-fix-lun_reset-active-i-o-handling-for-ack_kref.patch queue-4.4/target-fix-tas-handling-for-multi-session-se_node_acls.patch