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");
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)
{
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);