From 579f4ab50ac47af0e2c373fd1fc32d7adfdfc324 Mon Sep 17 00:00:00 2001 From: Eldad Zinger Date: Thu, 5 Aug 2010 10:16:58 +0300 Subject: [PATCH] sdp: properly kill nagle_timer on socket reset Signed-off-by: Eldad Zinger --- drivers/infiniband/ulp/sdp/sdp_bcopy.c | 6 ++++-- drivers/infiniband/ulp/sdp/sdp_tx.c | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/infiniband/ulp/sdp/sdp_bcopy.c b/drivers/infiniband/ulp/sdp/sdp_bcopy.c index 663bf2b7a0ea..3fba26203f61 100644 --- a/drivers/infiniband/ulp/sdp/sdp_bcopy.c +++ b/drivers/infiniband/ulp/sdp/sdp_bcopy.c @@ -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) diff --git a/drivers/infiniband/ulp/sdp/sdp_tx.c b/drivers/infiniband/ulp/sdp/sdp_tx.c index e542e226cd18..75137c29ccb0 100644 --- a/drivers/infiniband/ulp/sdp/sdp_tx.c +++ b/drivers/infiniband/ulp/sdp/sdp_tx.c @@ -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); -- 2.50.1