From: Alexei Starovoitov Date: Thu, 24 Sep 2020 02:10:38 +0000 (-0700) Subject: Revert "bpf: Fix potential call bpf_link_free() in atomic context" X-Git-Tag: v5.10.7~1401^2~96^2~43 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f00f2f7fe86036a586e26bd55ad86310477199a3;p=platform%2Fkernel%2Flinux-rpi.git Revert "bpf: Fix potential call bpf_link_free() in atomic context" This reverts commit 31f23a6a181c81543b10a1a9056b0e6c7ef1c747. This change made many selftests/bpf flaky: flow_dissector, sk_lookup, sk_assign and others. There was no issue in the code. Signed-off-by: Alexei Starovoitov --- diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index 3426849..2740df1 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -2345,8 +2345,12 @@ void bpf_link_put(struct bpf_link *link) if (!atomic64_dec_and_test(&link->refcnt)) return; - INIT_WORK(&link->work, bpf_link_put_deferred); - schedule_work(&link->work); + if (in_atomic()) { + INIT_WORK(&link->work, bpf_link_put_deferred); + schedule_work(&link->work); + } else { + bpf_link_free(link); + } } static int bpf_link_release(struct inode *inode, struct file *filp)