On 3/27/2015 11:04 AM, Nicholas A. Bellinger wrote:
From: Nicholas Bellinger <n...@linux-iscsi.org>

This patch converts core_[enable,disable]_device_list_for_node() to RCU
updater path code when modifying se_dev_entry pointers.

It includes protected rcu_assign_pointer() and invokes synchronize_rcu()
to wait for RCU read paths to finish.

Required for subsequent conversion to se_deve->pr_ref percpu-refcount.

Cc: Hannes Reinecke <h...@suse.de>
Cc: Christoph Hellwig <h...@lst.de>
Cc: Sagi Grimberg <sa...@mellanox.com>
Signed-off-by: Nicholas Bellinger <n...@linux-iscsi.org>
---
  drivers/target/target_core_device.c | 50 ++++++++++++++++---------------------
  1 file changed, 22 insertions(+), 28 deletions(-)

diff --git a/drivers/target/target_core_device.c 
b/drivers/target/target_core_device.c
index be893c8..9385e16 100644
--- a/drivers/target/target_core_device.c
+++ b/drivers/target/target_core_device.c
@@ -324,31 +324,16 @@ int core_enable_device_list_for_node(
        struct se_port *port = lun->lun_sep;
        struct se_dev_entry *deve;

-       spin_lock_irq(&nacl->device_list_lock);
-
-       deve = nacl->device_list[mapped_lun];
-
        /*
         * Check if the call is handling demo mode -> explicit LUN ACL
         * transition.  This transition must be for the same struct se_lun
         * + mapped_lun that was setup in demo mode..
         */
+       spin_lock_irq(&nacl->lun_entry_lock);
+       deve = nacl->lun_entry_hlist[mapped_lun];
        if (deve->lun_flags & TRANSPORT_LUNFLAGS_INITIATOR_ACCESS) {
-               if (deve->se_lun_acl != NULL) {
-                       pr_err("struct se_dev_entry->se_lun_acl"
-                              " already set for demo mode -> explicit"
-                              " LUN ACL transition\n");
-                       spin_unlock_irq(&nacl->device_list_lock);
-                       return -EINVAL;
-               }
-               if (deve->se_lun != lun) {
-                       pr_err("struct se_dev_entry->se_lun does"
-                              " match passed struct se_lun for demo mode"
-                              " -> explicit LUN ACL transition\n");
-                       spin_unlock_irq(&nacl->device_list_lock);
-                       return -EINVAL;
-               }
-               deve->se_lun_acl = lun_acl;
+               BUG_ON(deve->se_lun_acl != NULL);
+               BUG_ON(deve->se_lun != lun);

Are these a MUST? Can't we WARN and return an error instead of shutting
down the lights on everyone?


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

Reply via email to