netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Miller <davem@davemloft.net>
To: stefan@loplof.de
Cc: herbert@gondor.apana.org.au, simon@fire.lp0.eu,
	linux-kernel@vger.kernel.org, netdev@vger.kernel.org
Subject: Re: sockets affected by IPsec always block (2.6.23)
Date: Thu, 06 Dec 2007 03:13:02 -0800 (PST)	[thread overview]
Message-ID: <20071206.031302.201608796.davem@davemloft.net> (raw)
In-Reply-To: <200712061156.48810.stefan@loplof.de>

From: Stefan Rompf <stefan@loplof.de>
Date: Thu, 6 Dec 2007 11:56:48 +0100

> Am Donnerstag, 6. Dezember 2007 09:53 schrieb David Miller:
> 
> > > I think the words "shall fail" and "immediately" are quite clear.
> >
> > They are, but the context in which they apply is vague.
> 
> "socket is connection-mode" => SOCK_STREAM

I meant whether "immediately" mean in reference to socket
state or includes auxiliary things like route lookups.

When you do a non-blocking write on a socket, things like
memory allocations can block, potentially for a long time.
It is an example where there are definite boundaries to where
the non-blocking'ness applies.

And therefore it is not so cut and dry and you present this
issue.

> The reason why I'm pushing this issue another time is that I know quite a 
> bit about system level application development. A very typical design pattern 
> for non-naive single or multi threaded programs is that they set all 
> communication sockets to be nonblocking and use a select()/epoll() based loop 
> to dispatch IO. This often includes initiating a TCP connect() and 
> asynchronously waiting for it to finish or fail from the main loop.
>
> The dangerous situation here is that in 99% of all cases things will just work 
> because the phase 2 SA exists. In 0.8%, the SA will be established in <1 sec. 
> However, in the rest of time the server application that you have considered 
> to be stable will end up sleeping with all threads in a connect() call that 
> is supposed to return immediatly.

And that connect() call can hang for a long time due to any memory
allocation done in the connect() path.

You are not avoiding blocking by setting O_NONBLOCK on the socket, it
is quite foolhardy to think that it does so unilaterally.

And that's why this is a grey area.  Why is waiting for memory
allocation on a O_NONBLOCK socket OK but waiting for IPSEC route
resolution is not?

  reply	other threads:[~2007-12-06 11:13 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-12-04 18:53 sockets affected by IPsec always block (2.6.23) Simon Arlott
2007-12-05  0:12 ` Herbert Xu
2007-12-05  6:30   ` David Miller
2007-12-05  6:51     ` Herbert Xu
2007-12-05  7:12       ` David Miller
2007-12-05  7:16         ` Herbert Xu
2007-12-05  7:34           ` David Miller
2007-12-05  7:39             ` Herbert Xu
2007-12-05  9:55               ` David Miller
2007-12-05  9:57                 ` Herbert Xu
2007-12-05 18:42         ` Stefan Rompf
2007-12-05 18:39       ` Stefan Rompf
2007-12-06  2:25         ` David Miller
2007-12-06  8:49           ` Stefan Rompf
2007-12-06  8:53             ` David Miller
2007-12-06 10:56               ` Stefan Rompf
2007-12-06 11:13                 ` David Miller [this message]
2007-12-06 11:35                   ` Stefan Rompf
2007-12-06 11:39                     ` David Miller
2007-12-06 12:30                       ` Stefan Rompf
2007-12-06 13:55                         ` David Miller
2007-12-06 14:31                           ` Stefan Rompf
2007-12-07  3:20                             ` David Miller
2007-12-07  9:29                               ` Stefan Rompf
2007-12-16 22:47     ` Bill Davidsen
2007-12-16 23:22       ` David Miller
2007-12-05  6:06 ` 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=20071206.031302.201608796.davem@davemloft.net \
    --to=davem@davemloft.net \
    --cc=herbert@gondor.apana.org.au \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=simon@fire.lp0.eu \
    --cc=stefan@loplof.de \
    /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;
as well as URLs for NNTP newsgroup(s).