All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Horman <horms@kernel.org>
To: Haiyang Zhang <haiyangz@microsoft.com>
Cc: linux-hyperv@vger.kernel.org, netdev@vger.kernel.org,
	kys@microsoft.com, wei.liu@kernel.org, decui@microsoft.com,
	edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
	stephen@networkplumber.org, davem@davemloft.net,
	linux-kernel@vger.kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH net,v2] hv_netvsc: Fix VF namespace also in synthetic NIC NETDEV_REGISTER event
Date: Thu, 17 Oct 2024 16:44:33 +0100	[thread overview]
Message-ID: <20241017154433.GV1697@kernel.org> (raw)
In-Reply-To: <1729093437-28674-1-git-send-email-haiyangz@microsoft.com>

On Wed, Oct 16, 2024 at 08:43:57AM -0700, Haiyang Zhang wrote:
> The existing code moves VF to the same namespace as the synthetic NIC
> during netvsc_register_vf(). But, if the synthetic device is moved to a
> new namespace after the VF registration, the VF won't be moved together.
> 
> To make the behavior more consistent, add a namespace check for synthetic
> NIC's NETDEV_REGISTER event (generated during its move), and move the VF
> if it is not in the same namespace.
> 
> Cc: stable@vger.kernel.org
> Fixes: c0a41b887ce6 ("hv_netvsc: move VF to same namespace as netvsc device")
> Suggested-by: Stephen Hemminger <stephen@networkplumber.org>
> Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
> ---
> v2: Move my fix to synthetic NIC's NETDEV_REGISTER event as suggested by Stephen.
> 
> ---
>  drivers/net/hyperv/netvsc_drv.c | 29 +++++++++++++++++++++++++++++
>  1 file changed, 29 insertions(+)
> 
> diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
> index 153b97f8ec0d..54e98356ee93 100644
> --- a/drivers/net/hyperv/netvsc_drv.c
> +++ b/drivers/net/hyperv/netvsc_drv.c
> @@ -2798,6 +2798,30 @@ static struct  hv_driver netvsc_drv = {
>  	},
>  };
>  
> +/* Set VF's namespace same as the synthetic NIC */
> +static void netvsc_event_set_vf_ns(struct net_device *ndev)
> +{
> +	struct net_device_context *ndev_ctx = netdev_priv(ndev);
> +	struct net_device *vf_netdev = rtnl_dereference(ndev_ctx->vf_netdev);
> +	int ret;

In Networking code it is preferred to arrange local variables in reverse
xmas tree order - longest line to shortest.

I believe that could be achieved as follows (completely untested!):

	struct net_device_context *ndev_ctx = netdev_priv(ndev);
	struct net_device *vf_netdev;
	int ret;

	vf_netdev = rtnl_dereference(ndev_ctx->vf_netdev);
	if (!vf_netdev)
		return;

With that addressed please feel free to add:

Reviewed-by: Simon Horman <horms@kernel.org>

> +
> +	if (!vf_netdev)
> +		return;
> +
> +	if (!net_eq(dev_net(ndev), dev_net(vf_netdev))) {
> +		ret = dev_change_net_namespace(vf_netdev, dev_net(ndev),
> +					       "eth%d");
> +		if (ret)
> +			netdev_err(vf_netdev,
> +				   "Cannot move to same namespace as %s: %d\n",
> +				   ndev->name, ret);
> +		else
> +			netdev_info(vf_netdev,
> +				    "Moved VF to namespace with: %s\n",
> +				    ndev->name);
> +	}
> +}
> +
>  /*
>   * On Hyper-V, every VF interface is matched with a corresponding
>   * synthetic interface. The synthetic interface is presented first
> @@ -2810,6 +2834,11 @@ static int netvsc_netdev_event(struct notifier_block *this,
>  	struct net_device *event_dev = netdev_notifier_info_to_dev(ptr);
>  	int ret = 0;
>  
> +	if (event_dev->netdev_ops == &device_ops && event == NETDEV_REGISTER) {
> +		netvsc_event_set_vf_ns(event_dev);
> +		return NOTIFY_DONE;
> +	}
> +
>  	ret = check_dev_is_matching_vf(event_dev);
>  	if (ret != 0)
>  		return NOTIFY_DONE;

-- 
pw-bot: changes-requested

  reply	other threads:[~2024-10-17 15:44 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-16 15:43 [PATCH net,v2] hv_netvsc: Fix VF namespace also in synthetic NIC NETDEV_REGISTER event Haiyang Zhang
2024-10-17 15:44 ` Simon Horman [this message]
2024-10-17 16:06   ` Haiyang Zhang

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=20241017154433.GV1697@kernel.org \
    --to=horms@kernel.org \
    --cc=davem@davemloft.net \
    --cc=decui@microsoft.com \
    --cc=edumazet@google.com \
    --cc=haiyangz@microsoft.com \
    --cc=kuba@kernel.org \
    --cc=kys@microsoft.com \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=stable@vger.kernel.org \
    --cc=stephen@networkplumber.org \
    --cc=wei.liu@kernel.org \
    /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.