From: Vlad Buslov <vladbu@nvidia.com>
To: Jakub Kicinski <kuba@kernel.org>
Cc: <davem@davemloft.net>, <netdev@vger.kernel.org>,
<jhs@mojatatu.com>, <xiyou.wangcong@gmail.com>,
<jiri@resnulli.us>
Subject: Re: [PATCH net-next] net: sched: remove redundant 'rtnl_held' argument
Date: Tue, 1 Dec 2020 20:39:16 +0200 [thread overview]
Message-ID: <ygnh1rg9l6az.fsf@nvidia.com> (raw)
In-Reply-To: <20201201090331.469dd407@kicinski-fedora-pc1c0hjn.DHCP.thefacebook.com>
On Tue 01 Dec 2020 at 19:03, Jakub Kicinski <kuba@kernel.org> wrote:
> On Tue, 1 Dec 2020 09:55:37 +0200 Vlad Buslov wrote:
>> On Tue 01 Dec 2020 at 04:52, Jakub Kicinski <kuba@kernel.org> wrote:
>> > On Fri, 27 Nov 2020 17:12:05 +0200 Vlad Buslov wrote:
>> >> @@ -2262,7 +2260,7 @@ static int tc_del_tfilter(struct sk_buff *skb, struct nlmsghdr *n,
>> >>
>> >> if (prio == 0) {
>> >> tfilter_notify_chain(net, skb, block, q, parent, n,
>> >> - chain, RTM_DELTFILTER, rtnl_held);
>> >> + chain, RTM_DELTFILTER);
>> >> tcf_chain_flush(chain, rtnl_held);
>> >> err = 0;
>> >> goto errout;
>> >
>> > Hum. This looks off.
>>
>> Hi Jakub,
>>
>> Prio==0 means user requests to flush whole chain. In such case rtnl lock
>> is obtained earlier in tc_del_tfilter():
>>
>> /* Take rtnl mutex if flushing whole chain, block is shared (no qdisc
>> * found), qdisc is not unlocked, classifier type is not specified,
>> * classifier is not unlocked.
>> */
>> if (!prio ||
>> (q && !(q->ops->cl_ops->flags & QDISC_CLASS_OPS_DOIT_UNLOCKED)) ||
>> !tcf_proto_is_unlocked(name)) {
>> rtnl_held = true;
>> rtnl_lock();
>> }
>>
>
> Makes sense, although seems a little fragile. Why not put a true in
> there, in that case?
Because, as I described in commit message, the function will trigger an
assertion if called without rtnl lock, so passing rtnl_held==false
argument makes no sense and is confusing for the reader.
>
> Do you have a larger plan here? The motivation seems a little unclear
> if I'm completely honest. Are you dropping the rtnl_held from all callers
> of __tcf_get_next_proto() just to save the extra argument / typing?
The plan is to have 'rtnl_held' arg for functions that can be called
without rtnl lock and not have such argument for functions that require
caller to hold rtnl :)
To elaborate further regarding motivation for this patch: some time ago
I received an email asking why I have rtnl_held arg in function that has
ASSERT_RTNL() in one of its dependencies. I re-read the code and
determined that it was a leftover from earlier version and is not needed
in code that was eventually upstreamed. Removing the argument was an
easy decision since Jiri hates those and repeatedly asked me to minimize
usage of such function arguments, so I didn't expect it to be
controversial.
> That's nice but there's also value in the API being consistent.
Cls_api has multiple functions that don't have 'rtnl_held' argument.
Only functions that can work without rtnl lock have it. Why do you
suggest it is inconsistent to remove it here?
next prev parent reply other threads:[~2020-12-01 18:40 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-27 15:12 [PATCH net-next] net: sched: remove redundant 'rtnl_held' argument Vlad Buslov
2020-12-01 2:52 ` Jakub Kicinski
2020-12-01 7:55 ` Vlad Buslov
2020-12-01 17:03 ` Jakub Kicinski
2020-12-01 18:39 ` Vlad Buslov [this message]
2020-12-01 19:24 ` Jakub Kicinski
2020-12-02 8:32 ` Vlad Buslov
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=ygnh1rg9l6az.fsf@nvidia.com \
--to=vladbu@nvidia.com \
--cc=davem@davemloft.net \
--cc=jhs@mojatatu.com \
--cc=jiri@resnulli.us \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=xiyou.wangcong@gmail.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 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).