diff mbox series

[nf,v2] netfilter: flowtable: fetch stats only if flow is still alive

Message ID 20200105215938.276229-1-pablo@netfilter.org
State Superseded
Delegated to: Pablo Neira
Headers show
Series [nf,v2] netfilter: flowtable: fetch stats only if flow is still alive | expand

Commit Message

Pablo Neira Ayuso Jan. 5, 2020, 9:59 p.m. UTC
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: c29f74e0df7a ("netfilter: nf_flow_table: hardware offload support")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
---
v2: remove dead code after this update in nf_flow_offload_stats().

 net/netfilter/nf_flow_table_core.c    | 5 ++---
 net/netfilter/nf_flow_table_offload.c | 3 +--
 2 files changed, 3 insertions(+), 5 deletions(-)

Comments

wenxu Jan. 6, 2020, 3:25 a.m. UTC | #1
Acked-by: wenxu <wenxu@ucloud.cn>

On 1/6/2020 5:59 AM, Pablo Neira Ayuso wrote:
> 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: c29f74e0df7a ("netfilter: nf_flow_table: hardware offload support")
> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
> ---
> v2: remove dead code after this update in nf_flow_offload_stats().
>
>  net/netfilter/nf_flow_table_core.c    | 5 ++---
>  net/netfilter/nf_flow_table_offload.c | 3 +--
>  2 files changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/net/netfilter/nf_flow_table_core.c b/net/netfilter/nf_flow_table_core.c
> index e33a73cb1f42..9e6de2bbeccb 100644
> --- a/net/netfilter/nf_flow_table_core.c
> +++ b/net/netfilter/nf_flow_table_core.c
> @@ -348,9 +348,6 @@ static void nf_flow_offload_gc_step(struct flow_offload *flow, void *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) ||
>  	    (flow->flags & (FLOW_OFFLOAD_DYING | FLOW_OFFLOAD_TEARDOWN))) {
>  		if (flow->flags & FLOW_OFFLOAD_HW) {
> @@ -361,6 +358,8 @@ static void nf_flow_offload_gc_step(struct flow_offload *flow, void *data)
>  		} else {
>  			flow_offload_del(flow_table, flow);
>  		}
> +	} else if (flow->flags & FLOW_OFFLOAD_HW) {
> +		nf_flow_offload_stats(flow_table, flow);
>  	}
>  }
>  
> diff --git a/net/netfilter/nf_flow_table_offload.c b/net/netfilter/nf_flow_table_offload.c
> index d06969af1085..4d1e81e2880f 100644
> --- a/net/netfilter/nf_flow_table_offload.c
> +++ b/net/netfilter/nf_flow_table_offload.c
> @@ -784,8 +784,7 @@ void nf_flow_offload_stats(struct nf_flowtable *flowtable,
>  	__s32 delta;
>  
>  	delta = nf_flow_timeout_delta(flow->timeout);
> -	if ((delta >= (9 * NF_FLOW_TIMEOUT) / 10) ||
> -	    flow->flags & FLOW_OFFLOAD_HW_DYING)
> +	if ((delta >= (9 * NF_FLOW_TIMEOUT) / 10))
>  		return;
>  
>  	offload = kzalloc(sizeof(struct flow_offload_work), GFP_ATOMIC);
diff mbox series

Patch

diff --git a/net/netfilter/nf_flow_table_core.c b/net/netfilter/nf_flow_table_core.c
index e33a73cb1f42..9e6de2bbeccb 100644
--- a/net/netfilter/nf_flow_table_core.c
+++ b/net/netfilter/nf_flow_table_core.c
@@ -348,9 +348,6 @@  static void nf_flow_offload_gc_step(struct flow_offload *flow, void *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) ||
 	    (flow->flags & (FLOW_OFFLOAD_DYING | FLOW_OFFLOAD_TEARDOWN))) {
 		if (flow->flags & FLOW_OFFLOAD_HW) {
@@ -361,6 +358,8 @@  static void nf_flow_offload_gc_step(struct flow_offload *flow, void *data)
 		} else {
 			flow_offload_del(flow_table, flow);
 		}
+	} else if (flow->flags & FLOW_OFFLOAD_HW) {
+		nf_flow_offload_stats(flow_table, flow);
 	}
 }
 
diff --git a/net/netfilter/nf_flow_table_offload.c b/net/netfilter/nf_flow_table_offload.c
index d06969af1085..4d1e81e2880f 100644
--- a/net/netfilter/nf_flow_table_offload.c
+++ b/net/netfilter/nf_flow_table_offload.c
@@ -784,8 +784,7 @@  void nf_flow_offload_stats(struct nf_flowtable *flowtable,
 	__s32 delta;
 
 	delta = nf_flow_timeout_delta(flow->timeout);
-	if ((delta >= (9 * NF_FLOW_TIMEOUT) / 10) ||
-	    flow->flags & FLOW_OFFLOAD_HW_DYING)
+	if ((delta >= (9 * NF_FLOW_TIMEOUT) / 10))
 		return;
 
 	offload = kzalloc(sizeof(struct flow_offload_work), GFP_ATOMIC);