target-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] scsi: target: add TMF to tmr_list at the handling
@ 2024-01-11 12:59 Dmitry Bogdanov
  2024-01-11 16:34 ` Mike Christie
  2024-01-12  2:43 ` Martin K. Petersen
  0 siblings, 2 replies; 3+ messages in thread
From: Dmitry Bogdanov @ 2024-01-11 12:59 UTC (permalink / raw)
  To: Martin Petersen, target-devel; +Cc: linux-scsi, linux, Dmitry Bogdanov

iSCSI Abort that are responded by iscsi itself is added to tmr_list but
it does not go to target core. On other side LUN_RESET that goes throught
tmr_list takes a refcounter of that abort and wait for completion of the abort
that will be never completed because it was not even started in the target core.

Such logs shows that situations:

 Unable to locate ITT: 0x05000000 on CID: 0
 Unable to locate RefTaskTag: 0x05000000 on CID: 0.
 wait_for_tasks: Stopping tmf LUN_RESET with tag 0x0 ref_task_tag 0x0 i_state 34 t_state ISTATE_PROCESSING refcnt 2 transport_state active,stop,fabric_stop
 wait for tasks: tmf LUN_RESET with tag 0x0 ref_task_tag 0x0 i_state 34 t_state ISTATE_PROCESSING refcnt 2 transport_state active,stop,fabric_stop
...
 INFO: task kworker/0:2:49 blocked for more than 491 seconds.
 task:kworker/0:2     state:D stack:    0 pid:   49 ppid:     2 flags:0x00000800
 Workqueue: events target_tmr_work [target_core_mod]
Call Trace:
 __switch_to+0x2c4/0x470
 _schedule+0x314/0x1730
 schedule+0x64/0x130
 schedule_timeout+0x168/0x430
 wait_for_completion+0x140/0x270
 target_put_cmd_and_wait+0x64/0xb0 [target_core_mod]
 core_tmr_lun_reset+0x30/0xa0 [target_core_mod]
 target_tmr_work+0xc8/0x1b0 [target_core_mod]
 process_one_work+0x2d4/0x5d0
 worker_thread+0x78/0x6c0

To fix that, add an Abort to tmr_list only if that Abort will be handled by
target core.

Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
---
 drivers/target/target_core_device.c    | 5 -----
 drivers/target/target_core_transport.c | 4 ++++
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
index f7279dfcafa0..4d6cc20903d6 100644
--- a/drivers/target/target_core_device.c
+++ b/drivers/target/target_core_device.c
@@ -151,7 +151,6 @@ int transport_lookup_tmr_lun(struct se_cmd *se_cmd)
 	struct se_session *se_sess = se_cmd->se_sess;
 	struct se_node_acl *nacl = se_sess->se_node_acl;
 	struct se_tmr_req *se_tmr = se_cmd->se_tmr_req;
-	unsigned long flags;
 
 	rcu_read_lock();
 	deve = target_nacl_find_deve(nacl, se_cmd->orig_fe_lun);
@@ -182,10 +181,6 @@ int transport_lookup_tmr_lun(struct se_cmd *se_cmd)
 	se_cmd->se_dev = rcu_dereference_raw(se_lun->lun_se_dev);
 	se_tmr->tmr_dev = rcu_dereference_raw(se_lun->lun_se_dev);
 
