ipv6: Pass gfp_flags down to ip6_route_info_create_nh().
authorKuniyuki Iwashima <kuniyu@amazon.com>
Fri, 16 May 2025 02:27:22 +0000 (19:27 -0700)
committerJakub Kicinski <kuba@kernel.org>
Wed, 21 May 2025 02:18:24 +0000 (19:18 -0700)
Since commit c4837b9853e5 ("ipv6: Split ip6_route_info_create()."),
ip6_route_info_create_nh() uses GFP_ATOMIC as it was expected to be
called under RCU.

Now, we can call it without RCU and use GFP_KERNEL.

Let's pass gfp_flags to ip6_route_info_create_nh().

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Link: https://patch.msgid.link/20250516022759.44392-7-kuniyu@amazon.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ipv6/route.c

index 96ae21da9961db7279d9acf43ad5daecd911d1de..dda913ebd2d3ee4f0581f48a8369f4ce692d1f26 100644 (file)
@@ -3834,6 +3834,7 @@ err:
 
 static int ip6_route_info_create_nh(struct fib6_info *rt,
                                    struct fib6_config *cfg,
+                                   gfp_t gfp_flags,
                                    struct netlink_ext_ack *extack)
 {
        struct net *net = cfg->fc_nlinfo.nl_net;
@@ -3869,7 +3870,7 @@ static int ip6_route_info_create_nh(struct fib6_info *rt,
        } else {
                int addr_type;
 
-               err = fib6_nh_init(net, rt->fib6_nh, cfg, GFP_ATOMIC, extack);
+               err = fib6_nh_init(net, rt->fib6_nh, cfg, gfp_flags, extack);
                if (err)
                        goto out_release;
 
@@ -3917,7 +3918,7 @@ int ip6_route_add(struct fib6_config *cfg, gfp_t gfp_flags,
        if (IS_ERR(rt))
                return PTR_ERR(rt);
 
-       err = ip6_route_info_create_nh(rt, cfg, extack);
+       err = ip6_route_info_create_nh(rt, cfg, gfp_flags, extack);
        if (err)
                return err;
 
@@ -4707,7 +4708,7 @@ struct fib6_info *addrconf_f6i_alloc(struct net *net,
        if (IS_ERR(f6i))
                return f6i;
 
-       err = ip6_route_info_create_nh(f6i, &cfg, extack);
+       err = ip6_route_info_create_nh(f6i, &cfg, gfp_flags, extack);
        if (err)
                return ERR_PTR(err);
 
@@ -5471,7 +5472,7 @@ static int ip6_route_multipath_add(struct fib6_config *cfg,
                        goto cleanup;
                }
 
-               err = ip6_route_info_create_nh(rt, &r_cfg, extack);
+               err = ip6_route_info_create_nh(rt, &r_cfg, GFP_KERNEL, extack);
                if (err) {
                        rt = NULL;
                        goto cleanup;