Blob Blame History Raw
From 89b49b2a88392c510c6a171940701ba4cf580116 Mon Sep 17 00:00:00 2001
From: Maxim Mikityanskiy <maximmi@mellanox.com>
Date: Fri, 14 Aug 2020 16:17:44 +0300
Subject: [PATCH 01/17] netlink: Fix the condition for displaying actual
 changes

This comment in the code:

    /* result is not exactly as requested, show differences */

implies that the "Actual changes" output should be displayed only if the
result is not as requested, which matches the legacy ethtool behavior.
However, in fact, ethtool-netlink displays "actual changes" even when
the changes are expected (e.g., one bit was requested, and it was
changed as requested).

This commit fixes the condition above to make the behavior match the
description in the comment and the behavior of the legacy ethtool. The
new condition excludes the req_mask bits from active_mask to avoid
reacting on bit changes that we asked for. The new condition now
matches the ifs in the loop above that print "[requested on/off]" and
"[not requested]".

Signed-off-by: Maxim Mikityanskiy <maximmi@mellanox.com>
Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
(cherry picked from commit 83d2b635de121a16a27663cc4e3045243e56063b)
---
 netlink/features.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/netlink/features.c b/netlink/features.c
index 8b5b8588ca23..133529da2b9f 100644
--- a/netlink/features.c
+++ b/netlink/features.c
@@ -413,7 +413,7 @@ static void show_feature_changes(struct nl_context *nlctx,
 
 	diff = false;
 	for (i = 0; i < words; i++)
-		if (wanted_mask[i] || active_mask[i])
+		if (wanted_mask[i] || (active_mask[i] & ~sfctx->req_mask[i]))
 			diff = true;
 	if (!diff)
 		return;
-- 
2.26.2