From: Kiran Patil When an egress qdisc is destroyed, the driver proactively deletes all associated cloud filters to prevent stale hardware state, decrementing num_cloud_filters to zero in the process. The kernel netdev layer is unaware of this implicit cleanup and may still try to delete the same filters individually. If the filter is not found in the driver's list and num_cloud_filters is already zero, return 0 instead of -EINVAL to avoid confusing upper layers that believe the filter is still offloaded in hardware. Fixes: 0075fa0fadd0 ("i40evf: Add support to apply cloud filters") Cc: stable@vger.kernel.org Signed-off-by: Kiran Patil Signed-off-by: Aleksandr Loktionov --- drivers/net/ethernet/intel/iavf/iavf_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c index e5bf15b..de80947 100644 --- a/drivers/net/ethernet/intel/iavf/iavf_main.c +++ b/drivers/net/ethernet/intel/iavf/iavf_main.c @@ -4162,7 +4162,8 @@ static int iavf_delete_clsflower(struct iavf_adapter *adapter, if (filter) { filter->del = true; adapter->aq_required |= IAVF_FLAG_AQ_DEL_CLOUD_FILTER; - } else { + } else if (adapter->num_cloud_filters) { + /* other filters still tracked, so this one is a genuine miss */ err = -EINVAL; } spin_unlock_bh(&adapter->cloud_filter_list_lock); -- 2.52.0