diff options
author | Joe Eykholt <jeykholt@cisco.com> | 2009-08-25 17:01:55 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-09-10 13:07:46 -0400 |
commit | 19f97e3c0acc5eb03486044f5428395b7690a01a (patch) | |
tree | 640a956483f932f778706001a3582c79189aa482 | |
parent | 48f00902ba40d3e4467782a42258b952437a89f9 (diff) |
[SCSI] libfc: have rport_create do a lookup for pre-existing rports first
For future discovery patches, change rport_create to return a previously
created rport_priv that has the FC_ID as long as it isn't in deleted state.
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>
-rw-r--r-- | drivers/scsi/libfc/fc_disc.c | 9 | ||||
-rw-r--r-- | drivers/scsi/libfc/fc_rport.c | 4 |
2 files changed, 7 insertions, 6 deletions
diff --git a/drivers/scsi/libfc/fc_disc.c b/drivers/scsi/libfc/fc_disc.c index e6b13bfecf73..266aa1ea01e4 100644 --- a/drivers/scsi/libfc/fc_disc.c +++ b/drivers/scsi/libfc/fc_disc.c | |||
@@ -377,12 +377,9 @@ static int fc_disc_new_target(struct fc_disc *disc, | |||
377 | ids->port_id != fc_host_port_id(lport->host) && | 377 | ids->port_id != fc_host_port_id(lport->host) && |
378 | ids->port_name != lport->wwpn) { | 378 | ids->port_name != lport->wwpn) { |
379 | if (!rdata) { | 379 | if (!rdata) { |
380 | rdata = lport->tt.rport_lookup(lport, ids->port_id); | 380 | rdata = lport->tt.rport_create(lport, ids); |
381 | if (!rdata) { | 381 | if (!rdata) |
382 | rdata = lport->tt.rport_create(lport, ids); | 382 | error = -ENOMEM; |
383 | if (!rdata) | ||
384 | error = -ENOMEM; | ||
385 | } | ||
386 | } | 383 | } |
387 | if (rdata) { | 384 | if (rdata) { |
388 | rdata->ops = &fc_disc_rport_ops; | 385 | rdata->ops = &fc_disc_rport_ops; |
diff --git a/drivers/scsi/libfc/fc_rport.c b/drivers/scsi/libfc/fc_rport.c index a9087b31bce9..29bb6fd10036 100644 --- a/drivers/scsi/libfc/fc_rport.c +++ b/drivers/scsi/libfc/fc_rport.c | |||
@@ -98,6 +98,10 @@ static struct fc_rport_priv *fc_rport_create(struct fc_lport *lport, | |||
98 | { | 98 | { |
99 | struct fc_rport_priv *rdata; | 99 | struct fc_rport_priv *rdata; |
100 | 100 | ||
101 | rdata = lport->tt.rport_lookup(lport, ids->port_id); | ||
102 | if (rdata) | ||
103 | return rdata; | ||
104 | |||
101 | rdata = kzalloc(sizeof(*rdata), GFP_KERNEL); | 105 | rdata = kzalloc(sizeof(*rdata), GFP_KERNEL); |
102 | if (!rdata) | 106 | if (!rdata) |
103 | return NULL; | 107 | return NULL; |