Hannes Reinecke 64dac0
From: Hannes Reinecke <hare@suse.de>
Hannes Reinecke 64dac0
Date: Fri, 15 Sep 2017 13:12:13 +0200
Hannes Reinecke 64dac0
Subject: [PATCH] scsi: fcoe: separate out fcoe_vport_remove()
Hannes Reinecke 64dac0
References: bsc#1077989
Hannes Reinecke 64dac0
Git-commit: 6f7f74abaec12af6becf0a471d5968bce2f389b6
Hannes Reinecke 64dac0
Patch-mainline: v4.15-rc1
Hannes Reinecke 64dac0
Hannes Reinecke 64dac0
Separate out fcoe_vport_remove() from fcoe_destroy_work().  Required for
Hannes Reinecke 64dac0
the next patch.
Hannes Reinecke 64dac0
Hannes Reinecke 64dac0
Signed-off-by: Hannes Reinecke <hare@suse.com>
Hannes Reinecke 64dac0
Reviewed-by: Lee Duncan <lduncan@suse.com>
Hannes Reinecke 64dac0
Acked-by: Johannes Thumshirn <jth@kernel.org>
Hannes Reinecke 64dac0
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Hannes Reinecke 64dac0
Signed-off-by: Hannes Reinecke <hare@suse.de>
Hannes Reinecke 64dac0
---
Hannes Reinecke 64dac0
 drivers/scsi/fcoe/fcoe.c | 55 +++++++++++++++++++++++++++++-------------------
Hannes Reinecke 64dac0
 1 file changed, 33 insertions(+), 22 deletions(-)
Hannes Reinecke 64dac0
Hannes Reinecke 64dac0
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
Hannes Reinecke 64dac0
index 2a39d7124c0e..7c18fad99347 100644
Hannes Reinecke 64dac0
--- a/drivers/scsi/fcoe/fcoe.c
Hannes Reinecke 64dac0
+++ b/drivers/scsi/fcoe/fcoe.c
Hannes Reinecke 64dac0
@@ -155,7 +155,7 @@ static int fcoe_vport_disable(struct fc_vport *, bool disable);
Hannes Reinecke 64dac0
 static void fcoe_set_vport_symbolic_name(struct fc_vport *);
Hannes Reinecke 64dac0
 static void fcoe_set_port_id(struct fc_lport *, u32, struct fc_frame *);
Hannes Reinecke 64dac0
 static void fcoe_fcf_get_vlan_id(struct fcoe_fcf_device *);
Hannes Reinecke 64dac0
-
Hannes Reinecke 64dac0
+static void fcoe_vport_remove(struct fc_lport *);
Hannes Reinecke 64dac0
 
Hannes Reinecke 64dac0
 static struct fcoe_sysfs_function_template fcoe_sysfs_templ = {
Hannes Reinecke 64dac0
 	.set_fcoe_ctlr_mode = fcoe_ctlr_mode,
Hannes Reinecke 64dac0
@@ -2108,30 +2108,10 @@ static void fcoe_destroy_work(struct work_struct *work)
Hannes Reinecke 64dac0
 	struct fcoe_ctlr *ctlr;
Hannes Reinecke 64dac0
 	struct fcoe_port *port;
Hannes Reinecke 64dac0
 	struct fcoe_interface *fcoe;
Hannes Reinecke 64dac0
-	struct Scsi_Host *shost;
Hannes Reinecke 64dac0
-	struct fc_host_attrs *fc_host;
Hannes Reinecke 64dac0
-	unsigned long flags;
Hannes Reinecke 64dac0
-	struct fc_vport *vport;
Hannes Reinecke 64dac0
-	struct fc_vport *next_vport;
Hannes Reinecke 64dac0
 
Hannes Reinecke 64dac0
 	port = container_of(work, struct fcoe_port, destroy_work);
Hannes Reinecke 64dac0
-	shost = port->lport->host;
Hannes Reinecke 64dac0
-	fc_host = shost_to_fc_host(shost);
Hannes Reinecke 64dac0
-
Hannes Reinecke 64dac0
-	/* Loop through all the vports and mark them for deletion */
Hannes Reinecke 64dac0
-	spin_lock_irqsave(shost->host_lock, flags);
Hannes Reinecke 64dac0
-	list_for_each_entry_safe(vport, next_vport, &fc_host->vports, peers) {
Hannes Reinecke 64dac0
-		if (vport->flags & (FC_VPORT_DEL | FC_VPORT_CREATING)) {
Hannes Reinecke 64dac0
-			continue;
Hannes Reinecke 64dac0
-		} else {
Hannes Reinecke 64dac0
-			vport->flags |= FC_VPORT_DELETING;
Hannes Reinecke 64dac0
-			queue_work(fc_host_work_q(shost),
Hannes Reinecke 64dac0
-				   &vport->vport_delete_work);
Hannes Reinecke 64dac0
-		}
Hannes Reinecke 64dac0
-	}
Hannes Reinecke 64dac0
-	spin_unlock_irqrestore(shost->host_lock, flags);
Hannes Reinecke 64dac0
 
Hannes Reinecke 64dac0
-	flush_workqueue(fc_host_work_q(shost));
Hannes Reinecke 64dac0
+	fcoe_vport_remove(port->lport);
Hannes Reinecke 64dac0
 
Hannes Reinecke 64dac0
 	mutex_lock(&fcoe_config_mutex);
Hannes Reinecke 64dac0
 
Hannes Reinecke 64dac0
@@ -2745,6 +2725,37 @@ static int fcoe_vport_destroy(struct fc_vport *vport)
Hannes Reinecke 64dac0
 }
