]> www.infradead.org Git - users/jedix/linux-maple.git/commit
mm/mmap: free vm_area_struct without call_rcu in exit_mmap
authorSuren Baghdasaryan <surenb@google.com>
Mon, 27 Feb 2023 17:36:31 +0000 (09:36 -0800)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 5 Apr 2023 23:02:13 +0000 (16:02 -0700)
commitf2ccd777dcf158b7d5e61feb0513ccd32d7baf52
tree0123bdf7f9dea8438a1977dc8bc9c3e440ffcee5
parent5ee70566ed0794b6c267caf29f049e88155e6d7c
mm/mmap: free vm_area_struct without call_rcu in exit_mmap

call_rcu() can take a long time when callback offloading is enabled.  Its
use in the vm_area_free can cause regressions in the exit path when
multiple VMAs are being freed.

Because exit_mmap() is called only after the last mm user drops its
refcount, the page fault handlers can't be racing with it.  Any other
possible user like oom-reaper or process_mrelease are already synchronized
using mmap_lock.  Therefore exit_mmap() can free VMAs directly, without
the use of call_rcu().

Expose __vm_area_free() and use it from exit_mmap() to avoid possible
call_rcu() floods and performance regressions caused by it.

Link: https://lkml.kernel.org/r/20230227173632.3292573-33-surenb@google.com
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/mm.h
kernel/fork.c
mm/mmap.c