summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFushuai Wang <wangfushuai@baidu.com>2025-10-07 10:40:11 +0300
committerMartin KaFai Lau <martin.lau@kernel.org>2025-10-07 21:53:29 +0300
commit0db4941d9dae159d887e7e2eac7e54e60c3aac87 (patch)
tree7e683c8a7167907c194a2beac241792776662c70
parentde7342228b7343774d6a9981c2ddbfb5e201044b (diff)
downloadlinux-0db4941d9dae159d887e7e2eac7e54e60c3aac87.tar.xz
bpf: Use rcu_read_lock_dont_migrate in bpf_sk_storage.c
Use rcu_read_lock_dont_migrate() and rcu_read_unlock_migrate() in bpf_sk_storage.c to obtain better performance when PREEMPT_RCU is not enabled. Signed-off-by: Fushuai Wang <wangfushuai@baidu.com> Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org> Link: https://patch.msgid.link/20251007074011.12916-1-wangfushuai@baidu.com
-rw-r--r--net/core/bpf_sk_storage.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/net/core/bpf_sk_storage.c b/net/core/bpf_sk_storage.c
index 2e538399757f..d3fbaf89a698 100644
--- a/net/core/bpf_sk_storage.c
+++ b/net/core/bpf_sk_storage.c
@@ -50,16 +50,14 @@ void bpf_sk_storage_free(struct sock *sk)
{
struct bpf_local_storage *sk_storage;
- migrate_disable();
- rcu_read_lock();
+ rcu_read_lock_dont_migrate();
sk_storage = rcu_dereference(sk->sk_bpf_storage);
if (!sk_storage)
goto out;
bpf_local_storage_destroy(sk_storage);
out:
- rcu_read_unlock();
- migrate_enable();
+ rcu_read_unlock_migrate();
}
static void bpf_sk_storage_map_free(struct bpf_map *map)
@@ -161,8 +159,7 @@ int bpf_sk_storage_clone(const struct sock *sk, struct sock *newsk)
RCU_INIT_POINTER(newsk->sk_bpf_storage, NULL);
- migrate_disable();
- rcu_read_lock();
+ rcu_read_lock_dont_migrate();
sk_storage = rcu_dereference(sk->sk_bpf_storage);
if (!sk_storage || hlist_empty(&sk_storage->list))
@@ -213,8 +210,7 @@ int bpf_sk_storage_clone(const struct sock *sk, struct sock *newsk)
}
out:
- rcu_read_unlock();
- migrate_enable();
+ rcu_read_unlock_migrate();
/* In case of an error, don't free anything explicitly here, the
* caller is responsible to call bpf_sk_storage_free.