Message ID | 20110505004841.26691.74872.stgit@localhost6.localdomain6 |
---|---|
State | RFC, archived |
Delegated to: | David Miller |
Headers | show |
On Wed, May 04, 2011 at 05:48:42PM -0700, Yi Zou wrote: > commit 8a0427b "vlan: convert VLAN devices to use ndo_fix_features()" converts the > vlan to support ndo_fix_features. However, the wanted_features is not updated > for the vlan device, causing real_dev->features not be populated to the vlan > device when real_dev->features are changed by the driver through FEAT_CHANGE. > This is breaking FCoE related netdev feature flags on vlan devices. Add updating > wanted_features to vlan_transfer_features() so netdev_get_wanted_features() will > can get the updated wanted feature flags for vlan device properly. Can you describe the situation further? There might be problems if device changes its vlan_features after creation of VLAN devices on top (bonding?). dev->wanted_features is only what user wants to get and should not be changed by anything else. Best Regards, Michał Mirosław -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> > On Wed, May 04, 2011 at 05:48:42PM -0700, Yi Zou wrote: > > commit 8a0427b "vlan: convert VLAN devices to use ndo_fix_features()" > converts the > > vlan to support ndo_fix_features. However, the wanted_features is not > updated > > for the vlan device, causing real_dev->features not be populated to the > vlan > > device when real_dev->features are changed by the driver through > FEAT_CHANGE. > > This is breaking FCoE related netdev feature flags on vlan devices. Add > updating > > wanted_features to vlan_transfer_features() so > netdev_get_wanted_features() will > > can get the updated wanted feature flags for vlan device properly. > > Can you describe the situation further? There might be problems if device > changes its vlan_features after creation of VLAN devices on top > (bonding?). Not sure for bonding, I noticed this when creating FCoE instance on a vlan Device on top of an Intel 82599 device. The real_dev is created with vlan_features set of related FCoE flags, e.g., NETIF_F_FCOE_MTU, NETIF_F_FCOE_CRC, etc. However, the real_dev's features are not set w/ these FCoE flags till the FCoE protocol stack starts using FCoE when ndo_fcoe_enable() is called, where in the case of 82599's case, these flags are toggled on in netdev's features, and netdev_features_change() is called to populate to the upper vlan device since previously we do: vlandev->features &= ~dev->vlan_features; vlandev->features |= dev->features & dev->vlan_features; in vlan_transfer_features(). FCoE only checks the corresponding netdev features (vlan or real_dev) passed in from user space as a interface name e.g., eth2.100, to tell if, for example, FCOE_MTU is supported. Particularly for this case, there is no change on vlan_features. > > dev->wanted_features is only what user wants to get and should not be > changed > by anything else. Hmm...so my usage for that seems to be wrong if that's what wanted_features is meant to be. Well, wanted_features in vlan is features & hw_features, if it stays, then, it seems to me will never get changes from real_dev's features since netdev_get_wanted_features() won't get it to begin w/. Also, note my RFC isn't complete either, as it only sets not clears previously flags in wanted_features. Thanks, yi > > Best Regards, > Michał Mirosław -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 969e700..f2ee00b 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -332,6 +332,7 @@ static void vlan_transfer_features(struct net_device *dev, #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE) vlandev->fcoe_ddp_xid = dev->fcoe_ddp_xid; #endif + vlandev->wanted_features |= dev->features & dev->vlan_features; netdev_update_features(vlandev); }
commit 8a0427b "vlan: convert VLAN devices to use ndo_fix_features()" converts the vlan to support ndo_fix_features. However, the wanted_features is not updated for the vlan device, causing real_dev->features not be populated to the vlan device when real_dev->features are changed by the driver through FEAT_CHANGE. This is breaking FCoE related netdev feature flags on vlan devices. Add updating wanted_features to vlan_transfer_features() so netdev_get_wanted_features() will can get the updated wanted feature flags for vlan device properly. I am sending as RFC in case the usage of wanted_features on vlan device is not right, since the features chanaged are not directly from user doing ethtool, but it is from user action of starting to run FCoE on a netdev instance. Anyway, let let me know if there is a preferred alternative fix. Signed-off-by: Yi Zou <yi.zou@intel.com> --- net/8021q/vlan.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html