[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <46cf7507-699a-1822-9797-ce352a6fc767@gmail.com>
Date: Wed, 13 Feb 2019 09:58:26 -0800
From: Eric Dumazet <eric.dumazet@...il.com>
To: Phil Sutter <phil@....cc>, Eric Dumazet <edumazet@...gle.com>,
David Ahern <dsahern@...il.com>,
Stephen Hemminger <stephen@...workplumber.org>,
netdev <netdev@...r.kernel.org>,
Hangbin Liu <liuhangbin@...il.com>
Subject: Re: [PATCH iproute2] lib/libnetlink: ensure a minimum of 32KB for the
buffer used in rtnl_recvmsg()
On 02/13/2019 09:46 AM, Phil Sutter wrote:
> Hi Eric,
>
> On Tue, Feb 12, 2019 at 05:58:41PM -0800, Eric Dumazet wrote:
>> In the past, we tried to increase the buffer size up to 32 KB in order
>> to reduce number of syscalls per dump.
>>
>> Commit 2d34851cd341 ("lib/libnetlink: re malloc buff if size is not enough")
>> brought the size back to 4KB because the kernel can not know the application
>> is ready to receive bigger requests.
>>
>> See kernel commits 9063e21fb026 ("netlink: autosize skb lengthes") and
>> d35c99ff77ec ("netlink: do not enter direct reclaim from netlink_dump()")
>> for more details.
>
> Wouldn't it be better if the kernel recognized MSG_TRUNC and allocated a
> buffer large enough to hold the full message in that case? I have no
> idea how hard that would be to implement, but calling recvmsg() with
> MSG_TRUNC set and not getting the full message length in return is not
> quite what one expects after reading recvmsg(2).
>
I am not sure what you are suggesting.
The buffer is already in the kernel, this is the skb in the receive queue.
Its size is unknown... We only can guess.
We can not change old kernels, and new iproute2/ss commands need to work with old kernels.
We can not change MSG_TRUNC semantic.
Adding another MSG_be_gentle_do_not_consume_skb_if_user_size_is_too_small wont solve the issue for old kernels.
Powered by blists - more mailing lists