From: ebiederm@xmission.com (Eric W. Biederman)
To: Nicolas Iooss <nicolas.iooss_linux@m4x.org>
Cc: Andy Lutomirski <luto@amacapital.net>,
Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] userns: simplify map_id_range_* functions
Date: Mon, 27 Jul 2015 13:04:15 -0500 [thread overview]
Message-ID: <87d1zd32ao.fsf@x220.int.ebiederm.org> (raw)
In-Reply-To: <55B62B23.8050008@m4x.org> (Nicolas Iooss's message of "Mon, 27 Jul 2015 20:59:15 +0800")
Nicolas Iooss <nicolas.iooss_linux@m4x.org> writes:
> On 07/27/2015 12:29 PM, Eric W. Biederman wrote:
>> Nicolas Iooss <nicolas.iooss_linux@m4x.org> writes:
>>
>>> Functions map_id_range_down, map_id_down and map_id_up all used the
>>> construction:
>>>
>>> if (...)
>>> id = ...
>>> else
>>> id = ...
>>> return id;
>>>
>>> which can be simplified by directly returning the result of the
>>> computations in each branch.
>>>
>>> Moreover as the condition tested whether the "break;" in the previous
>>> for loop was hit, it is simpler to directly compute the result and
>>> return it.
>>
>> It is not a simplification, it is just code motion.
>
> I agree. Also on my system (x86_64 kernel with Arch Linux +
> CONFIG_USERNS configuration), the assembly code generated either by gcc
> 5.2.0 or by clang 3.6.2 (with LLVMLinux patches) does not change at all
> with this patch. So there would be absolutely no performance change or
> similar things which could motivate this change.
Thank you for that information.
>> Further at least to my eyes adding multiple exit points and setting the
>> same value in two different places actually obscures what the functions
>> are doing.
>
> I did not understand what "setting the same value in two different
> places" refers to. Anyway, all right. I haven't got much experience
> about code maintenance so if you say my patch make things less clear, I
> believe you.
I was referring to computing the value of id that is returned.
In this case I think what is important is that it makes the code clear
for me, as I have to maintain it. That doesn't go so far as to
obscure it for everyone but on little issues where it is a judgement
call making it easy for the maintainer is good call.
I really appreciate that the setting of id is concentrated into just a
couple of adjacent lines. That makes it easy to reason about the
value that the variable id has.
Additionally in some sense it is important to be cautious about small
simple code changes as they are so trivial it is natural to relax and
not test or examine such changes as closely and that is when bugs slip
in.
In a general sense there also remains the point made in "Gotos
Considered Harmful" that functions with multiple exit points are more
difficult to reason about. Dykstra was pretty sharp.
>> If we could talk about speeding up the performance of the stat system
>> call I think there would be a point in mucking with these functions.
>>
>> As it is I think it is I think merging your patch will just make it more
>> difficult to understand what the code is doing in the future, with no
>> benefit except a reduction in line count.
>
> OK. My intention was precisely to make the code easier to understand
> (because I spent some time before I understood there really were only
> two cases: existing mapping or not) but if you think my patch does the
> opposite, I accept dropping it.
>
> Thanks for your comments.
Welcome and thank you for pointing out how you figured the code could be
made clearer.
Eric
prev parent reply other threads:[~2015-07-27 18:10 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-26 1:50 [PATCH] userns: simplify map_id_range_* functions Nicolas Iooss
2015-07-27 4:29 ` Eric W. Biederman
2015-07-27 12:59 ` Nicolas Iooss
2015-07-27 18:04 ` Eric W. Biederman [this message]
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=87d1zd32ao.fsf@x220.int.ebiederm.org \
--to=ebiederm@xmission.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=nicolas.iooss_linux@m4x.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