[SCSI] bnx2fc: setup em for npiv port
authorVasu Dev <vasu.dev@intel.com>
Thu, 28 Apr 2011 22:55:44 +0000 (15:55 -0700)
committerJames Bottomley <James.Bottomley@suse.de>
Sun, 1 May 2011 21:19:48 +0000 (16:19 -0500)
Use fc_exch_mgr_list_clone to setup em for npiv port.

Also remove redundant vport and lport initializations.

Signed-off-by: Vasu Dev <vasu.dev@intel.com>
Acked-by: Bhanu Prakash Gollapudi <bprakash@broadcom.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/bnx2fc/bnx2fc_fcoe.c

index 139955a6ba7f7e09a6a25a58afd82b06dab88280..6623656766897407c99250736e9d23ffc032fa17 100644 (file)
@@ -1254,20 +1254,17 @@ setup_err:
 static struct fc_lport *bnx2fc_if_create(struct bnx2fc_hba *hba,
                                  struct device *parent, int npiv)
 {
-       struct fc_lport         *lport = NULL;
+       struct fc_lport         *lport, *n_port;
        struct fcoe_port        *port;
        struct Scsi_Host        *shost;
        struct fc_vport         *vport = dev_to_vport(parent);
        int                     rc = 0;
 
        /* Allocate Scsi_Host structure */
-       if (!npiv) {
-               lport = libfc_host_alloc(&bnx2fc_shost_template,
-                                         sizeof(struct fcoe_port));
-       } else {
-               lport = libfc_vport_create(vport,
-                                          sizeof(struct fcoe_port));
-       }
+       if (!npiv)
+               lport = libfc_host_alloc(&bnx2fc_shost_template, sizeof(*port));
+       else
+               lport = libfc_vport_create(vport, sizeof(*port));
 
        if (!lport) {
                printk(KERN_ERR PFX "could not allocate scsi host structure\n");
@@ -1285,7 +1282,6 @@ static struct fc_lport *bnx2fc_if_create(struct bnx2fc_hba *hba,
                goto lp_config_err;
 
        if (npiv) {
-               vport = dev_to_vport(parent);
                printk(KERN_ERR PFX "Setting vport names, 0x%llX 0x%llX\n",
                        vport->node_name, vport->port_name);
                fc_set_wwnn(lport, vport->node_name);
@@ -1314,12 +1310,17 @@ static struct fc_lport *bnx2fc_if_create(struct bnx2fc_hba *hba,
        fc_host_port_type(lport->host) = FC_PORTTYPE_UNKNOWN;
 
        /* Allocate exchange manager */
-       if (!npiv) {
+       if (!npiv)
                rc = bnx2fc_em_config(lport);
-               if (rc) {
-                       printk(KERN_ERR PFX "Error on bnx2fc_em_config\n");
-                       goto shost_err;
-               }
+       else {
+               shost = vport_to_shost(vport);
+               n_port = shost_priv(shost);
+               rc = fc_exch_mgr_list_clone(n_port, lport);
+       }
+
+       if (rc) {
+               printk(KERN_ERR PFX "Error on bnx2fc_em_config\n");
+               goto shost_err;
        }
 
        bnx2fc_interface_get(hba);