From: swivel@shells.gnugeneration.com
To: David Miller <davem@davemloft.net>
Cc: alan@lxorguk.ukuu.org.uk, linux-kernel@vger.kernel.org
Subject: Re: Honoring SO_RCVLOWAT in proto_ops.poll methods
Date: Sun, 5 Oct 2008 16:45:57 -0500 [thread overview]
Message-ID: <20081005214556.GL18569@fc6222126.aspadmin.net> (raw)
In-Reply-To: <20081005.132722.203253085.davem@davemloft.net>
On Sun, Oct 05, 2008 at 01:27:22PM -0700, David Miller wrote:
>
> Give this patch a try:
>
> diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
> index 1ab341e..0e43875 100644
> --- a/net/ipv4/tcp.c
> +++ b/net/ipv4/tcp.c
> @@ -384,13 +384,17 @@ unsigned int tcp_poll(struct file *file, struct socket *sock, poll_table *wait)
>
> /* Connected? */
> if ((1 << sk->sk_state) & ~(TCPF_SYN_SENT | TCPF_SYN_RECV)) {
> + int target = sock_rcvlowat(sk, 0, INT_MAX);
> +
> + if (tp->urg_seq == tp->copied_seq &&
> + !sock_flag(sk, SOCK_URGINLINE) &&
> + tp->urg_data)
> + target--;
> +
> /* Potential race condition. If read of tp below will
> * escape above sk->sk_state, we can be illegally awaken
> * in SYN_* states. */
> - if ((tp->rcv_nxt != tp->copied_seq) &&
> - (tp->urg_seq != tp->copied_seq ||
> - tp->rcv_nxt != tp->copied_seq + 1 ||
> - sock_flag(sk, SOCK_URGINLINE) || !tp->urg_data))
> + if (target >= tp->rcv_nxt - tp->copied_seq)
> mask |= POLLIN | POLLRDNORM;
>
> if (!(sk->sk_shutdown & SEND_SHUTDOWN)) {
I will be testing this patch today. At a glance it appears with this
patch we're still not taking rcvlowat into consideration in recv()
with MSG_PEEK flag set. This should probably also be corrected, as
mentioned in the thread previously.
Regards,
Vito Caputo
next prev parent reply other threads:[~2008-10-05 21:46 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-20 21:42 Honoring SO_RCVLOWAT in proto_ops.poll methods lkml
2008-09-20 22:21 ` David Miller
2008-09-20 23:00 ` lkml
2008-09-21 9:24 ` lkml
2008-09-21 14:18 ` Alan Cox
[not found] ` <20080921145134.GT2761@fc6222126.aspadmin.net>
2008-09-21 20:13 ` Alan Cox
2008-09-21 22:09 ` lkml
2008-10-05 20:27 ` David Miller
2008-10-05 21:45 ` swivel [this message]
2008-10-05 22:30 ` David Miller
2008-10-06 5:17 ` lkml
2008-10-06 17:18 ` David Miller
2008-10-06 17:45 ` David Miller
2008-10-13 7:34 ` David Miller
2008-10-13 8:32 ` swivel
2008-10-13 9:58 ` David Miller
2008-10-20 3:58 ` swivel
2008-10-20 4:25 ` David Miller
2008-11-05 11:36 ` David Miller
2008-09-22 12:15 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081005214556.GL18569@fc6222126.aspadmin.net \
--to=swivel@shells.gnugeneration.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox