diff mbox series

[v4,12/18] nfnetlink_gueue: exit_net cleanup check added

Message ID c0d49d64-d46b-21e6-02e4-4c445600bd39@virtuozzo.com
State Superseded, archived
Delegated to: David Miller
Headers show
Series exit_net checks for objects initialized in net_init hook | expand

Commit Message

Vasily Averin Nov. 12, 2017, 8:47 a.m. UTC
Be sure that instance_table array initialized in net_init hook
was return to initial state.

Signed-off-by: Vasily Averin <vvs@virtuozzo.com>
---
 net/netfilter/nfnetlink_queue.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Florian Westphal Nov. 12, 2017, 8:52 a.m. UTC | #1
Vasily Averin <vvs@virtuozzo.com> wrote:
> Be sure that instance_table array initialized in net_init hook
> was return to initial state.

> +	for (i = 0; i < INSTANCE_BUCKETS; i++)
> +		if (WARN_ON_ONCE(!hlist_empty(&q->instance_table[i])))
> +			break;

This looks strange, why if/break?

Plain WARN_ON_ONCE should be enough, but thats a nit so:

Acked-by: Florian Westphal <fw@strlen.de>
Vasily Averin Nov. 12, 2017, 9:02 a.m. UTC | #2
On 2017-11-12 11:52, Florian Westphal wrote:
> Vasily Averin <vvs@virtuozzo.com> wrote:
>> Be sure that instance_table array initialized in net_init hook
>> was return to initial state.
> 
>> +	for (i = 0; i < INSTANCE_BUCKETS; i++)
>> +		if (WARN_ON_ONCE(!hlist_empty(&q->instance_table[i])))
>> +			break;
> 
> This looks strange, why if/break?

I did not want to generate huge number of messages on each non-empty hash bucket.

> Plain WARN_ON_ONCE should be enough, but thats a nit so:

Oh, you're right.
In first patch version WARN_ON  was used here.
I've missed that only first message will be printed with _ONCE check.

> Acked-by: Florian Westphal <fw@strlen.de>
>
diff mbox series

Patch

diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c
index c979662..fd41077 100644
--- a/net/netfilter/nfnetlink_queue.c
+++ b/net/netfilter/nfnetlink_queue.c
@@ -1512,10 +1512,16 @@  static int __net_init nfnl_queue_net_init(struct net *net)
 
 static void __net_exit nfnl_queue_net_exit(struct net *net)
 {
+	unsigned int i;
+	struct nfnl_queue_net *q = nfnl_queue_pernet(net);
+
 	nf_unregister_queue_handler(net);
 #ifdef CONFIG_PROC_FS
 	remove_proc_entry("nfnetlink_queue", net->nf.proc_netfilter);
 #endif
+	for (i = 0; i < INSTANCE_BUCKETS; i++)
+		if (WARN_ON_ONCE(!hlist_empty(&q->instance_table[i])))
+			break;
 }
 
 static void nfnl_queue_net_exit_batch(struct list_head *net_exit_list)