struct fib6_cleaner_t
 {
        struct fib6_walker_t w;
+       struct net *net;
        int (*func)(struct rt6_info *, void *arg);
        void *arg;
 };
 #define FWS_INIT FWS_L
 #endif
 
-static void fib6_prune_clones(struct fib6_node *fn, struct rt6_info *rt);
+static void fib6_prune_clones(struct net *net, struct fib6_node *fn,
+                             struct rt6_info *rt);
 static struct rt6_info * fib6_find_prefix(struct fib6_node *fn);
 static struct fib6_node * fib6_repair_tree(struct fib6_node *fn);
 static int fib6_walk(struct fib6_walker_t *w);
        if (err == 0) {
                fib6_start_gc(info->nl_net, rt);
                if (!(rt->rt6i_flags&RTF_CACHE))
-                       fib6_prune_clones(pn, rt);
+                       fib6_prune_clones(info->nl_net, pn, rt);
        }
 
 out:
                        pn = pn->parent;
                }
 #endif
-               fib6_prune_clones(pn, rt);
+               fib6_prune_clones(info->nl_net, pn, rt);
        }
 
        /*
 
 static int fib6_clean_node(struct fib6_walker_t *w)
 {
-       struct nl_info info = {
-               .nl_net = &init_net,
-       };
        int res;
        struct rt6_info *rt;
        struct fib6_cleaner_t *c = container_of(w, struct fib6_cleaner_t, w);
+       struct nl_info info = {
+               .nl_net = c->net,
+       };
 
        for (rt = w->leaf; rt; rt = rt->u.dst.rt6_next) {
                res = c->func(rt, c->arg);
  *     ignoring pure split nodes) will be scanned.
  */
 
-static void fib6_clean_tree(struct fib6_node *root,
+static void fib6_clean_tree(struct net *net, struct fib6_node *root,
                            int (*func)(struct rt6_info *, void *arg),
                            int prune, void *arg)
 {
        c.w.prune = prune;
        c.func = func;
        c.arg = arg;
+       c.net = net;
 
        fib6_walk(&c.w);
 }
                head = &net->ipv6.fib_table_hash[h];
                hlist_for_each_entry_rcu(table, node, head, tb6_hlist) {
                        write_lock_bh(&table->tb6_lock);
-                       fib6_clean_tree(&table->tb6_root, func, prune, arg);
+                       fib6_clean_tree(net, &table->tb6_root,
+                                       func, prune, arg);
                        write_unlock_bh(&table->tb6_lock);
                }
        }
        return 0;
 }
 
-static void fib6_prune_clones(struct fib6_node *fn, struct rt6_info *rt)
+static void fib6_prune_clones(struct net *net, struct fib6_node *fn,
+                             struct rt6_info *rt)
 {
-       fib6_clean_tree(fn, fib6_prune_clone, 1, rt);
+       fib6_clean_tree(net, fn, fib6_prune_clone, 1, rt);
 }
 
 /*