Ben Hutchings <ben <at> decadent.org.uk> writes:
> 
> When the ETHTOOL_GLINKSETTINGS implementation finds that userland is
> using the wrong number of words of link mode bitmaps (or is trying to
> find out the right numbers) it sets the cmd field to 0 in the response
> structure.
> 
> This is inconsistent with the implementation of every other ethtool
> command, so let's remove that inconsistency before it gets into a
> stable release.
> 
> Fixes: 3f1ac7a700d03 ("net: ethtool: add new ETHTOOL_xLINKSETTINGS API")
> Signed-off-by: Ben Hutchings <ben <at> decadent.org.uk>
> ---
> David, please can you include this in changes for 4.6?
> 
> Ben.
> 
>  net/core/ethtool.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/net/core/ethtool.c b/net/core/ethtool.c
> index 2966cd0d7c93..f426c5ad6149 100644
> --- a/net/core/ethtool.c
> +++ b/net/core/ethtool.c
>  <at>  <at>  -655,7 +655,7  <at>  <at>  static int 
ethtool_get_link_ksettings(struct net_device *dev,
>           != link_ksettings.base.link_mode_masks_nwords) {
>               /* wrong link mode nbits requested */
>               memset(&link_ksettings, 0, sizeof(link_ksettings));
> -             /* keep cmd field reset to 0 */
> +             link_ksettings.base.cmd = ETHTOOL_GLINKSETTINGS;
>               /* send back number of words required as negative val */
>               compiletime_assert(__ETHTOOL_LINK_MODE_MASK_NU32 <= S8_MAX,
>                                  "need too many bits for link modes!");
> 

thanks!

Please also update the comments in ethtool.h, proposed change below:

diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h
index 2835b07..9222db8 100644
--- a/include/uapi/linux/ethtool.h
+++ b/include/uapi/linux/ethtool.h
@@ -1648,9 +1648,9 @@ enum ethtool_reset_flags {
  *     %ETHTOOL_GLINKSETTINGS: on entry, number of words passed by user
  *     (>= 0); on return, if handshake in progress, negative if
  *     request size unsupported by kernel: absolute value indicates
- *     kernel recommended size and cmd field is 0, as well as all the
- *     other fields; otherwise (handshake completed), strictly
- *     positive to indicate size used by kernel and cmd field is
+ *     kernel expected size and all the other fields but cmd
+ *     are 0; otherwise (handshake completed), strictly positive
+ *     to indicate size used by kernel and cmd field stays
  *     %ETHTOOL_GLINKSETTINGS, all other fields populated by driver. For
  *     %ETHTOOL_SLINKSETTINGS: must be valid on entry, ie. a positive
  *     value returned previously by %ETHTOOL_GLINKSETTINGS, otherwise


Reply via email to