Hannes Reinecke 64dac0
 
Hannes Reinecke 64dac0
 /**
Hannes Reinecke 64dac0
+ * fcoe_vport_remove() - remove attached vports
Hannes Reinecke 64dac0
+ * @lport: lport for which the vports should be removed
Hannes Reinecke 64dac0
+ */
Hannes Reinecke 64dac0
+static void fcoe_vport_remove(struct fc_lport *lport)
Hannes Reinecke 64dac0
+{
Hannes Reinecke 64dac0
+	struct Scsi_Host *shost;
Hannes Reinecke 64dac0
+	struct fc_host_attrs *fc_host;
Hannes Reinecke 64dac0
+	unsigned long flags;
Hannes Reinecke 64dac0
+	struct fc_vport *vport;
Hannes Reinecke 64dac0
+	struct fc_vport *next_vport;
Hannes Reinecke 64dac0
+
Hannes Reinecke 64dac0
+	shost = lport->host;
Hannes Reinecke 64dac0
+	fc_host = shost_to_fc_host(shost);
Hannes Reinecke 64dac0
+
Hannes Reinecke 64dac0
+	/* Loop through all the vports and mark them for deletion */
Hannes Reinecke 64dac0
+	spin_lock_irqsave(shost->host_lock, flags);
Hannes Reinecke 64dac0
+	list_for_each_entry_safe(vport, next_vport, &fc_host->vports, peers) {
Hannes Reinecke 64dac0
+		if (vport->flags & (FC_VPORT_DEL | FC_VPORT_CREATING)) {
Hannes Reinecke 64dac0
+			continue;
Hannes Reinecke 64dac0
+		} else {
Hannes Reinecke 64dac0
+			vport->flags |= FC_VPORT_DELETING;
Hannes Reinecke 64dac0
+			queue_work(fc_host_work_q(shost),
Hannes Reinecke 64dac0
+				   &vport->vport_delete_work);
Hannes Reinecke 64dac0
+		}
Hannes Reinecke 64dac0
+	}
Hannes Reinecke 64dac0
+	spin_unlock_irqrestore(shost->host_lock, flags);
Hannes Reinecke 64dac0
+
Hannes Reinecke 64dac0
+	flush_workqueue(fc_host_work_q(shost));
Hannes Reinecke 64dac0
+}
Hannes Reinecke 64dac0
+
Hannes Reinecke 64dac0
+/**
Hannes Reinecke 64dac0
  * fcoe_vport_disable() - change vport state
Hannes Reinecke 64dac0
  * @vport: vport to bring online/offline
Hannes Reinecke 64dac0
  * @disable: should the vport be disabled?
Hannes Reinecke 64dac0
-- 
Hannes Reinecke 64dac0
2.12.3
Hannes Reinecke 64dac0