diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c index a152f89..e7bbc65 100644 --- a/drivers/scsi/scsi_transport_fc.c +++ b/drivers/scsi/scsi_transport_fc.c @@ -2564,6 +2564,14 @@ fc_remote_port_add(struct Scsi_Host *shost, int channel, /* ensure any stgt delete functions are done */ fc_flush_work(shost); + /* ensure fail fast is done */ + if (!cancel_delayed_work(&rport->fail_io_work)) + fc_flush_devloss(shost); + + /* ensure dev loss is done */ + if (!cancel_delayed_work(&rport->dev_loss_work)) + fc_flush_devloss(shost); + /* * Search the list of "active" rports, for an rport that has been * deleted, but we've held off the real delete while the target @@ -2630,16 +2638,6 @@ fc_remote_port_add(struct Scsi_Host *shost, int channel, (!(ids->roles & FC_PORT_ROLE_FCP_TARGET))) return rport; - /* - * Stop the fail io and dev_loss timers. - * If they flush, the port_state will - * be checked and will NOOP the function. - */ - if (!cancel_delayed_work(&rport->fail_io_work)) - fc_flush_devloss(shost); - if (!cancel_delayed_work(&rport->dev_loss_work)) - fc_flush_devloss(shost); - spin_lock_irqsave(shost->host_lock, flags); rport->flags &= ~(FC_RPORT_FAST_FAIL_TIMEDOUT |