Re: [EXTERNAL] Re: [PATCH] hv_netvsc: set device master/slave flags on bonding

From: Jiri Pirko
Date: Wed Mar 05 2025 - 06:36:54 EST


Mon, Mar 03, 2025 at 07:47:37PM +0100, longli@xxxxxxxxxxxxx wrote:
>> Subject: [EXTERNAL] Re: [PATCH] hv_netvsc: set device master/slave flags on
>> bonding
>>
>> Fri, Feb 28, 2025 at 11:25:13PM +0100, longli@xxxxxxxxxxxxxxxxx wrote:
>> >From: Long Li <longli@xxxxxxxxxxxxx>
>> >
>> >Currently netvsc only sets the SLAVE flag on VF netdev when it's
>> >bonded. It should also set the MASTER flag on itself and clear all
>> >those flags when the VF is unbonded.
>>
>> I don't understand why you need this. Who looks at these flags?
>
>The SLAVE flag is checked here:
>https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/net/ethernet/microsoft/mana/mana_en.c?h=v6.14-rc5#n3144

In kernel. We have other means. The check is incorrect. The code should
use netif_is_*_port() herlper. Does not exist, add it.


> and is also checked in some user-mode programs.

As currently it is not exposed, it can't be checked. Don't add it.

>
>There is no code checking for MASTER currently. It is added for completeness. SLAVE doesn't make sense without a MASTER.

Does not make sense. Either you need it or not. If not, don't add it.


NAK. Please let IFF_MASTER and IFF_SLAVE rot.


>
>>
>>
>> >
>> >Signed-off-by: Long Li <longli@xxxxxxxxxxxxx>
>> >---
>> > drivers/net/hyperv/netvsc_drv.c | 6 ++++++
>> > 1 file changed, 6 insertions(+)
>> >
>> >diff --git a/drivers/net/hyperv/netvsc_drv.c
>> >b/drivers/net/hyperv/netvsc_drv.c index d6c4abfc3a28..7ac18fede2f3
>> >100644
>> >--- a/drivers/net/hyperv/netvsc_drv.c
>> >+++ b/drivers/net/hyperv/netvsc_drv.c
>> >@@ -2204,6 +2204,7 @@ static int netvsc_vf_join(struct net_device
>> *vf_netdev,
>> > goto rx_handler_failed;
>> > }
>> >
>> >+ ndev->flags |= IFF_MASTER;
>> > ret = netdev_master_upper_dev_link(vf_netdev, ndev,
>> > NULL, NULL, NULL);
>> > if (ret != 0) {
>> >@@ -2484,7 +2485,12 @@ static int netvsc_unregister_vf(struct
>> >net_device *vf_netdev)
>> >
>> > reinit_completion(&net_device_ctx->vf_add);
>> > netdev_rx_handler_unregister(vf_netdev);
>> >+
>> >+ /* Unlink the slave device and clear flag */
>> >+ vf_netdev->flags &= ~IFF_SLAVE;
>> >+ ndev->flags &= ~IFF_MASTER;
>> > netdev_upper_dev_unlink(vf_netdev, ndev);
>> >+
>> > RCU_INIT_POINTER(net_device_ctx->vf_netdev, NULL);
>> > dev_put(vf_netdev);
>> >
>> >--
>> >2.34.1
>> >
>> >