From: Hangbin Liu <hangbin.liu@linux.dev>
To: Wenbo Sun <sunwenbo@cmss.chinamobile.com>
Cc: Andrew Lunn <andrew+netdev@lunn.ch>,
"David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@kernel.org>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Kuniyuki Iwashima <kuniyu@google.com>,
Mahesh Bandewar <maheshb@google.com>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
1342116488@qq.com
Subject: Re: [PATCH net] ipvlan: update port flags only after ipvlan_set_port_mode() succeeds
Date: Thu, 12 Nov 2026 15:01:07 +0800 [thread overview]
Message-ID: <avVkM5XY1kNswdcY@fedora> (raw)
In-Reply-To: <20261112035152.43363-1-sunwenbo@cmss.chinamobile.com>
On Thu, Nov 12, 2026 at 11:51:52AM +0800, Wenbo Sun wrote:
> Hi Hangbin,
>
> On Wed, Nov 11, 2026 at 09:02:17PM +0800, Hangbin Liu wrote:
> > If ipvlan_set_port_mode() failed, the unregister_netdevice(dev) will be
> > called. Does port->flags still need to restore?
>
> Thank you very much for taking the time to review this patch and for
> pointing out the question about the commit description.
>
> You are completely right that when creating the first ipvlan device on a
> lower device, unregister_netdevice(dev) drops the last reference to the
> port in ipvlan_uninit() -> ipvlan_port_put(), destroying the port so no
> flag restoration is needed.
>
> The issue happens when one or more ipvlan interfaces already exist on the
> same lower device:
>
> 1. Because struct ipvl_port is shared across all ipvlan interfaces on a
> lower device, ipvlan_init() takes an additional reference via
> refcount_inc(&port->count) when creating a new ipvlan interface.
> 2. If ipvlan_link_new() writes port->flags before calling
> ipvlan_set_port_mode(), and ipvlan_set_port_mode() fails (for
> instance, requesting L3S mode when CONFIG_IPVLAN_L3S is disabled),
> unregister_netdevice(dev) only decrements port->count back down to at
> least 1. Since ipvlan_port_destroy() is not called, the shared port
> remains active for the existing ipvlan interfaces while still carrying
> the newly written port->flags.
>
> Rather than saving and restoring port->flags on the error path, moving
> the port->flags assignment after ipvlan_set_port_mode() succeeds avoids
> modifying it on failure altogether, as there are no remaining failure
> paths afterward in ipvlan_link_new() (matching ipvlan_nl_changelink()).
Thanks for the explanation. The change makes sense to me now.
Regards
Hangbin
prev parent reply other threads:[~2026-11-12 7:01 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-11 6:46 [PATCH net] ipvlan: update port flags only after ipvlan_set_port_mode() succeeds Wenbo Sun
2026-11-11 13:02 ` Hangbin Liu
2026-11-12 3:51 ` Wenbo Sun
2026-11-12 7:01 ` Hangbin Liu [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=avVkM5XY1kNswdcY@fedora \
--to=hangbin.liu@linux.dev \
--cc=1342116488@qq.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@kernel.org \
--cc=kuba@kernel.org \
--cc=kuniyu@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maheshb@google.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sunwenbo@cmss.chinamobile.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.