]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
net/ipv6: Move release of fib6_info from pcpu routes to helper
authorDavid Ahern <dsahern@gmail.com>
Fri, 20 Apr 2018 22:38:01 +0000 (15:38 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 21 Apr 2018 20:06:13 +0000 (16:06 -0400)
Code move only; no functional change intended.

Signed-off-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/ip6_fib.c

index f936e91a8c65ad3bafb46cdf5e09a868afcf21d5..64ca02b7745f67cd5b99847067b60a57b19f5abf 100644 (file)
@@ -860,6 +860,27 @@ static struct fib6_node *fib6_add_1(struct net *net,
        return ln;
 }
 
+static void fib6_drop_pcpu_from(struct fib6_info *f6i,
+                               const struct fib6_table *table)
+{
+       int cpu;
+
+       /* release the reference to this fib entry from
+        * all of its cached pcpu routes
+        */
+       for_each_possible_cpu(cpu) {
+               struct rt6_info **ppcpu_rt;
+               struct rt6_info *pcpu_rt;
+
+               ppcpu_rt = per_cpu_ptr(f6i->rt6i_pcpu, cpu);
+               pcpu_rt = *ppcpu_rt;
+               if (pcpu_rt) {
+                       fib6_info_release(pcpu_rt->from);
+                       pcpu_rt->from = NULL;
+               }
+       }
+}
+
 static void fib6_purge_rt(struct fib6_info *rt, struct fib6_node *fn,
                          struct net *net)
 {
@@ -887,24 +908,8 @@ static void fib6_purge_rt(struct fib6_info *rt, struct fib6_node *fn,
                                    lockdep_is_held(&table->tb6_lock));
                }
 
-               if (rt->rt6i_pcpu) {
-                       int cpu;
-
-                       /* release the reference to this fib entry from
-                        * all of its cached pcpu routes
-                        */
-                       for_each_possible_cpu(cpu) {
-                               struct rt6_info **ppcpu_rt;
-                               struct rt6_info *pcpu_rt;
-
-                               ppcpu_rt = per_cpu_ptr(rt->rt6i_pcpu, cpu);
-                               pcpu_rt = *ppcpu_rt;
-                               if (pcpu_rt) {
-                                       fib6_info_release(pcpu_rt->from);
-                                       pcpu_rt->from = NULL;
-                               }
-                       }
-               }
+               if (rt->rt6i_pcpu)
+                       fib6_drop_pcpu_from(rt, table);
        }
 }