forked from Minki/linux
netfilter: flowtable: fetch stats only if flow is still alive
Do not fetch statistics if flow has expired since it might not in
hardware anymore. After this update, remove the FLOW_OFFLOAD_HW_DYING
check from nf_flow_offload_stats() since this flag is never set on.
Fixes: c29f74e0df
("netfilter: nf_flow_table: hardware offload support")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Acked-by: wenxu <wenxu@ucloud.cn>
This commit is contained in:
parent
4a7faaf4ad
commit
79b9b685dd
@ -348,9 +348,6 @@ static void nf_flow_offload_gc_step(struct flow_offload *flow, void *data)
|
|||||||
{
|
{
|
||||||
struct nf_flowtable *flow_table = data;
|
struct nf_flowtable *flow_table = data;
|
||||||
|
|
||||||
if (flow->flags & FLOW_OFFLOAD_HW)
|
|
||||||
nf_flow_offload_stats(flow_table, flow);
|
|
||||||
|
|
||||||
if (nf_flow_has_expired(flow) || nf_ct_is_dying(flow->ct) ||
|
if (nf_flow_has_expired(flow) || nf_ct_is_dying(flow->ct) ||
|
||||||
(flow->flags & (FLOW_OFFLOAD_DYING | FLOW_OFFLOAD_TEARDOWN))) {
|
(flow->flags & (FLOW_OFFLOAD_DYING | FLOW_OFFLOAD_TEARDOWN))) {
|
||||||
if (flow->flags & FLOW_OFFLOAD_HW) {
|
if (flow->flags & FLOW_OFFLOAD_HW) {
|
||||||
@ -361,6 +358,8 @@ static void nf_flow_offload_gc_step(struct flow_offload *flow, void *data)
|
|||||||
} else {
|
} else {
|
||||||
flow_offload_del(flow_table, flow);
|
flow_offload_del(flow_table, flow);
|
||||||
}
|
}
|
||||||
|
} else if (flow->flags & FLOW_OFFLOAD_HW) {
|
||||||
|
nf_flow_offload_stats(flow_table, flow);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -784,8 +784,7 @@ void nf_flow_offload_stats(struct nf_flowtable *flowtable,
|
|||||||
__s32 delta;
|
__s32 delta;
|
||||||
|
|
||||||
delta = nf_flow_timeout_delta(flow->timeout);
|
delta = nf_flow_timeout_delta(flow->timeout);
|
||||||
if ((delta >= (9 * NF_FLOW_TIMEOUT) / 10) ||
|
if ((delta >= (9 * NF_FLOW_TIMEOUT) / 10))
|
||||||
flow->flags & FLOW_OFFLOAD_HW_DYING)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
offload = kzalloc(sizeof(struct flow_offload_work), GFP_ATOMIC);
|
offload = kzalloc(sizeof(struct flow_offload_work), GFP_ATOMIC);
|
||||||
|
Loading…
Reference in New Issue
Block a user