lkml.org 
[lkml]   [2020]   [Aug]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 13/15] ethtool: Dont omit the netlink reply if no features were changed
    Date
    From: Maxim Mikityanskiy <maximmi@mellanox.com>

    [ Upstream commit f01204ec8be7ea5e8f0230a7d4200e338d563bde ]

    The legacy ethtool userspace tool shows an error when no features could
    be changed. It's useful to have a netlink reply to be able to show this
    error when __netdev_update_features wasn't called, for example:

    1. ethtool -k eth0
    large-receive-offload: off
    2. ethtool -K eth0 rx-fcs on
    3. ethtool -K eth0 lro on
    Could not change any device features
    rx-lro: off [requested on]
    4. ethtool -K eth0 lro on
    # The output should be the same, but without this patch the kernel
    # doesn't send the reply, and ethtool is unable to detect the error.

    This commit makes ethtool-netlink always return a reply when requested,
    and it still avoids unnecessary calls to __netdev_update_features if the
    wanted features haven't changed.

    Fixes: 0980bfcd6954 ("ethtool: set netdev features with FEATURES_SET request")
    Signed-off-by: Maxim Mikityanskiy <maximmi@mellanox.com>
    Reviewed-by: Michal Kubecek <mkubecek@suse.cz>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/ethtool/features.c | 11 ++++-------
    1 file changed, 4 insertions(+), 7 deletions(-)

    --- a/net/ethtool/features.c
    +++ b/net/ethtool/features.c
    @@ -268,14 +268,11 @@ int ethnl_set_features(struct sk_buff *s
    bitmap_and(req_wanted, req_wanted, req_mask, NETDEV_FEATURE_COUNT);
    bitmap_andnot(new_wanted, old_wanted, req_mask, NETDEV_FEATURE_COUNT);
    bitmap_or(req_wanted, new_wanted, req_wanted, NETDEV_FEATURE_COUNT);
    - if (bitmap_equal(req_wanted, old_wanted, NETDEV_FEATURE_COUNT)) {
    - ret = 0;
    - goto out_rtnl;
    + if (!bitmap_equal(req_wanted, old_wanted, NETDEV_FEATURE_COUNT)) {
    + dev->wanted_features &= ~dev->hw_features;
    + dev->wanted_features |= ethnl_bitmap_to_features(req_wanted) & dev->hw_features;
    + __netdev_update_features(dev);
    }
    -
    - dev->wanted_features &= ~dev->hw_features;
    - dev->wanted_features |= ethnl_bitmap_to_features(req_wanted) & dev->hw_features;
    - __netdev_update_features(dev);
    ethnl_features_to_bitmap(new_active, dev->features);
    mod = !bitmap_equal(old_active, new_active, NETDEV_FEATURE_COUNT);


    \
     
     \ /
      Last update: 2020-08-26 14:04    [W:4.112 / U:0.408 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site