-	spin_lock_irqsave(&se_tmr->tmr_dev->se_tmr_lock, flags);
-	list_add_tail(&se_tmr->tmr_list, &se_tmr->tmr_dev->dev_tmr_list);
-	spin_unlock_irqrestore(&se_tmr->tmr_dev->se_tmr_lock, flags);
-
 	return 0;
 }
 EXPORT_SYMBOL(transport_lookup_tmr_lun);
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index 923fe8453d5e..ab570aa17798 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -3894,6 +3894,10 @@ int transport_generic_handle_tmr(
 	unsigned long flags;
 	bool aborted = false;
 
+	spin_lock_irqsave(&cmd->se_dev->se_tmr_lock, flags);
+	list_add_tail(&cmd->se_tmr_req->tmr_list, &cmd->se_dev->dev_tmr_list);
+	spin_unlock_irqrestore(&cmd->se_dev->se_tmr_lock, flags);
+
 	spin_lock_irqsave(&cmd->t_state_lock, flags);
 	if (cmd->transport_state & CMD_T_ABORTED) {
 		aborted = true;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] scsi: target: add TMF to tmr_list at the handling
  2024-01-11 12:59 [PATCH] scsi: target: add TMF to tmr_list at the handling Dmitry Bogdanov
@ 2024-01-11 16:34 ` Mike Christie
  2024-01-12  2:43 ` Martin K. Petersen
  1 sibling, 0 replies; 3+ messages in thread
From: Mike Christie @ 2024-01-11 16:34 UTC (permalink / raw)
  To: Dmitry Bogdanov, Martin Petersen, target-devel; +Cc: linux-scsi, linux

On 1/11/24 6:59 AM, Dmitry Bogdanov wrote:
> iSCSI Abort that are responded by iscsi itself is added to tmr_list but
> it does not go to target core. On other side LUN_RESET that goes throught
> tmr_list takes a refcounter of that abort and wait for completion of the abort
> that will be never completed because it was not even started in the target core.
> 
> Such logs shows that situations:
> 
>  Unable to locate ITT: 0x05000000 on CID: 0
>  Unable to locate RefTaskTag: 0x05000000 on CID: 0.
>  wait_for_tasks: Stopping tmf LUN_RESET with tag 0x0 ref_task_tag 0x0 i_state 34 t_state ISTATE_PROCESSING refcnt 2 transport_state active,stop,fabric_stop
>  wait for tasks: tmf LUN_RESET with tag 0x0 ref_task_tag 0x0 i_state 34 t_state ISTATE_PROCESSING refcnt 2 transport_state active,stop,fabric_stop
> ...
>  INFO: task kworker/0:2:49 blocked for more than 491 seconds.
>  task:kworker/0:2     state:D stack:    0 pid:   49 ppid:     2 flags:0x00000800
>  Workqueue: events target_tmr_work [target_core_mod]
> Call Trace:
>  __switch_to+0x2c4/0x470
>  _schedule+0x314/0x1730
>  schedule+0x64/0x130
>  schedule_timeout+0x168/0x430
>  wait_for_completion+0x140/0x270
>  target_put_cmd_and_wait+0x64/0xb0 [target_core_mod]
>  core_tmr_lun_reset+0x30/0xa0 [target_core_mod]
>  target_tmr_work+0xc8/0x1b0 [target_core_mod]
>  process_one_work+0x2d4/0x5d0
>  worker_thread+0x78/0x6c0
> 
> To fix that, add an Abort to tmr_list only if that Abort will be handled by
> target core.
> 
> Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com>

Reviewed-by: Mike Christie <michael.christie@oracle.com>


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] scsi: target: add TMF to tmr_list at the handling
  2024-01-11 12:59 [PATCH] scsi: target: add TMF to tmr_list at the handling Dmitry Bogdanov
  2024-01-11 16:34 ` Mike Christie
@ 2024-01-12  2:43 ` Martin K. Petersen
  1 sibling, 0 replies; 3+ messages in thread
From: Martin K. Petersen @ 2024-01-12  2:43 UTC (permalink / raw)
  To: Dmitry Bogdanov; +Cc: Martin Petersen, target-devel, linux-scsi, linux


Dmitry,

> iSCSI Abort that are responded by iscsi itself is added to tmr_list
> but it does not go to target core. On other side LUN_RESET that goes
> throught tmr_list takes a refcounter of that abort and wait for
> completion of the abort that will be never completed because it was
> not even started in the target core.

Applied to 6.8/scsi-staging, thanks!

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-01-12  2:43 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-11 12:59 [PATCH] scsi: target: add TMF to tmr_list at the handling Dmitry Bogdanov
2024-01-11 16:34 ` Mike Christie
2024-01-12  2:43 ` Martin K. Petersen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).