static int mlx5e_handle_feature(struct net_device *netdev,
                                netdev_features_t *features,
-                               netdev_features_t wanted_features,
                                netdev_features_t feature,
                                mlx5e_feature_handler feature_handler)
 {
-       netdev_features_t changes = wanted_features ^ netdev->features;
-       bool enable = !!(wanted_features & feature);
+       netdev_features_t changes = *features ^ netdev->features;
+       bool enable = !!(*features & feature);
        int err;
 
        if (!(changes & feature))
 
        err = feature_handler(netdev, enable);
        if (err) {
+               MLX5E_SET_FEATURE(features, feature, !enable);
                netdev_err(netdev, "%s feature %pNF failed, err %d\n",
                           enable ? "Enable" : "Disable", &feature, err);
                return err;
        }
 
-       MLX5E_SET_FEATURE(features, feature, enable);
        return 0;
 }
 
 int mlx5e_set_features(struct net_device *netdev, netdev_features_t features)
 {
-       netdev_features_t oper_features = netdev->features;
+       netdev_features_t oper_features = features;
        int err = 0;
 
 #define MLX5E_HANDLE_FEATURE(feature, handler) \
-       mlx5e_handle_feature(netdev, &oper_features, features, feature, handler)
+       mlx5e_handle_feature(netdev, &oper_features, feature, handler)
 
        err |= MLX5E_HANDLE_FEATURE(NETIF_F_LRO, set_feature_lro);
        err |= MLX5E_HANDLE_FEATURE(NETIF_F_GRO_HW, set_feature_hw_gro);