aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorVasu Dev <vasu.dev@intel.com>2011-02-25 18:03:28 -0500
committerJames Bottomley <James.Bottomley@suse.de>2011-02-28 19:34:18 -0500
commitd2f809528a3534ea295b6d855c33cbbb3369d8c9 (patch)
treea8684bca5fc993b2b2ac97bb27490b27d790a50f /drivers/scsi
parentf2f96d20708c53c6825f842beb7bed06f5f15aca (diff)
[SCSI] fcoe: fix broken fcoe interface reset
Reset using "fcoeadm -r" also needs to restart FIP before doing libfc lport reset, this is needed for new switch firmware requiring FIP solicitation before doing FLOGI again during reset. So this patch does this by doing fcoe_ctlr_link_down and then fcoe_ctlr_link_up to reset the interface. The fcoe_ctlr_link_down call path also does lport reset and then fcoe_ctlr_link_up re-starts the fabric login after doing FIP solicitation first to get reset feature working again. Signed-off-by: Vasu Dev <vasu.dev@intel.com> Tested-by: Ross Brattain <ross.b.brattain@intel.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')
-rw-r--r--drivers/scsi/fcoe/fcoe.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/scsi/fcoe/fcoe.c b/drivers/scsi/fcoe/fcoe.c
index 0b44d057ccc3..94fb4802e580 100644
--- a/drivers/scsi/fcoe/fcoe.c
+++ b/drivers/scsi/fcoe/fcoe.c
@@ -2130,7 +2130,13 @@ void fcoe_percpu_clean(struct fc_lport *lport)
2130int fcoe_reset(struct Scsi_Host *shost) 2130int fcoe_reset(struct Scsi_Host *shost)
2131{ 2131{
2132 struct fc_lport *lport = shost_priv(shost); 2132 struct fc_lport *lport = shost_priv(shost);
2133 fc_lport_reset(lport); 2133 struct fcoe_port *port = lport_priv(lport);
2134 struct fcoe_interface *fcoe = port->priv;
2135
2136 fcoe_ctlr_link_down(&fcoe->ctlr);
2137 fcoe_clean_pending_queue(fcoe->ctlr.lp);
2138 if (!fcoe_link_ok(fcoe->ctlr.lp))
2139 fcoe_ctlr_link_up(&fcoe->ctlr);
2134 return 0; 2140 return 0;
2135} 2141}
2136 2142