From ff676b469fba17227df7cb6a88d3652f6c4fc061 Mon Sep 17 00:00:00 2001 From: Simon P. Graham Date: Mon, 11 Aug 2008 10:27:08 -0400 Subject: [PATCH] Ensure data is ACK'd at TCP level in a timely fashion. --- drbd/drbd_int.h | 6 ++++++ drbd/drbd_receiver.c | 3 +++ 2 files changed, 9 insertions(+), 0 deletions(-) diff --git a/drbd/drbd_int.h b/drbd/drbd_int.h index 576c72c..68c5427 100644 --- a/drbd/drbd_int.h +++ b/drbd/drbd_int.h @@ -1522,6 +1522,12 @@ static inline void drbd_tcp_flush(struct socket *sock) tcp_setsockopt(sock->sk, SOL_TCP, TCP_CORK, (char __user *)&val, sizeof(val) ); } +static inline void drbd_tcp_quickack(struct socket *sock) +{ + int val = 1; + tcp_setsockopt(sock->sk, SOL_TCP, TCP_QUICKACK, (char*)&val, sizeof(val) ); +} + /* drbd_proc.c */ extern struct proc_dir_entry *drbd_proc; extern struct file_operations drbd_proc_fops; diff --git a/drbd/drbd_receiver.c b/drbd/drbd_receiver.c index 71e7601..c619c7a 100644 --- a/drbd/drbd_receiver.c +++ b/drbd/drbd_receiver.c @@ -2738,6 +2738,9 @@ STATIC int receive_UnplugRemote(struct drbd_conf *mdev, struct Drbd_Header *h) { if (mdev->state.disk >= Inconsistent) drbd_kick_lo(mdev); + /* Make sure we've acked all the TCP data associated + with the data requests being unplugged */ + drbd_tcp_quickack(mdev->data.socket); return TRUE; /* cannot fail. */ } -- 1.5.4.rc1