netfilter: nfnetlink: pass down netns pointer to commit() and abort() callbacks
authorPablo Neira Ayuso <pablo@netfilter.org>
Tue, 15 Dec 2015 18:41:57 +0000 (19:41 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Mon, 28 Dec 2015 17:43:15 +0000 (18:43 +0100)
Adapt callsites to avoid recurrent lookup of the netns pointer.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/linux/netfilter/nfnetlink.h
net/netfilter/nf_tables_api.c
net/netfilter/nfnetlink.c

index ceacbf5..ba0d978 100644 (file)
@@ -26,8 +26,8 @@ struct nfnetlink_subsystem {
        __u8 subsys_id;                 /* nfnetlink subsystem ID */
        __u8 cb_count;                  /* number of callbacks */
        const struct nfnl_callback *cb; /* callback for individual types */
-       int (*commit)(struct sk_buff *skb);
-       int (*abort)(struct sk_buff *skb);
+       int (*commit)(struct net *net, struct sk_buff *skb);
+       int (*abort)(struct net *net, struct sk_buff *skb);
 };
 
 int nfnetlink_subsys_register(const struct nfnetlink_subsystem *n);
index 69cb5be..f5c3971 100644 (file)
@@ -3865,9 +3865,8 @@ static void nf_tables_commit_release(struct nft_trans *trans)
        kfree(trans);
 }
 
-static int nf_tables_commit(struct sk_buff *skb)
+static int nf_tables_commit(struct net *net, struct sk_buff *skb)
 {
-       struct net *net = sock_net(skb->sk);
        struct nft_trans *trans, *next;
        struct nft_trans_elem *te;
 
@@ -4002,9 +4001,8 @@ static void nf_tables_abort_release(struct nft_trans *trans)
        kfree(trans);
 }
 
-static int nf_tables_abort(struct sk_buff *skb)
+static int nf_tables_abort(struct net *net, struct sk_buff *skb)
 {
-       struct net *net = sock_net(skb->sk);
        struct nft_trans *trans, *next;
        struct nft_trans_elem *te;
 
index 7012154..a7ba233 100644 (file)
@@ -425,15 +425,15 @@ next:
        }
 done:
        if (status & NFNL_BATCH_REPLAY) {
-               ss->abort(oskb);
+               ss->abort(net, oskb);
                nfnl_err_reset(&err_list);
                nfnl_unlock(subsys_id);
                kfree_skb(skb);
                goto replay;
        } else if (status == NFNL_BATCH_DONE) {
-               ss->commit(oskb);
+               ss->commit(net, oskb);
        } else {
-               ss->abort(oskb);
+               ss->abort(net, oskb);
        }
 
        nfnl_err_deliver(&err_list, oskb);