From: Jakub Kicinski <kuba@kernel.org>
To: "wanghai (M)" <wanghai38@huawei.com>
Cc: <jhs@mojatatu.com>, <xiyou.wangcong@gmail.com>,
<jiri@resnulli.us>, <davem@davemloft.net>, <edumazet@google.com>,
<pabeni@redhat.com>, <brouer@redhat.com>,
<netdev@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH net] net/sched: fix netdevice reference leaks in attach_one_default_qdisc()
Date: Thu, 25 Aug 2022 08:59:06 -0700 [thread overview]
Message-ID: <20220825085906.35704ce5@kernel.org> (raw)
In-Reply-To: <fc76cc5d-e1ee-e84e-c47b-8daa4dea43a0@huawei.com>
On Thu, 25 Aug 2022 20:29:21 +0800 wanghai (M) wrote:
> 在 2022/8/19 23:58, wanghai (M) 写道:
> > Here are the details of the failure. Do I need to do cleanup under the
> > failed path?
> >
> > If a dev has multiple queues and queue 0 fails to attach qdisc
> > because there is no memory in attach_one_default_qdisc(). Then
> > dev->qdisc will be noop_qdisc by default. But the other queues
> > may be able to successfully attach to default qdisc.
> >
> > In this case, the fallback to noqueue process will be triggered
> >
> > static void attach_default_qdiscs(struct net_device *dev)
> > {
> > ...
> > if (!netif_is_multiqueue(dev) ||
> > dev->priv_flags & IFF_NO_QUEUE) {
> > ...
> > netdev_for_each_tx_queue(dev, attach_one_default_qdisc,
> > NULL); // queue 0 attach failed because -ENOBUFS, but the other queues
> > attach successfully
> > qdisc = txq->qdisc_sleeping;
> > rcu_assign_pointer(dev->qdisc, qdisc); // dev->qdisc =
> > &noop_qdisc
> > ...
> > }
> > ...
> > if (qdisc == &noop_qdisc) {
> > ...
> > netdev_for_each_tx_queue(dev, attach_one_default_qdisc, NULL);
> > // Re-attach, but not release the previously created qdisc
> > ...
> > }
> > }
>
> Do you have any other suggestions for this patch? Any replies would be
> appreciated.
Sorry for the silence and thanks for a solid explanation!
Can we do a:
netdev_for_each_tx_queue(dev, shutdown_scheduler_queue, &noop_qdisc);
before trying to re-attach, to clear out any non-noop qdisc that may
have gotten assigned?
prev parent reply other threads:[~2022-08-25 15:59 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-17 10:46 [PATCH net] net/sched: fix netdevice reference leaks in attach_one_default_qdisc() Wang Hai
2022-08-18 17:56 ` Jakub Kicinski
2022-08-19 15:58 ` wanghai (M)
2022-08-25 12:29 ` wanghai (M)
2022-08-25 15:59 ` Jakub Kicinski [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=20220825085906.35704ce5@kernel.org \
--to=kuba@kernel.org \
--cc=brouer@redhat.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=jhs@mojatatu.com \
--cc=jiri@resnulli.us \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=wanghai38@huawei.com \
--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 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.