[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <c33b6435-1b27-32af-b14c-0f3a0318dcca@redhat.com>
Date: Mon, 31 Jan 2022 13:48:11 -0500
From: Waiman Long <longman@...hat.com>
To: Andy Shevchenko <andriy.shevchenko@...ux.intel.com>,
David Rientjes <rientjes@...gle.com>
Cc: Johannes Weiner <hannes@...xchg.org>,
Michal Hocko <mhocko@...nel.org>,
Vladimir Davydov <vdavydov.dev@...il.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Petr Mladek <pmladek@...e.com>,
Steven Rostedt <rostedt@...dmis.org>,
Sergey Senozhatsky <senozhatsky@...omium.org>,
Rasmus Villemoes <linux@...musvillemoes.dk>,
linux-kernel@...r.kernel.org, cgroups@...r.kernel.org,
linux-mm@...ck.org, Ira Weiny <ira.weiny@...el.com>,
Rafael Aquini <aquini@...hat.com>
Subject: Re: [PATCH v2 1/3] lib/vsprintf: Avoid redundant work with 0 size
On 1/31/22 05:34, Andy Shevchenko wrote:
> On Mon, Jan 31, 2022 at 12:30:33PM +0200, Andy Shevchenko wrote:
>> On Mon, Jan 31, 2022 at 12:25:09PM +0200, Andy Shevchenko wrote:
>>> On Sun, Jan 30, 2022 at 12:49:37PM -0800, David Rientjes wrote:
>>>> On Sat, 29 Jan 2022, Waiman Long wrote:
>>>>
>>>>> For *scnprintf(), vsnprintf() is always called even if the input size is
>>>>> 0. That is a waste of time, so just return 0 in this case.
>>> Why do you think it's not legit?
>> I have to elaborate.
>>
>> For *nprintf() the size=0 is quite useful to have.
>> For *cnprintf() the size=0 makes less sense, but, if we read `man snprintf()`:
>>
>> The functions snprintf() and vsnprintf() do not write more than size bytes
>> (including the terminating null byte ('\0')). If the output was truncated due
>> to this limit, then the return value is the number of characters (excluding
>> the terminating null byte) which would have been written to the final string
>> if enough space had been available. Thus, a return value of size or more
>> means that the output was truncated. (See also below under NOTES.)
>>
>> If an output error is encountered, a negative value is returned.
>>
>> Note the last sentence there. You need to answer to it in the commit message
>> why your change is okay and it will show that you thought through all possible
>> scenarios.
> Also it seems currently the kernel documentation is not aligned with the code
>
> "If @size is == 0 the function returns 0."
>
> It should mention the (theoretical?) possibility of getting negative value,
> if vsnprintf() returns negative value.
AFAICS, the kernel's vsnprintf() function will not return -1. So in that
sense it is not fully POSIX compliant. Since vscnprintf() function
always returns 0 when size is 0, there is no point in finding out
exactly how much bytes the buffer needs to hold the formatted text as
this information will not be returned back to the caller anyway. I will
update to indicate the vsnprintf() does not return -1.
Thanks,
Longmn
Powered by blists - more mailing lists