]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sdp: properly kill nagle_timer on socket reset
authorEldad Zinger <eldadz@mellanox.co.il>
Thu, 5 Aug 2010 07:16:58 +0000 (10:16 +0300)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 6 Oct 2015 12:05:17 +0000 (05:05 -0700)
Signed-off-by: Eldad Zinger <eldadz@mellanox.co.il>
drivers/infiniband/ulp/sdp/sdp_bcopy.c
drivers/infiniband/ulp/sdp/sdp_tx.c

index 663bf2b7a0ea6cb71953591b1e01d7d721095e87..3fba26203f618f7301b37f399fc041c9eb606922 100644 (file)
@@ -129,7 +129,7 @@ static inline int sdp_nagle_off(struct sdp_sock *ssk, struct sk_buff *skb)
                unsigned long mseq = ring_head(ssk->tx_ring);
                ssk->nagle_last_unacked = mseq;
        } else {
-               if (!timer_pending(&ssk->nagle_timer)) {
+               if (!timer_pending(&ssk->nagle_timer) && ssk->qp_active) {
                        mod_timer(&ssk->nagle_timer,
                                        jiffies + SDP_NAGLE_TIMEOUT);
                        sdp_dbg_data(&ssk->isk.sk, "Starting nagle timer\n");
@@ -171,8 +171,10 @@ void sdp_nagle_timeout(unsigned long data)
 out:
        bh_unlock_sock(sk);
 out2:
-       if (sk->sk_send_head) /* If has pending sends - rearm */
+       if (sk->sk_send_head && ssk->qp_active) {
+               /* If has pending sends - rearm */
                mod_timer(&ssk->nagle_timer, jiffies + SDP_NAGLE_TIMEOUT);
+       }
 }
 
 void sdp_post_sends(struct sdp_sock *ssk, gfp_t gfp)
index e542e226cd1861d504b39f807e88c1f14789adb7..75137c29ccb09c0d29f99b413093a91f66b3bdbd 100644 (file)
@@ -517,7 +517,7 @@ void sdp_tx_ring_destroy(struct sdp_sock *ssk)
 {
 
        if (ssk->nagle_timer.function)
-               del_timer(&ssk->nagle_timer);
+               del_timer_sync(&ssk->nagle_timer);
 
        if (ssk->tx_ring.buffer) {
                sdp_tx_ring_purge(ssk);