From: Jiri Pirko <jiri@resnulli.us>
To: Eric Dumazet <edumazet@google.com>
Cc: "David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
David Ahern <dsahern@kernel.org>, Jiri Pirko <jiri@nvidia.com>,
netdev@vger.kernel.org, eric.dumazet@gmail.com
Subject: Re: [PATCH net-next 2/3] inet: do not use RTNL in inet_netconf_get_devconf()
Date: Tue, 27 Feb 2024 16:11:57 +0100 [thread overview]
Message-ID: <Zd37vclUdivMpB4T@nanopsycho> (raw)
In-Reply-To: <CANn89i+TfGnpBthoix4QmfC6hEsEH0HdYnAowMPeNz0z+4qUjw@mail.gmail.com>
Tue, Feb 27, 2024 at 02:09:49PM CET, edumazet@google.com wrote:
>On Tue, Feb 27, 2024 at 1:59 PM Jiri Pirko <jiri@resnulli.us> wrote:
>>
>> Tue, Feb 27, 2024 at 10:24:10AM CET, edumazet@google.com wrote:
>> >"ip -4 netconf show dev XXXX" no longer acquires RTNL.
>>
>> I was under impression that you refer to the current code, confused me a
>> bit :/
>>
>>
>> >
>> >Return -ENODEV instead of -EINVAL if no netdev or idev can be found.
>> >
>> >Signed-off-by: Eric Dumazet <edumazet@google.com>
>> >---
>> > net/ipv4/devinet.c | 27 +++++++++++++++------------
>> > 1 file changed, 15 insertions(+), 12 deletions(-)
>> >
>> >diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
>> >index ca75d0fff1d1ebd8c199fb74a6f0e2f51160635c..f045a34e90b974b17512a30c3b719bdfc3cba153 100644
>> >--- a/net/ipv4/devinet.c
>> >+++ b/net/ipv4/devinet.c
>> >@@ -2205,21 +2205,20 @@ static int inet_netconf_get_devconf(struct sk_buff *in_skb,
>> > struct netlink_ext_ack *extack)
>> > {
>> > struct net *net = sock_net(in_skb->sk);
>> >- struct nlattr *tb[NETCONFA_MAX+1];
>> >+ struct nlattr *tb[NETCONFA_MAX + 1];
>> >+ const struct ipv4_devconf *devconf;
>> >+ struct in_device *in_dev = NULL;
>> >+ struct net_device *dev = NULL;
>> > struct sk_buff *skb;
>> >- struct ipv4_devconf *devconf;
>> >- struct in_device *in_dev;
>> >- struct net_device *dev;
>> > int ifindex;
>> > int err;
>> >
>> > err = inet_netconf_valid_get_req(in_skb, nlh, tb, extack);
>> > if (err)
>> >- goto errout;
>> >+ return err;
>> >
>> >- err = -EINVAL;
>> > if (!tb[NETCONFA_IFINDEX])
>> >- goto errout;
>> >+ return -EINVAL;
>> >
>> > ifindex = nla_get_s32(tb[NETCONFA_IFINDEX]);
>> > switch (ifindex) {
>> >@@ -2230,10 +2229,10 @@ static int inet_netconf_get_devconf(struct sk_buff *in_skb,
>> > devconf = net->ipv4.devconf_dflt;
>> > break;
>> > default:
>> >- dev = __dev_get_by_index(net, ifindex);
>> >- if (!dev)
>> >- goto errout;
>> >- in_dev = __in_dev_get_rtnl(dev);
>> >+ err = -ENODEV;
>> >+ dev = dev_get_by_index(net, ifindex);
>>
>> Comment says:
>> /* Deprecated for new users, call netdev_get_by_index() instead */
>> struct net_device *dev_get_by_index(struct net *net, int ifindex)
>
>Only for long-standing allocations, where we are not sure if a leak
>could happen or not.
>We do not bother allocating a tracker otherwise.
Makes sense. Would it make sense to fix the "deprecated" comment then to
also reflect this usecase?
>Look at inet6_netconf_get_devconf() :
>We left there dev_get_by_index() and dev_put().
>
>I think I am aware of the tracking facility, I implemented it...
Yeah, I was just refering to the comment.
>
>
>>
>> Perhaps better to use:
>> netdev_get_by_index() and netdev_put()?
>>
>>
>> >+ if (dev)
>> >+ in_dev = in_dev_get(dev);
>>
>> The original flow:
>> err = -ENODEV;
>> dev = dev_get_by_index(net, ifindex);
>> if (!dev)
>> goto errout;
>> in_dev = in_dev_get(dev);
>> if (!in_dev)
>> goto errout;
>
>A single goto looks nicer to me.
:)
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
>
>> Reads a bit nicer to me. Not sure why you changed it. Yeah, it's a nit.
>>
next prev parent reply other threads:[~2024-02-27 15:12 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-27 9:24 [PATCH net-next 0/3] inet: implement lockless RTM_GETNETCONF ops Eric Dumazet
2024-02-27 9:24 ` [PATCH net-next 1/3] inet: annotate devconf data-races Eric Dumazet
2024-02-27 12:59 ` Jiri Pirko
2024-02-27 9:24 ` [PATCH net-next 2/3] inet: do not use RTNL in inet_netconf_get_devconf() Eric Dumazet
2024-02-27 12:59 ` Jiri Pirko
2024-02-27 13:09 ` Eric Dumazet
2024-02-27 15:11 ` Jiri Pirko [this message]
2024-02-27 9:24 ` [PATCH net-next 3/3] inet: use xa_array iterator to implement inet_netconf_dump_devconf() Eric Dumazet
2024-02-27 13:07 ` Jiri Pirko
2024-02-29 3:50 ` [PATCH net-next 0/3] inet: implement lockless RTM_GETNETCONF ops patchwork-bot+netdevbpf
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=Zd37vclUdivMpB4T@nanopsycho \
--to=jiri@resnulli.us \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=eric.dumazet@gmail.com \
--cc=jiri@nvidia.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@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 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).