From: Nikolay Aleksandrov <nikolay@redhat.com>
To: Eric Dumazet <eric.dumazet@gmail.com>,
Veaceslav Falico <vfalico@redhat.com>
Cc: netdev@vger.kernel.org, Andy Gospodarek <andy@greyhouse.net>,
Jay Vosburgh <fubar@us.ibm.com>,
"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH net] bonding: fix packets_per_slave showing
Date: Thu, 05 Dec 2013 13:42:08 +0100 [thread overview]
Message-ID: <52A074A0.7050807@redhat.com> (raw)
In-Reply-To: <1386246835.30495.175.camel@edumazet-glaptop2.roam.corp.google.com>
On 12/05/2013 01:33 PM, Eric Dumazet wrote:
> On Thu, 2013-12-05 at 12:08 +0100, Veaceslav Falico wrote:
>> On Thu, Dec 05, 2013 at 11:36:58AM +0100, Nikolay Aleksandrov wrote:
>>> There's an issue when showing the value of packets_per_slave due to
>>> using signed integer. The value may be < 0 and thus not put through
>>> reciprocal_value() before showing. This patch makes it use unsigned
>>> integer when showing it.
>>
>> I was already checking my basic algebra knowledge here,
>> reciprocal_value(reciprocal_value(0..USHRT_MAX)) can become negative?!? :)
>>
>> If anyone's also wondering...
>>
>> packets_per_slave is reciprocal_value(0..USHRT_MAX), and thus can indeed be
>> negative, and then the code
>>
>> if (packets_per_slave > 1)
>> packets_per_slave = reciprocal_value(packets_per_slave);
>>
>> would fail to recognise that it's a reciprocal_divide() value, and not a
>> standard 0/1 option (in bond_rr_gen_slave_id() we verify it via a switch,
>> so we're safe there) - and thus output nonsense.
>>
>> Acked-by: Veaceslav Falico <vfalico@redhat.com>
>
> This code is very confusing.
>
> Please rename bond->params.packets_per_slave
> to bond->params.reciprocal_packets_per_slave
>
> To make clear that its the reciprocal value.
>
> Also the module parameter is named packets_per_slave, it would be nice
> if same name was not reused as local variable in bond_rr_gen_slave_id()
>
> bond_check_params() reads the sys value several times.
>
> This is racy with /sys access.
>
IIRC bond_check_params() runs before sysfs is initialized for the bond device.
> You should use ACCESS_ONCE() to make sure nothing bad happens.
>
Actually I think ACCESS_ONCE() should be added to bond_show_packets_per_slave
and to bond_rr_gen_slave_id() just as a precaution. It'll also serve the purpose
to show what's intended.
What do you think ?
>
>
Thanks for the feedback, I'll address the ACCESS_ONCE() in a separate patch for
net and leave the renaming to my net-next patch which will take care of the
types as well.
Cheers,
Nik
next prev parent reply other threads:[~2013-12-05 12:46 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-05 10:36 [PATCH net] bonding: fix packets_per_slave showing Nikolay Aleksandrov
2013-12-05 11:08 ` Veaceslav Falico
2013-12-05 11:35 ` Nikolay Aleksandrov
2013-12-05 12:33 ` Eric Dumazet
2013-12-05 12:42 ` Nikolay Aleksandrov [this message]
2013-12-05 12:42 ` Veaceslav Falico
2013-12-05 13:03 ` Eric Dumazet
2013-12-06 20:17 ` 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=52A074A0.7050807@redhat.com \
--to=nikolay@redhat.com \
--cc=andy@greyhouse.net \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=fubar@us.ibm.com \
--cc=netdev@vger.kernel.org \
--cc=vfalico@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.