Message ID | 1505890733-48870-1-git-send-email-hare@suse.de (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
Looks good,
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
On Wed, 20 Sep 2017, 2:58am, Hannes Reinecke wrote: > From: Hannes Reinecke <hare@suse.com> > > When an rport is found in the bindings array there is no guarantee that > it had been a target port, so we need to call fc_remote_port_rolechg() > here to ensure the scsi_target_id is set correctly. > Otherwise the port will never be scanned. > > Signed-off-by: Hannes Reinecke <hare@suse.com> > --- > drivers/scsi/scsi_transport_fc.c | 11 +---------- > 1 file changed, 1 insertion(+), 10 deletions(-) > Verified that port is scanned after applying this patch. Tested-by: Chad Dupuis <chad.dupuis@cavium.com>
Hannes, > When an rport is found in the bindings array there is no guarantee > that it had been a target port, so we need to call > fc_remote_port_rolechg() here to ensure the scsi_target_id is set > correctly. Otherwise the port will never be scanned. Applied to 4.14/scsi-fixes. Thank you!
diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c index 3c6bc0081fcb..377961380fd7 100644 --- a/drivers/scsi/scsi_transport_fc.c +++ b/drivers/scsi/scsi_transport_fc.c @@ -2876,7 +2876,6 @@ fc_remote_port_add(struct Scsi_Host *shost, int channel, memcpy(&rport->port_name, &ids->port_name, sizeof(rport->port_name)); rport->port_id = ids->port_id; - rport->roles = ids->roles; rport->port_state = FC_PORTSTATE_ONLINE; rport->flags &= ~FC_RPORT_FAST_FAIL_TIMEDOUT; @@ -2885,15 +2884,7 @@ fc_remote_port_add(struct Scsi_Host *shost, int channel, fci->f->dd_fcrport_size); spin_unlock_irqrestore(shost->host_lock, flags); - if (ids->roles & FC_PORT_ROLE_FCP_TARGET) { - scsi_target_unblock(&rport->dev, SDEV_RUNNING); - - /* initiate a scan of the target */ - spin_lock_irqsave(shost->host_lock, flags); - rport->flags |= FC_RPORT_SCAN_PENDING; - scsi_queue_work(shost, &rport->scan_work); - spin_unlock_irqrestore(shost->host_lock, flags); - } + fc_remote_port_rolechg(rport, ids->roles); return rport; } }