scsi: elx: efct: Fix vport list linkage in LIO backend
authorJames Smart <james.smart@broadcom.com>
Sat, 19 Jun 2021 15:57:29 +0000 (08:57 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 23 Jun 2021 01:11:37 +0000 (21:11 -0400)
vport is linked onto the driver's vport list at allocation, but failure
path fails to remove it from the list.

Change location of linkage until after complete vport completion.

Link: https://lore.kernel.org/r/20210619155729.20049-1-jsmart2021@gmail.com
Fixes: 692e5d73a811 ("scsi: elx: efct: LIO backend interface routines")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Co-developed-by: Ram Vegesna <ram.vegesna@broadcom.com>
Signed-off-by: Ram Vegesna <ram.vegesna@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/elx/efct/efct_lio.c

index b7d69ff29c09b78f0a9ba7fa2c4f6c2d921fed5b..e0d798d6baee3c17925075d0ea8fb81c17f4d1c8 100644 (file)
@@ -832,10 +832,6 @@ efct_lio_npiv_make_nport(struct target_fabric_configfs *tf,
        }
 
        vport_list->lio_vport = lio_vport;
-       spin_lock_irqsave(&efct->tgt_efct.efct_lio_lock, flags);
-       INIT_LIST_HEAD(&vport_list->list_entry);
-       list_add_tail(&vport_list->list_entry, &efct->tgt_efct.vport_list);
-       spin_unlock_irqrestore(&efct->tgt_efct.efct_lio_lock, flags);
 
        memset(&vport_id, 0, sizeof(vport_id));
        vport_id.port_name = npiv_wwpn;
@@ -853,6 +849,10 @@ efct_lio_npiv_make_nport(struct target_fabric_configfs *tf,
        }
 
        lio_vport->fc_vport = new_fc_vport;
+       spin_lock_irqsave(&efct->tgt_efct.efct_lio_lock, flags);
+       INIT_LIST_HEAD(&vport_list->list_entry);
+       list_add_tail(&vport_list->list_entry, &efct->tgt_efct.vport_list);
+       spin_unlock_irqrestore(&efct->tgt_efct.efct_lio_lock, flags);
 
        return &lio_vport->vport_wwn;
 }