diff options
author | Andy Grover <andy.grover@oracle.com> | 2010-03-11 13:49:58 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-03-16 21:16:55 -0700 |
commit | 8e82376e5f72bb576504c8c6117685e56c1b97db (patch) | |
tree | 8aa3e7a354620a0d67a403aedd056c9a58b4e57a /net/rds/tcp_send.c | |
parent | b075cfdb666d6fa90c55c8619186398a3c4fd865 (diff) | |
download | linux-8e82376e5f72bb576504c8c6117685e56c1b97db.tar.gz linux-8e82376e5f72bb576504c8c6117685e56c1b97db.tar.bz2 linux-8e82376e5f72bb576504c8c6117685e56c1b97db.zip |
RDS/TCP: Wait to wake thread when write space available
Instead of waking the send thread whenever any send space is available,
wait until it is at least half empty. This is modeled on how
sock_def_write_space() does it, and may help to minimize context
switches.
Signed-off-by: Andy Grover <andy.grover@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/rds/tcp_send.c')
-rw-r--r-- | net/rds/tcp_send.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/net/rds/tcp_send.c b/net/rds/tcp_send.c index 34fdcc059e54..a28b895ff0d1 100644 --- a/net/rds/tcp_send.c +++ b/net/rds/tcp_send.c @@ -240,7 +240,9 @@ void rds_tcp_write_space(struct sock *sk) tc->t_last_seen_una = rds_tcp_snd_una(tc); rds_send_drop_acked(conn, rds_tcp_snd_una(tc), rds_tcp_is_acked); - queue_delayed_work(rds_wq, &conn->c_send_w, 0); + if ((atomic_read(&sk->sk_wmem_alloc) << 1) <= sk->sk_sndbuf) + queue_delayed_work(rds_wq, &conn->c_send_w, 0); + out: read_unlock(&sk->sk_callback_lock); |