diff options
author | Peter Waskiewicz <peter.p.waskiewicz.jr@intel.com> | 2010-02-12 13:48:25 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-02-15 21:49:47 -0800 |
commit | 0d643e1fb4207711d9c148b5c6a2820550a4a154 (patch) | |
tree | cc4c838eddb7d9b8e72c216a9556f9fba0153c87 /net/core/ethtool.c | |
parent | e858911804f5ecadb41afd61582a11f68d416328 (diff) | |
download | lwn-0d643e1fb4207711d9c148b5c6a2820550a4a154.tar.gz lwn-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/ethtool.c')
-rw-r--r-- | net/core/ethtool.c | 13 |
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; |