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

Reply via email to