[PATCH 2/5] qedf: fixup locking in qedf_restart_rport()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



fc_rport_create() needs to be called with disc_mutex held.
And we should re-assign the 'rdata' pointer in case it got changed.

Signed-off-by: Hannes Reinecke <hare@xxxxxxxx>
---
 drivers/scsi/qedf/qedf_els.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/qedf/qedf_els.c b/drivers/scsi/qedf/qedf_els.c
index acb8157a96a8..f93379a4510c 100644
--- a/drivers/scsi/qedf/qedf_els.c
+++ b/drivers/scsi/qedf/qedf_els.c
@@ -363,9 +363,14 @@ void qedf_restart_rport(struct qedf_rport *fcport)
 		    "LOGO port_id=%x.\n", port_id);
 		fc_rport_logoff(rdata);
 		/* Recreate the rport and log back in */
+		mutex_lock(&lport->disc.disc_mutex);
 		rdata = fc_rport_create(lport, port_id);
-		if (rdata)
+		if (rdata) {
+			mutex_unlock(&lport->disc.disc_mutex);
 			fc_rport_login(rdata);
+			fcport->rdata = rdata;
+		} else
+			mutex_unlock(&lport->disc.disc_mutex);
 	}
 	clear_bit(QEDF_RPORT_IN_RESET, &fcport->flags);
 }
-- 
2.16.4




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux