diff options
author | Joe Eykholt <jeykholt@cisco.com> | 2009-08-25 14:01:50 -0700 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-09-10 12:07:46 -0500 |
commit | 48f00902ba40d3e4467782a42258b952437a89f9 (patch) | |
tree | 9559e9a92cadd9988ff32940358c8b6d9dee5140 /drivers/scsi/libfc/fc_lport.c | |
parent | b5cbf083736e14911c32fca2a93c540a92e8413d (diff) | |
download | kernel-crypto-48f00902ba40d3e4467782a42258b952437a89f9.tar.gz kernel-crypto-48f00902ba40d3e4467782a42258b952437a89f9.tar.xz kernel-crypto-48f00902ba40d3e4467782a42258b952437a89f9.zip |
[SCSI] libfc: make rport module maintain the rport list
The list of remote ports (struct fc_rport_priv) has been
maintained by the discovery module. In preparation for having
lport->tt.rport_create() do a lookup first, maintain the
rports list in the rport module. It will still be protected
by the disc_mutex.
The DNS rport is an exception for until after further patches.
For now, do not add it to the list.
The point-to-point rport will be in the discovery list.
So at shutdown, it doesn't need to be separately logged out.
Signed-off-by: Joe Eykholt <jeykholt@cisco.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/libfc/fc_lport.c')
-rw-r--r-- | drivers/scsi/libfc/fc_lport.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c index 22c0f7bc004..f33e5732e3f 100644 --- a/drivers/scsi/libfc/fc_lport.c +++ b/drivers/scsi/libfc/fc_lport.c @@ -205,12 +205,11 @@ static void fc_lport_ptp_setup(struct fc_lport *lport, ids.node_name = remote_wwnn; ids.roles = FC_RPORT_ROLE_UNKNOWN; - if (lport->ptp_rp) { + mutex_lock(&lport->disc.disc_mutex); + if (lport->ptp_rp) lport->tt.rport_logoff(lport->ptp_rp); - lport->ptp_rp = NULL; - } - lport->ptp_rp = lport->tt.rport_create(lport, &ids); + mutex_unlock(&lport->disc.disc_mutex); lport->tt.rport_login(lport->ptp_rp); @@ -931,10 +930,7 @@ static void fc_lport_reset_locked(struct fc_lport *lport) if (lport->dns_rp) lport->tt.rport_logoff(lport->dns_rp); - if (lport->ptp_rp) { - lport->tt.rport_logoff(lport->ptp_rp); - lport->ptp_rp = NULL; - } + lport->ptp_rp = NULL; lport->tt.disc_stop(lport); @@ -1304,7 +1300,9 @@ static void fc_lport_enter_dns(struct fc_lport *lport) fc_lport_state_enter(lport, LPORT_ST_DNS); + mutex_lock(&lport->disc.disc_mutex); rdata = lport->tt.rport_create(lport, &ids); + mutex_unlock(&lport->disc.disc_mutex); if (!rdata) goto err; |