sfc: suppress MCDI errors from ARFS
In high connection count usage, the NIC's filter table may be filled with sufficiently many ARFS filters that further insertions fail. As this does not represent a correctness issue, do not log the resulting MCDI errors. Add a debug-level message under the (by default disabled) rx_status category instead; and take the opportunity to do a little extra expiry work. Since there are now multiple workitems able to call __efx_filter_rfs_expire on a given channel, it is possible for them to race and thus pass quotas which, combined, exceed rfs_filter_count. Thus, don't WARN_ON if we loop all the way around the table with quota left over. Signed-off-by: Edward Cree <ecree@solarflare.com> Tested-by: David Ahern <dahern@digitalocean.com> Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
This commit is contained in:

committed by
Jakub Kicinski

parent
8490e75cdb
commit
0aa6608dae
@@ -4202,11 +4202,15 @@ static int efx_ef10_filter_push(struct efx_nic *efx,
|
||||
{
|
||||
MCDI_DECLARE_BUF(inbuf, MC_CMD_FILTER_OP_EXT_IN_LEN);
|
||||
MCDI_DECLARE_BUF(outbuf, MC_CMD_FILTER_OP_EXT_OUT_LEN);
|
||||
size_t outlen;
|
||||
int rc;
|
||||
|
||||
efx_ef10_filter_push_prep(efx, spec, inbuf, *handle, ctx, replacing);
|
||||
rc = efx_mcdi_rpc(efx, MC_CMD_FILTER_OP, inbuf, sizeof(inbuf),
|
||||
outbuf, sizeof(outbuf), NULL);
|
||||
rc = efx_mcdi_rpc_quiet(efx, MC_CMD_FILTER_OP, inbuf, sizeof(inbuf),
|
||||
outbuf, sizeof(outbuf), &outlen);
|
||||
if (rc && spec->priority != EFX_FILTER_PRI_HINT)
|
||||
efx_mcdi_display_error(efx, MC_CMD_FILTER_OP, sizeof(inbuf),
|
||||
outbuf, outlen, rc);
|
||||
if (rc == 0)
|
||||
*handle = MCDI_QWORD(outbuf, FILTER_OP_OUT_HANDLE);
|
||||
if (rc == -ENOSPC)
|
||||
|
Reference in New Issue
Block a user