Messages in this thread Patch in this message | | | Date | Mon, 13 Dec 2021 17:04:01 -0500 | Subject | [PATCH] rlimits: do not grab tasklist_lock for do_prlimit on current | From | Barret Rhoden <> |
| |
The tasklist_lock can be a scalability bottleneck. For current tasks, we don't need the tasklist_lock to protect tsk->sighand or tsk->signal. If non-current callers become a bottleneck, we could use lock_task_sighand().
Signed-off-by: Barret Rhoden <brho@google.com> --- kernel/sys.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/kernel/sys.c b/kernel/sys.c index 8fdac0d90504..e56d1ae910af 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -1576,7 +1576,8 @@ int do_prlimit(struct task_struct *tsk, unsigned int resource, } /* protect tsk->signal and tsk->sighand from disappearing */ - read_lock(&tasklist_lock); + if (tsk != current) + read_lock(&tasklist_lock); if (!tsk->sighand) { retval = -ESRCH; goto out; @@ -1611,7 +1612,8 @@ int do_prlimit(struct task_struct *tsk, unsigned int resource, IS_ENABLED(CONFIG_POSIX_TIMERS)) update_rlimit_cpu(tsk, new_rlim->rlim_cur); out: - read_unlock(&tasklist_lock); + if (tsk != current) + read_unlock(&tasklist_lock); return retval; } -- 2.34.1.173.g76aa8bc2d0-goog
| |