We used to ue the sess_cmd_lock to grab a ref to the se_cmd and add it to the se_cmd_list if the session was not being stopped. And if the cmd was being completed while __target_check_io_state was being run then we held the lock while taking a ref because we were looping over the se_cmd_list and because we didn't remove the cmd from the list until after the last ref was released in target_release_cmd_kref. In: Commit 6f55b06f9b07 ("scsi: target: Drop sess_cmd_lock from I/O path") we switched from the sess list and lock use to the per cpu session cmd_count, so the lock was no longer needed, but it didn't get removed from __target_check_io_state. This patch removes the last target uses of sess_cmd_lock. Signed-off-by: Mike Christie <michael.christie@xxxxxxxxxx> --- drivers/target/target_core_tmr.c | 11 ----------- drivers/target/target_core_transport.c | 1 - include/target/target_core_base.h | 1 - 3 files changed, 13 deletions(-) diff --git a/drivers/target/target_core_tmr.c b/drivers/target/target_core_tmr.c index 88d2a7839876..6fa037ffc119 100644 --- a/drivers/target/target_core_tmr.c +++ b/drivers/target/target_core_tmr.c @@ -71,10 +71,6 @@ static int target_check_cdb_and_preempt(struct list_head *list, static bool __target_check_io_state(struct se_cmd *se_cmd, struct se_session *tmr_sess, bool tas) { - struct se_session *sess = se_cmd->se_sess; - - lockdep_assert_held(&sess->sess_cmd_lock); - /* * If command already reached CMD_T_COMPLETE state within * target_complete_cmd() or CMD_T_FABRIC_STOP due to shutdown, @@ -137,9 +133,7 @@ void core_tmr_abort_task( pr_err("ABORT_TASK: Found referenced %s task_tag: %llu\n", se_cmd->se_tfo->fabric_name, ref_tag); - spin_lock(&se_sess->sess_cmd_lock); rc = __target_check_io_state(se_cmd, se_sess, 0); - spin_unlock(&se_sess->sess_cmd_lock); if (!rc) continue; @@ -206,10 +200,7 @@ static void core_tmr_drain_tmr_list( if (WARN_ON_ONCE(!sess)) continue; - spin_lock(&sess->sess_cmd_lock); rc = __target_check_io_state(cmd, sess, 0); - spin_unlock(&sess->sess_cmd_lock); - if (!rc) { printk("LUN_RESET TMR: non-zero kref_get_unless_zero\n"); continue; @@ -310,9 +301,7 @@ static void core_tmr_drain_state_list( if (WARN_ON_ONCE(!sess)) continue; - spin_lock(&sess->sess_cmd_lock); rc = __target_check_io_state(cmd, tmr_sess, tas); - spin_unlock(&sess->sess_cmd_lock); if (!rc) continue; diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index 692104325b38..c260cb60f5cb 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -277,7 +277,6 @@ void transport_init_session(struct se_session *se_sess) { INIT_LIST_HEAD(&se_sess->sess_list); INIT_LIST_HEAD(&se_sess->sess_acl_list); - spin_lock_init(&se_sess->sess_cmd_lock); } EXPORT_SYMBOL(transport_init_session); diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index 0a5b51f8e5e8..845db96f50dd 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h @@ -636,7 +636,6 @@ struct se_session { void *fabric_sess_ptr; struct list_head sess_list; struct list_head sess_acl_list; - spinlock_t sess_cmd_lock; void *sess_cmd_map; struct sbitmap_queue sess_tag_pool; struct target_cmd_counter *cmd_cnt; -- 2.31.1