]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
ipv4: Convert check_lifetime() to per-netns RTNL.
authorKuniyuki Iwashima <kuniyu@amazon.com>
Mon, 21 Oct 2024 18:32:35 +0000 (11:32 -0700)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 29 Oct 2024 10:54:57 +0000 (11:54 +0100)
Since commit 1675f385213e ("ipv4: Namespacify IPv4 address GC."),
check_lifetime() works on a per-netns basis.

Let's use rtnl_net_lock() and rtnl_net_dereference().

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net/ipv4/devinet.c

index 6b7780e12f34240eb0b10c2d7bf1bd08462609c6..5eaef3bbb987a172ac47915593c5880c7ce83300 100644 (file)
@@ -771,7 +771,8 @@ static void check_lifetime(struct work_struct *work)
                rcu_read_unlock();
                if (!change_needed)
                        continue;
-               rtnl_lock();
+
+               rtnl_net_lock(net);
                hlist_for_each_entry_safe(ifa, n, head, addr_lst) {
                        unsigned long age;
 
@@ -788,7 +789,7 @@ static void check_lifetime(struct work_struct *work)
                                struct in_ifaddr *tmp;
 
                                ifap = &ifa->ifa_dev->ifa_list;
-                               tmp = rtnl_dereference(*ifap);
+                               tmp = rtnl_net_dereference(net, *ifap);
                                while (tmp) {
                                        if (tmp == ifa) {
                                                inet_del_ifa(ifa->ifa_dev,
@@ -796,7 +797,7 @@ static void check_lifetime(struct work_struct *work)
                                                break;
                                        }
                                        ifap = &tmp->ifa_next;
-                                       tmp = rtnl_dereference(*ifap);
+                                       tmp = rtnl_net_dereference(net, *ifap);
                                }
                        } else if (ifa->ifa_preferred_lft !=
                                   INFINITY_LIFE_TIME &&
@@ -806,7 +807,7 @@ static void check_lifetime(struct work_struct *work)
                                rtmsg_ifa(RTM_NEWADDR, ifa, NULL, 0);
                        }
                }
-               rtnl_unlock();
+               rtnl_net_unlock(net);
        }
 
        next_sec = round_jiffies_up(next);