]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bpf: tcp: Make mem flags configurable through bpf_iter_tcp_realloc_batch
authorJordan Rife <jordan@jrife.io>
Mon, 14 Jul 2025 18:09:05 +0000 (11:09 -0700)
committerMartin KaFai Lau <martin.lau@kernel.org>
Mon, 14 Jul 2025 19:09:08 +0000 (12:09 -0700)
Prepare for the next patch which needs to be able to choose either
GFP_USER or GFP_NOWAIT for calls to bpf_iter_tcp_realloc_batch.

Signed-off-by: Jordan Rife <jordan@jrife.io>
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
net/ipv4/tcp_ipv4.c

index 429fb34b075e0bdad0e1c55dd6b1101b3dfe78dd..a0a68b564d9de1b4ff9f7a4e1531890c76be16cc 100644 (file)
@@ -3048,12 +3048,12 @@ static void bpf_iter_tcp_put_batch(struct bpf_tcp_iter_state *iter)
 }
 
 static int bpf_iter_tcp_realloc_batch(struct bpf_tcp_iter_state *iter,
-                                     unsigned int new_batch_sz)
+                                     unsigned int new_batch_sz, gfp_t flags)
 {
        struct sock **new_batch;
 
        new_batch = kvmalloc(sizeof(*new_batch) * new_batch_sz,
-                            GFP_USER | __GFP_NOWARN);
+                            flags | __GFP_NOWARN);
        if (!new_batch)
                return -ENOMEM;
 
@@ -3165,7 +3165,8 @@ again:
                return sk;
        }
 
-       if (!resized && !bpf_iter_tcp_realloc_batch(iter, expected * 3 / 2)) {
+       if (!resized && !bpf_iter_tcp_realloc_batch(iter, expected * 3 / 2,
+                                                   GFP_USER)) {
                resized = true;
                goto again;
        }
@@ -3596,7 +3597,7 @@ static int bpf_iter_init_tcp(void *priv_data, struct bpf_iter_aux_info *aux)
        if (err)
                return err;
 
-       err = bpf_iter_tcp_realloc_batch(iter, INIT_BATCH_SZ);
+       err = bpf_iter_tcp_realloc_batch(iter, INIT_BATCH_SZ, GFP_USER);
        if (err) {
                bpf_iter_fini_seq_net(priv_data);
                return err;