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 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.