aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorPeter Waskiewicz <peter.p.waskiewicz.jr@intel.com>2010-02-12 13:48:25 +0000
committerDavid S. Miller <davem@davemloft.net>2010-02-15 21:49:47 -0800
commit0d643e1fb4207711d9c148b5c6a2820550a4a154 (patch)
treecc4c838eddb7d9b8e72c216a9556f9fba0153c87 /net/core
parentethtool: Fix filter addition when caching n-tuple filters (diff)
downloadlinux-dev-0d643e1fb4207711d9c148b5c6a2820550a4a154.tar.xz
linux-dev-0d643e1fb4207711d9c148b5c6a2820550a4a154.zip
ethtool: Move n-tuple capability check into set_flags
set_flags should check if the underlying device supports n-tuple filter programming before setting the device flags on the netdevice. Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/ethtool.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index fbbe4b49116b..794cf57078cd 100644
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -134,15 +134,21 @@ u32 ethtool_op_get_flags(struct net_device *dev)
int ethtool_op_set_flags(struct net_device *dev, u32 data)
{
+ const struct ethtool_ops *ops = dev->ethtool_ops;
+
if (data & ETH_FLAG_LRO)
dev->features |= NETIF_F_LRO;
else
dev->features &= ~NETIF_F_LRO;
- if (data & ETH_FLAG_NTUPLE)
+ if (data & ETH_FLAG_NTUPLE) {
+ if (!ops->set_rx_ntuple)
+ return -EOPNOTSUPP;
dev->features |= NETIF_F_NTUPLE;
- else
+ } else {
+ /* safe to clear regardless */
dev->features &= ~NETIF_F_NTUPLE;
+ }
return 0;
}
@@ -318,9 +324,6 @@ static int ethtool_set_rx_ntuple(struct net_device *dev, void __user *useraddr)
struct ethtool_rx_ntuple_flow_spec_container *fsc = NULL;
int ret;
- if (!ops->set_rx_ntuple)
- return -EOPNOTSUPP;
-
if (!(dev->features & NETIF_F_NTUPLE))
return -EINVAL;