[SCSI] bnx2i: Fixed the remote TCP RST handling for the 570X (1g)
authorEddie Wai <eddie.wai@broadcom.com>
Tue, 23 Nov 2010 23:29:24 +0000 (15:29 -0800)
committerJames Bottomley <James.Bottomley@suse.de>
Tue, 21 Dec 2010 18:24:12 +0000 (12:24 -0600)
Modified the handling of the remote TCP RST code so the chip can now
flush the tx pipe accordingly upon a remote TCP RST reception.

Signed-off-by: Eddie Wai <eddie.wai@broadcom.com>
Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/bnx2i/bnx2i_hwi.c
drivers/scsi/bnx2i/bnx2i_iscsi.c

index c9a3c0ff3c2feddc807dbe7cf0601010232822b3..0d40daefd5725e71b2508d7fcceb41ef00aef708 100644 (file)
@@ -2350,10 +2350,14 @@ static void bnx2i_cm_remote_close(struct cnic_sock *cm_sk)
 static void bnx2i_cm_remote_abort(struct cnic_sock *cm_sk)
 {
        struct bnx2i_endpoint *ep = (struct bnx2i_endpoint *) cm_sk->context;
+       u32 old_state = ep->state;
 
        ep->state = EP_STATE_TCP_RST_RCVD;
-       if (ep->conn)
-               bnx2i_recovery_que_add_conn(ep->hba, ep->conn);
+       if (old_state == EP_STATE_DISCONN_START)
+               wake_up_interruptible(&ep->ofld_wait);
+       else
+               if (ep->conn)
+                       bnx2i_recovery_que_add_conn(ep->hba, ep->conn);
 }
 
 
index b7668122cf19cea455af6f3360fc5d3dfa21a8ab..4882b00b3539b307ca2205d0078513b67c426ae0 100644 (file)
@@ -1907,6 +1907,7 @@ static int bnx2i_ep_tcp_conn_active(struct bnx2i_endpoint *bnx2i_ep)
 
        switch (bnx2i_ep->state) {
        case EP_STATE_CONNECT_START:
+       case EP_STATE_CONNECT_FAILED:
        case EP_STATE_CLEANUP_FAILED:
        case EP_STATE_OFLD_FAILED:
        case EP_STATE_DISCONN_TIMEDOUT:
@@ -1922,13 +1923,10 @@ static int bnx2i_ep_tcp_conn_active(struct bnx2i_endpoint *bnx2i_ep)
                ret = 1;
                break;
        case EP_STATE_TCP_RST_RCVD:
-               ret = 0;
-               break;
-       case EP_STATE_CONNECT_FAILED:
                if (cnic_dev_10g)
-                       ret = 1;
-               else
                        ret = 0;
+               else
+                       ret = 1;
                break;
        default:
                ret = 0;