aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorAbhijeet Joglekar <abjoglek@cisco.com>2009-04-21 19:27:09 -0400
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2009-04-27 11:19:00 -0400
commita0fd2e49ec75bf74d3d202df51dfe65ad4c32605 (patch)
tree5bab1f0d7dc606da8c51722219a8d841bafe42f3 /drivers/scsi
parentb4c6f54632ad664a3d9e7f05e4ea0f1803e32755 (diff)
[SCSI] libfc: During fabric logoff, flush the rport Q after logging off dns port
We want to generate the rport queue event (from the logoff) before flushing the queue otherwise the event may still be in the queue when we logoff. Signed-off-by: Abhijeet Joglekar <abjoglek@cisco.com> Signed-off-by: Robert Love <robert.w.love@intel.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/libfc/fc_lport.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c
index 52c4f2dfcfd3..4cd953378c57 100644
--- a/drivers/scsi/libfc/fc_lport.c
+++ b/drivers/scsi/libfc/fc_lport.c
@@ -618,6 +618,11 @@ int fc_fabric_logoff(struct fc_lport *lport)
618{ 618{
619 lport->tt.disc_stop_final(lport); 619 lport->tt.disc_stop_final(lport);
620 mutex_lock(&lport->lp_mutex); 620 mutex_lock(&lport->lp_mutex);
621 if (lport->dns_rp)
622 lport->tt.rport_logoff(lport->dns_rp);
623 mutex_unlock(&lport->lp_mutex);
624 lport->tt.rport_flush_queue();
625 mutex_lock(&lport->lp_mutex);
621 fc_lport_enter_logo(lport); 626 fc_lport_enter_logo(lport);
622 mutex_unlock(&lport->lp_mutex); 627 mutex_unlock(&lport->lp_mutex);
623 cancel_delayed_work_sync(&lport->retry_work); 628 cancel_delayed_work_sync(&lport->retry_work);
@@ -1408,10 +1413,6 @@ static void fc_lport_enter_logo(struct fc_lport *lport)
1408 1413
1409 fc_lport_state_enter(lport, LPORT_ST_LOGO); 1414 fc_lport_state_enter(lport, LPORT_ST_LOGO);
1410 1415
1411 /* DNS session should be closed so we can release it here */
1412 if (lport->dns_rp)
1413 lport->tt.rport_logoff(lport->dns_rp);
1414
1415 fp = fc_frame_alloc(lport, sizeof(*logo)); 1416 fp = fc_frame_alloc(lport, sizeof(*logo));
1416 if (!fp) { 1417 if (!fp) {
1417 fc_lport_error(lport, fp); 1418 fc_lport_error(lport, fp);