netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Patrick McHardy <kaber@trash.net>
To: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: netdev@vger.kernel.org, davem@davemloft.net
Subject: Re: [PATCH] netlink: add NETLINK_NO_ENOBUFS socket flag
Date: Mon, 23 Mar 2009 13:41:38 +0100	[thread overview]
Message-ID: <49C78382.9000600@trash.net> (raw)
In-Reply-To: <49C77FC8.2010803@netfilter.org>

Pablo Neira Ayuso wrote:
> Patrick McHardy wrote:
>> Pablo Neira Ayuso wrote:
>>> Patrick McHardy wrote:
>>>> - NETLINK_NO_CONGESTION_CONTROL seems a bit more descriptive than
>>>>   "NO_ENOBUFS"
>>>>
>>>> - The ENOBUFS error itself is actually not the problem, but the
>>>>   congestion handling. It still makes sense to notify userspace
>>>>   of congestion. I'd suggest to deliver the error, but avoid setting
>>>>   the congestion bit.
>>> I thought about this choice but I see one problem with this. The ENOBUFS
>>> error is attached to the congestion control.
>> What do you mean by "attached to"? Congestion control is done by
>> setting and testing bit 0 of nlk->state.
> 
> Yes, but once we set that bit to 1, we stop sending ENOBUFS to
> userspace. So I think that congestion also applies to error reporting,
> with "attached to" I meant "related" :).

That's correct, there can only be a single outstanding error at any
time.

>>> If we keep reporting
>>> ENOBUFS errors to userspace with no congestion control, the listener may
>>> keep receiving ENOBUFS indefinitely. In other words, the congestion
>>> control seems to me like a way to avoid spamming ENOBUFS errors to
>>> userspace.
>> The error will be cleared by the next call to recvmsg().
> 
> Yes, but think about this scenario:
> 
> 1) We hit ENOBUFS, you call recvmsg() you get the error, and error is
> cleared.
> 2) You're going to call recvmsg() again but before doing so, we hit
> ENOBUFS again. So you call recvmsg() and you get the error again.
> 
> I think that this may lead to indefinitely getting ENOBUFS without
> retrieving data under very heavy load.

I'm not sure that this would be a bad thing under the circumstances
you describe. We drop packets, we notify userspace.

I agree though that my proposed way isn't ideal either, since we can't
queue errors, they will be delivered sporadically (not reflecting the
true amount of dropped messages) and without stopping to queue new
messages, it can't be determined at which "position" the error occured.

But I think some notification or other way to notice whats happening
is needed for userspace, otherwise it can neither report not handle
this in any way.


  reply	other threads:[~2009-03-23 12:41 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-23  9:33 [PATCH] netlink: add NETLINK_NO_ENOBUFS socket flag Pablo Neira Ayuso
2009-03-23 11:58 ` Patrick McHardy
2009-03-23 12:11   ` Pablo Neira Ayuso
2009-03-23 12:14     ` Patrick McHardy
2009-03-23 12:25       ` Pablo Neira Ayuso
2009-03-23 12:41         ` Patrick McHardy [this message]
2009-03-23 13:05           ` Pablo Neira Ayuso
2009-03-23 13:09             ` Patrick McHardy
  -- strict thread matches above, loose matches on Subject: below --
2009-03-23 14:18 Pablo Neira Ayuso
2009-03-24 23:38 ` 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=49C78382.9000600@trash.net \
    --to=kaber@trash.net \
    --cc=davem@davemloft.net \
    --cc=netdev@vger.kernel.org \
    --cc=pablo@netfilter.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;
as well as URLs for NNTP newsgroup(s).