Commit 1d39fd1b authored by David S. Miller's avatar David S. Miller

Merge branch 'sfc-more-ARFS-fixes'

Edward Cree says:

====================
sfc: more ARFS fixes

A couple more bits of breakage in my recent ARFS and async filters work.
Patch #1 in particular fixes a bug that leads to memory trampling and
 consequent crashes.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 988bf724 987c658a
...@@ -4784,6 +4784,7 @@ static bool efx_ef10_filter_rfs_expire_one(struct efx_nic *efx, u32 flow_id, ...@@ -4784,6 +4784,7 @@ static bool efx_ef10_filter_rfs_expire_one(struct efx_nic *efx, u32 flow_id,
* will set rule->filter_id to EFX_ARFS_FILTER_ID_PENDING, meaning that * will set rule->filter_id to EFX_ARFS_FILTER_ID_PENDING, meaning that
* the rule is not removed by efx_rps_hash_del() below. * the rule is not removed by efx_rps_hash_del() below.
*/ */
if (ret)
ret = efx_ef10_filter_remove_internal(efx, 1U << spec->priority, ret = efx_ef10_filter_remove_internal(efx, 1U << spec->priority,
filter_idx, true) == 0; filter_idx, true) == 0;
/* While we can't safely dereference rule (we dropped the lock), we can /* While we can't safely dereference rule (we dropped the lock), we can
......
...@@ -839,6 +839,8 @@ static void efx_filter_rfs_work(struct work_struct *data) ...@@ -839,6 +839,8 @@ static void efx_filter_rfs_work(struct work_struct *data)
int rc; int rc;
rc = efx->type->filter_insert(efx, &req->spec, true); rc = efx->type->filter_insert(efx, &req->spec, true);
if (rc >= 0)
rc %= efx->type->max_rx_ip_filters;
if (efx->rps_hash_table) { if (efx->rps_hash_table) {
spin_lock_bh(&efx->rps_hash_lock); spin_lock_bh(&efx->rps_hash_lock);
rule = efx_rps_hash_find(efx, &req->spec); rule = efx_rps_hash_find(efx, &req->spec);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment