Re: [PATCH-v2 2/2] tcm_qla2xxx: Run ->check_stop_free and ->release_cmd with hardware_lock held

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2011-09-27 at 23:03 -0700, Roland Dreier wrote:
> >> Assuming I merged everything correctly, in my tree sess_cmd_lock looks
> >> like it is never taken outside of hardware_lock.  So we can just get
> >> rid of the superfluous lock.
> 
> > I left that in for the moment as it looks kinda strange to have a
> > qla_tgt_sess->sess_cmd_list, but no qla_tgt_sess context lock to protect
> > it..
> 
> Well, an extra lock is a pretty heavy price to pay just for looks.
> How about a comment saying "protected by hardware_lock"?
> 

Yep, fine with me.  Here is an incremental patch to remove the
unnecessary usage.

--nab

-------------------------------------------------------------------------------

>From b0e674fab6e4c5766401e09870c3a6e9f3151a48 Mon Sep 17 00:00:00 2001
From: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx>
Date: Wed, 28 Sep 2011 00:22:46 -0700
Subject: [PATCH] qla2xxx/tcm_qla2xxx: Drop unnecessary qla_tgt_sess->sess_cmd_lock usage

This patch removes the now unnecessary qla_tgt_sess->sess_cmd_lock usage
from qla2xxx + tcm_qla2xxx code.  This is due to recent changes for
shutdown logic with qla_tgt_sess->sess_cmd_list, where the list is
already protected by qla_hw_data->hardware_lock sychronization.

Reported-by: Roland Dreier <roland@xxxxxxxxxxxxxxx>
Cc: Roland Dreier <roland@xxxxxxxxxxxxxxx>
Cc: Madhuranath Iyengar <mni@xxxxxxxxxxxxxxxxxxxxx>
Signed-off-by: Nicholas Bellinger <nab@xxxxxxxxxxxxxxxxxxxxx>
---
 drivers/scsi/qla2xxx/qla_target.c               |    3 ---
 drivers/scsi/qla2xxx/qla_target.h               |    5 ++---
 drivers/target/tcm_qla2xxx/tcm_qla2xxx_fabric.c |    9 +++------
 3 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 5c1f2a0..69d3d84 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -378,9 +378,7 @@ static void qla_tgt_wait_for_cmds(struct qla_tgt_sess *sess, struct qla_hw_data
 	struct qla_tgt_cmd *cmd;
 	struct se_cmd *se_cmd;
 
-	spin_lock(&sess->sess_cmd_lock);
 	list_splice_init(&sess->sess_cmd_list, &tmp_list);
-	spin_unlock(&sess->sess_cmd_lock);
 
 	while (!list_empty(&tmp_list)) {
 
@@ -922,7 +920,6 @@ static struct qla_tgt_sess *qla_tgt_create_sess(
 	sess->local = local;
 
 	INIT_LIST_HEAD(&sess->sess_cmd_list);
-	spin_lock_init(&sess->sess_cmd_lock);	
 
 	DEBUG22(qla_printk(KERN_INFO, ha, "Adding sess %p to tgt %p via"
 		" ->check_initiator_node_acl()\n", sess, ha->qla_tgt));
diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h
index 0e5cbfd8..b230399 100644
--- a/drivers/scsi/qla2xxx/qla_target.h
+++ b/drivers/scsi/qla2xxx/qla_target.h
@@ -887,9 +887,8 @@ struct qla_tgt_sess {
 	struct list_head sess_list_entry;
 	unsigned long expires;
 	struct list_head del_list_entry;
-
-	struct list_head sess_cmd_list;
-	spinlock_t sess_cmd_lock;
+	
+	struct list_head sess_cmd_list; /* Protected by qla_hw_data->hardware_lock */
 
 	uint8_t port_name[WWN_SIZE];
 };
diff --git a/drivers/target/tcm_qla2xxx/tcm_qla2xxx_fabric.c b/drivers/target/tcm_qla2xxx/tcm_qla2xxx_fabric.c
index b337ca7..189eabe 100644
--- a/drivers/target/tcm_qla2xxx/tcm_qla2xxx_fabric.c
+++ b/drivers/target/tcm_qla2xxx/tcm_qla2xxx_fabric.c
@@ -496,9 +496,7 @@ void tcm_qla2xxx_release_cmd(struct se_cmd *se_cmd)
 			return;
 		}
 	}
-	spin_lock(&sess->sess_cmd_lock);
 	list_del(&cmd->cmd_list);
-	spin_unlock(&sess->sess_cmd_lock);
 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
 
 	qla_tgt_free_cmd(cmd);
@@ -677,11 +675,10 @@ int tcm_qla2xxx_handle_cmd(scsi_qla_host_t *vha, struct qla_tgt_cmd *cmd,
 	transport_init_se_cmd(se_cmd, se_tpg->se_tpg_tfo, se_sess,
 			data_length, data_dir,
 			fcp_task_attr, &cmd->sense_buffer[0]);
-
-	spin_lock(&sess->sess_cmd_lock);
+	/*
+ 	 * Protected by qla_hw_data->hardware_lock
+ 	 */
 	list_add_tail(&cmd->cmd_list, &sess->sess_cmd_list);
-	spin_unlock(&sess->sess_cmd_lock);
-
 	/*
 	 * Signal BIDI usage with T_TASK(cmd)->t_tasks_bidi
 	 */
-- 
1.7.2.5







--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux