All of lore.kernel.org
 help / color / mirror / Atom feed
From: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
To: Octavian Purdila <opurdila@ixiacom.com>
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, axboe@kernel.dk
Subject: Re: [PATCH] tcp: do not promote SPLICE_F_NONBLOCK to socket O_NONBLOCK
Date: Fri, 18 Jul 2008 21:53:41 +0400	[thread overview]
Message-ID: <20080718175341.GA21496@2ka.mipt.ru> (raw)
In-Reply-To: <200807182004.44664.opurdila@ixiacom.com>

Hi.

On Fri, Jul 18, 2008 at 08:04:44PM +0300, Octavian Purdila (opurdila@ixiacom.com) wrote:
> Suppose we have 20 packets in the socket queue and the pipe is empty and the 
> application calls splice(sock, pipe, 17, flags=0).
> 
> Then, tcp_splice_read will be called, which in turn calls tcp_read_sock. 
> 
> tcp_read_sock will loop until all the 17 bytes will be read from the socket. 
> tcp_read_sock calls skb_splice_bits which calls splice_to_pipe.

How come?
spd_fill_page() should fail when it will be called for the 17'th skb and
all reading from the socket will return, and thus can be sent to the
file.

> Now while skb_splice_bits is carefull to only put a maximum of PIPE_BUFFERS 
> during its iteration, due to the looping in tcp_read_sock, we will end up 
> with 17 calls to splice_to_pipe. Thus on the 17th call, splice_to_pipe will 
> block.

Where exactly?
Why 
tcp_splice_data_recv()->skb_splice_bits()->__skb_splice_bits()->spd_fill_page()
callchain does not return error and that pipe is full?

-- 
	Evgeniy Polyakov

  reply	other threads:[~2008-07-18 17:53 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-17 13:33 [PATCH] tcp: do not promote SPLICE_F_NONBLOCK to socket O_NONBLOCK Octavian Purdila
2008-07-17 14:21 ` Evgeniy Polyakov
2008-07-17 14:47   ` Octavian Purdila
2008-07-17 17:41     ` Evgeniy Polyakov
2008-07-17 21:52       ` Octavian Purdila
2008-07-18 10:53         ` Evgeniy Polyakov
2008-07-18 11:18           ` Octavian Purdila
2008-07-18 12:24             ` Evgeniy Polyakov
2008-07-18 14:04               ` Octavian Purdila
2008-07-18 14:32                 ` Evgeniy Polyakov
2008-07-18 15:50                   ` Octavian Purdila
2008-07-18 16:00                     ` Evgeniy Polyakov
2008-07-18 17:04                       ` Octavian Purdila
2008-07-18 17:53                         ` Evgeniy Polyakov [this message]
2008-07-18 18:16                           ` Octavian Purdila
2008-07-18 18:35                             ` Evgeniy Polyakov
2008-07-18 18:43                               ` Octavian Purdila
2008-07-19  8:51                                 ` Evgeniy Polyakov
2008-07-19 11:18                                   ` Octavian Purdila

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=20080718175341.GA21496@2ka.mipt.ru \
    --to=johnpol@2ka.mipt.ru \
    --cc=axboe@kernel.dk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=opurdila@ixiacom.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.