diff mbox

[6/6] target: Send UA when changing LUN inventory

Message ID 1434009689-112909-7-git-send-email-hare@suse.de (mailing list archive)
State New, archived
Headers show

Commit Message

Hannes Reinecke June 11, 2015, 8:01 a.m. UTC
When changind the LUN inventory via core_enable_device_list_for_node()
or core_disable_device_list_for_node() a REPORTED LUNS DATA HAS CHANGED
UA should be send.

Signed-off-by: Hannes Reinecke <hare@suse.de>
---
 drivers/target/target_core_device.c | 26 +++++++++++++++++++++++++-
 drivers/target/target_core_ua.h     |  1 +
 2 files changed, 26 insertions(+), 1 deletion(-)

Comments

Christoph Hellwig June 19, 2015, 1:07 p.m. UTC | #1
> +		hlist_for_each_entry_rcu(tmp, &nacl->lun_entry_hlist, link) {
> +			if (tmp == new)
> +				continue;
> +			core_scsi3_ua_allocate(tmp, 0x3F,
> +				ASCQ_3FH_REPORTED_LUNS_DATA_HAS_CHANGED);
> +		}
> +		rcu_read_unlock();
> +

> +	rcu_read_lock();
> +	hlist_for_each_entry_rcu(tmp, &nacl->lun_entry_hlist, link) {
> +		if (tmp == new)
> +			continue;
> +		core_scsi3_ua_allocate(tmp, 0x3F,
> +			ASCQ_3FH_REPORTED_LUNS_DATA_HAS_CHANGED);
> +	}
> +	rcu_read_unlock();

> +
> +	rcu_read_lock();
> +	hlist_for_each_entry_rcu(tmp, &nacl->lun_entry_hlist, link)
> +		core_scsi3_ua_allocate(tmp, 0x3F,
> +			ASCQ_3FH_REPORTED_LUNS_DATA_HAS_CHANGED);
> +	rcu_read_unlock();

Please add a helper instead of duplicating this three times.
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
Hannes Reinecke June 19, 2015, 1:10 p.m. UTC | #2
On 06/19/2015 03:07 PM, Christoph Hellwig wrote:
>> +		hlist_for_each_entry_rcu(tmp, &nacl->lun_entry_hlist, link) {
>> +			if (tmp == new)
>> +				continue;
>> +			core_scsi3_ua_allocate(tmp, 0x3F,
>> +				ASCQ_3FH_REPORTED_LUNS_DATA_HAS_CHANGED);
>> +		}
>> +		rcu_read_unlock();
>> +
> 
>> +	rcu_read_lock();
>> +	hlist_for_each_entry_rcu(tmp, &nacl->lun_entry_hlist, link) {
>> +		if (tmp == new)
>> +			continue;
>> +		core_scsi3_ua_allocate(tmp, 0x3F,
>> +			ASCQ_3FH_REPORTED_LUNS_DATA_HAS_CHANGED);
>> +	}
>> +	rcu_read_unlock();
> 
>> +
>> +	rcu_read_lock();
>> +	hlist_for_each_entry_rcu(tmp, &nacl->lun_entry_hlist, link)
>> +		core_scsi3_ua_allocate(tmp, 0x3F,
>> +			ASCQ_3FH_REPORTED_LUNS_DATA_HAS_CHANGED);
>> +	rcu_read_unlock();
> 
> Please add a helper instead of duplicating this three times.
> 
Okay.

Cheers,

Hannes
diff mbox

Patch

diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
index 650613e..ac191a9 100644
--- a/drivers/target/target_core_device.c
+++ b/drivers/target/target_core_device.c
@@ -305,7 +305,7 @@  int core_enable_device_list_for_node(
 	struct se_node_acl *nacl,
 	struct se_portal_group *tpg)
 {
-	struct se_dev_entry *orig, *new;
+	struct se_dev_entry *orig, *new, *tmp;
 
 	new = kzalloc(sizeof(*new), GFP_KERNEL);
 	if (!new) {
@@ -360,6 +360,15 @@  int core_enable_device_list_for_node(
 		kref_put(&orig->pr_kref, target_pr_kref_release);
 		wait_for_completion(&orig->pr_comp);
 
+		rcu_read_lock();
+		hlist_for_each_entry_rcu(tmp, &nacl->lun_entry_hlist, link) {
+			if (tmp == new)
+				continue;
+			core_scsi3_ua_allocate(tmp, 0x3F,
+				ASCQ_3FH_REPORTED_LUNS_DATA_HAS_CHANGED);
+		}
+		rcu_read_unlock();
+
 		kfree_rcu(orig, rcu_head);
 		return 0;
 	}
@@ -373,6 +382,14 @@  int core_enable_device_list_for_node(
 	list_add_tail(&new->lun_link, &lun->lun_deve_list);
 	spin_unlock_bh(&lun->lun_deve_lock);
 
+	rcu_read_lock();
+	hlist_for_each_entry_rcu(tmp, &nacl->lun_entry_hlist, link) {
+		if (tmp == new)
+			continue;
+		core_scsi3_ua_allocate(tmp, 0x3F,
+			ASCQ_3FH_REPORTED_LUNS_DATA_HAS_CHANGED);
+	}
+	rcu_read_unlock();
 	return 0;
 }
 
@@ -385,6 +402,7 @@  void core_disable_device_list_for_node(
 	struct se_node_acl *nacl,
 	struct se_portal_group *tpg)
 {
+	struct se_dev_entry *tmp;
 	/*
 	 * rcu_dereference_raw protected by se_lun->lun_group symlink
 	 * reference to se_device->dev_group.
@@ -428,6 +446,12 @@  void core_disable_device_list_for_node(
 	kfree_rcu(orig, rcu_head);
 
 	core_scsi3_free_pr_reg_from_nacl(dev, nacl);
+
+	rcu_read_lock();
+	hlist_for_each_entry_rcu(tmp, &nacl->lun_entry_hlist, link)
+		core_scsi3_ua_allocate(tmp, 0x3F,
+			ASCQ_3FH_REPORTED_LUNS_DATA_HAS_CHANGED);
+	rcu_read_unlock();
 }
 
 /*      core_clear_lun_from_tpg():
diff --git a/drivers/target/target_core_ua.h b/drivers/target/target_core_ua.h
index 948ae1e..45e3b6d 100644
--- a/drivers/target/target_core_ua.h
+++ b/drivers/target/target_core_ua.h
@@ -26,6 +26,7 @@ 
 #define ASCQ_2CH_PREVIOUS_RESERVATION_CONFLICT_STATUS		0x09
 
 #define ASCQ_3FH_INQUIRY_DATA_HAS_CHANGED			0x03
+#define ASCQ_3FH_REPORTED_LUNS_DATA_HAS_CHANGED			0x0E
 
 extern struct kmem_cache *se_ua_cache;