]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
[SCSI] libfc: During fabric logoff, flush the rport Q after logging off dns port
authorAbhijeet Joglekar <abjoglek@cisco.com>
Tue, 21 Apr 2009 23:27:09 +0000 (16:27 -0700)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Mon, 27 Apr 2009 15:19:00 +0000 (10:19 -0500)
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>
drivers/scsi/libfc/fc_lport.c

index 52c4f2dfcfd3cbeae038cce17fcfc35691b814ac..4cd953378c57c4624e1ad5d0b6de4519988915a6 100644 (file)
@@ -618,6 +618,11 @@ int fc_fabric_logoff(struct fc_lport *lport)
 {
        lport->tt.disc_stop_final(lport);
        mutex_lock(&lport->lp_mutex);
+       if (lport->dns_rp)
+               lport->tt.rport_logoff(lport->dns_rp);
+       mutex_unlock(&lport->lp_mutex);
+       lport->tt.rport_flush_queue();
+       mutex_lock(&lport->lp_mutex);
        fc_lport_enter_logo(lport);
        mutex_unlock(&lport->lp_mutex);
        cancel_delayed_work_sync(&lport->retry_work);
@@ -1408,10 +1413,6 @@ static void fc_lport_enter_logo(struct fc_lport *lport)
 
        fc_lport_state_enter(lport, LPORT_ST_LOGO);
 
-       /* DNS session should be closed so we can release it here */
-       if (lport->dns_rp)
-               lport->tt.rport_logoff(lport->dns_rp);
-
        fp = fc_frame_alloc(lport, sizeof(*logo));
        if (!fp) {
                fc_lport_error(lport, fp);