|
@@ -5761,7 +5761,7 @@ static void nft_chain_commit_update(struct nft_trans *trans)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-static void nf_tables_commit_release(struct nft_trans *trans)
|
|
|
+static void nft_commit_release(struct nft_trans *trans)
|
|
|
{
|
|
|
switch (trans->msg_type) {
|
|
|
case NFT_MSG_DELTABLE:
|
|
@@ -5790,6 +5790,21 @@ static void nf_tables_commit_release(struct nft_trans *trans)
|
|
|
kfree(trans);
|
|
|
}
|
|
|
|
|
|
+static void nf_tables_commit_release(struct net *net)
|
|
|
+{
|
|
|
+ struct nft_trans *trans, *next;
|
|
|
+
|
|
|
+ if (list_empty(&net->nft.commit_list))
|
|
|
+ return;
|
|
|
+
|
|
|
+ synchronize_rcu();
|
|
|
+
|
|
|
+ list_for_each_entry_safe(trans, next, &net->nft.commit_list, list) {
|
|
|
+ list_del(&trans->list);
|
|
|
+ nft_commit_release(trans);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int nf_tables_commit(struct net *net, struct sk_buff *skb)
|
|
|
{
|
|
|
struct nft_trans *trans, *next;
|
|
@@ -5920,13 +5935,7 @@ static int nf_tables_commit(struct net *net, struct sk_buff *skb)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- synchronize_rcu();
|
|
|
-
|
|
|
- list_for_each_entry_safe(trans, next, &net->nft.commit_list, list) {
|
|
|
- list_del(&trans->list);
|
|
|
- nf_tables_commit_release(trans);
|
|
|
- }
|
|
|
-
|
|
|
+ nf_tables_commit_release(net);
|
|
|
nf_tables_gen_notify(net, skb, NFT_MSG_NEWGEN);
|
|
|
|
|
|
return 0;
|