]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/netfilter/nft_set_rbtree.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
[karo-tx-linux.git] / net / netfilter / nft_set_rbtree.c
similarity index 97%
rename from net/netfilter/nft_rbtree.c
rename to net/netfilter/nft_set_rbtree.c
index ffe9ae062d23e48fe39f9136e8e01d3737a852af..38b5bda242f86fe4ca0e09d7f365892917d32c9f 100644 (file)
@@ -96,7 +96,8 @@ out:
 }
 
 static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set,
-                              struct nft_rbtree_elem *new)
+                              struct nft_rbtree_elem *new,
+                              struct nft_set_ext **ext)
 {
        struct nft_rbtree *priv = nft_set_priv(set);
        u8 genmask = nft_genmask_next(net);
@@ -124,8 +125,10 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set,
                                else if (!nft_rbtree_interval_end(rbe) &&
                                         nft_rbtree_interval_end(new))
                                        p = &parent->rb_right;
-                               else
+                               else {
+                                       *ext = &rbe->ext;
                                        return -EEXIST;
+                               }
                        }
                }
        }
@@ -135,13 +138,14 @@ static int __nft_rbtree_insert(const struct net *net, const struct nft_set *set,
 }
 
 static int nft_rbtree_insert(const struct net *net, const struct nft_set *set,
-                            const struct nft_set_elem *elem)
+                            const struct nft_set_elem *elem,
+                            struct nft_set_ext **ext)
 {
        struct nft_rbtree_elem *rbe = elem->priv;
        int err;
 
        spin_lock_bh(&nft_rbtree_lock);
-       err = __nft_rbtree_insert(net, set, rbe);
+       err = __nft_rbtree_insert(net, set, rbe, ext);
        spin_unlock_bh(&nft_rbtree_lock);
 
        return err;