From: Jacob Keller <jacob.e.keller@intel.com>
To: Jiri Pirko <jiri@resnulli.us>, <netdev@vger.kernel.org>
Cc: <davem@davemloft.net>, <kuba@kernel.org>, <pabeni@redhat.com>,
<edumazet@google.com>, <michael.chan@broadcom.com>,
<yisen.zhuang@huawei.com>, <salil.mehta@huawei.com>,
<jesse.brandeburg@intel.com>, <anthony.l.nguyen@intel.com>,
<tariqt@nvidia.com>, <saeedm@nvidia.com>, <leon@kernel.org>,
<idosch@nvidia.com>, <petrm@nvidia.com>, <gal@nvidia.com>,
<mailhol.vincent@wanadoo.fr>
Subject: Re: [patch net-next 1/3] devlink: move devlink reload notifications back in between _down() and _up() calls
Date: Fri, 27 Jan 2023 16:08:13 -0800 [thread overview]
Message-ID: <86152a35-6d56-ebeb-e436-97426ef08e32@intel.com> (raw)
In-Reply-To: <20230127155042.1846608-2-jiri@resnulli.us>
On 1/27/2023 7:50 AM, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@nvidia.com>
>
> This effectively reverts commit 05a7f4a8dff1 ("devlink: Break parameter
> notification sequence to be before/after unload/load driver").
>
> Cited commit resolved a problem in mlx5 params implementation,
> when param notification code accessed memory previously freed
> during reload.
>
> Now, when the params can be registered and unregistered when devlink
> instance is registered, mlx5 code unregisters the problematic param
> during devlink reload. The fix is therefore no longer needed.
>
> Current behavior is a it problematic, as it sends DEL notifications even
> in potential case when reload_down() call fails which might confuse
> userspace notifications listener.
>
> So move the reload notifications back where they were originally in
> between reload_down() and reload_up() calls.
>
> Signed-off-by: Jiri Pirko <jiri@nvidia.com>
> ---
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
> net/devlink/leftover.c | 37 ++++++++++++++++---------------------
> 1 file changed, 16 insertions(+), 21 deletions(-)
>
> diff --git a/net/devlink/leftover.c b/net/devlink/leftover.c
> index bd4c5d2dd612..24e20861a28b 100644
> --- a/net/devlink/leftover.c
> +++ b/net/devlink/leftover.c
> @@ -4235,12 +4235,11 @@ static void devlink_param_notify(struct devlink *devlink,
> struct devlink_param_item *param_item,
> enum devlink_command cmd);
>
> -static void devlink_ns_change_notify(struct devlink *devlink,
> - struct net *dest_net, struct net *curr_net,
> - bool new)
> +static void devlink_reload_netns_change(struct devlink *devlink,
> + struct net *curr_net,
> + struct net *dest_net)
> {
> struct devlink_param_item *param_item;
> - enum devlink_command cmd;
>
> /* Userspace needs to be notified about devlink objects
> * removed from original and entering new network namespace.
> @@ -4248,18 +4247,19 @@ static void devlink_ns_change_notify(struct devlink *devlink,
> * reload process so the notifications are generated separatelly.
> */
>
> - if (!dest_net || net_eq(dest_net, curr_net))
> - return;
> + list_for_each_entry(param_item, &devlink->param_list, list)
> + devlink_param_notify(devlink, 0, param_item,
> + DEVLINK_CMD_PARAM_DEL);
> + devlink_notify(devlink, DEVLINK_CMD_DEL);
>
> - if (new)
> - devlink_notify(devlink, DEVLINK_CMD_NEW);
> + move_netdevice_notifier_net(curr_net, dest_net,
> + &devlink->netdevice_nb);
> + write_pnet(&devlink->_net, dest_net);
>
> - cmd = new ? DEVLINK_CMD_PARAM_NEW : DEVLINK_CMD_PARAM_DEL;
> + devlink_notify(devlink, DEVLINK_CMD_NEW);
> list_for_each_entry(param_item, &devlink->param_list, list)
> - devlink_param_notify(devlink, 0, param_item, cmd);
> -
> - if (!new)
> - devlink_notify(devlink, DEVLINK_CMD_DEL);
> + devlink_param_notify(devlink, 0, param_item,
> + DEVLINK_CMD_PARAM_NEW);
> }
>
> static void devlink_reload_failed_set(struct devlink *devlink,
> @@ -4341,24 +4341,19 @@ int devlink_reload(struct devlink *devlink, struct net *dest_net,
> memcpy(remote_reload_stats, devlink->stats.remote_reload_stats,
> sizeof(remote_reload_stats));
>
> - curr_net = devlink_net(devlink);
> - devlink_ns_change_notify(devlink, dest_net, curr_net, false);
> err = devlink->ops->reload_down(devlink, !!dest_net, action, limit, extack);
> if (err)
> return err;
>
> - if (dest_net && !net_eq(dest_net, curr_net)) {
> - move_netdevice_notifier_net(curr_net, dest_net,
> - &devlink->netdevice_nb);
> - write_pnet(&devlink->_net, dest_net);
> - }
> + curr_net = devlink_net(devlink);
> + if (dest_net && !net_eq(dest_net, curr_net))
> + devlink_reload_netns_change(devlink, curr_net, dest_net);
>
> err = devlink->ops->reload_up(devlink, action, limit, actions_performed, extack);
> devlink_reload_failed_set(devlink, !!err);
> if (err)
> return err;
>
> - devlink_ns_change_notify(devlink, dest_net, curr_net, true);
> WARN_ON(!(*actions_performed & BIT(action)));
> /* Catch driver on updating the remote action within devlink reload */
> WARN_ON(memcmp(remote_reload_stats, devlink->stats.remote_reload_stats,
next prev parent reply other threads:[~2023-01-28 0:09 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-27 15:50 [patch net-next 0/3] devlink: fix reload notifications and remove features Jiri Pirko
2023-01-27 15:50 ` [patch net-next 1/3] devlink: move devlink reload notifications back in between _down() and _up() calls Jiri Pirko
2023-01-28 0:08 ` Jacob Keller [this message]
2023-01-27 15:50 ` [patch net-next 2/3] devlink: send objects notifications during devlink reload Jiri Pirko
2023-01-28 0:08 ` Jacob Keller
2023-01-27 15:50 ` [patch net-next 3/3] devlink: remove devlink features Jiri Pirko
2023-01-28 0:08 ` Jacob Keller
2023-01-28 5:58 ` [patch net-next 0/3] devlink: fix reload notifications and remove features Jakub Kicinski
2023-01-30 8:50 ` patchwork-bot+netdevbpf
2023-01-30 10:50 ` Jiri Pirko
2023-01-30 20:37 ` Jakub Kicinski
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=86152a35-6d56-ebeb-e436-97426ef08e32@intel.com \
--to=jacob.e.keller@intel.com \
--cc=anthony.l.nguyen@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=gal@nvidia.com \
--cc=idosch@nvidia.com \
--cc=jesse.brandeburg@intel.com \
--cc=jiri@resnulli.us \
--cc=kuba@kernel.org \
--cc=leon@kernel.org \
--cc=mailhol.vincent@wanadoo.fr \
--cc=michael.chan@broadcom.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=petrm@nvidia.com \
--cc=saeedm@nvidia.com \
--cc=salil.mehta@huawei.com \
--cc=tariqt@nvidia.com \
--cc=yisen.zhuang@huawei.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).