txgbe_flow_create() reports failures with rte_flow_error_set(error, -ret).
The FDIR flex offset mismatch and mask-only paths jump to that handler
with ret == 0, so the application sees a failed create and errno 0. The
global mask memcmp path stores memcmp's positive result in ret, so -ret
is negative.
Set -EINVAL on these paths.
Fixes: 5c2352b9ece6 ("net/txgbe: support creating consistent filter")
Cc: [email protected]
Signed-off-by: Zhang Tengfei <[email protected]>
---
drivers/net/txgbe/txgbe_flow.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c
index a1a497fa22..084b1eec1d 100644
--- a/drivers/net/txgbe/txgbe_flow.c
+++ b/drivers/net/txgbe/txgbe_flow.c
@@ -3388,12 +3388,12 @@ txgbe_flow_create(struct rte_eth_dev *dev,
* Only support one global mask,
* all the masks should be the same.
*/
- ret = memcmp(&fdir_info->mask,
+ if (memcmp(&fdir_info->mask,
&fdir_rule.mask,
- sizeof(struct txgbe_hw_fdir_mask));
- if (ret) {
+ sizeof(struct txgbe_hw_fdir_mask)) !=
0) {
PMD_DRV_LOG(ERR, "only support one
global mask");
rte_free(fdir_rule_ptr);
+ ret = -EINVAL;
goto out;
}
@@ -3402,6 +3402,7 @@ txgbe_flow_create(struct rte_eth_dev *dev,
fdir_info->flex_relative !=
fdir_rule.flex_relative) {
rte_free(fdir_rule_ptr);
+ ret = -EINVAL;
goto out;
}
}
@@ -3431,6 +3432,7 @@ txgbe_flow_create(struct rte_eth_dev *dev,
}
rte_free(fdir_rule_ptr);
+ ret = -EINVAL;
goto out;
}
--
2.53.0