mm: make the page fault mmap locking killable
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 15 Jun 2023 23:17:48 +0000 (16:17 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 24 Jun 2023 21:12:57 +0000 (14:12 -0700)
This is done as a separate patch from introducing the new
lock_mm_and_find_vma() helper, because while it's an obvious change,
it's not what x86 used to do in this area.

We already abort the page fault on fatal signals anyway, so why should
we wait for the mmap lock only to then abort later? With the new helper
function that returns without the lock held on failure anyway, this is
particularly easy and straightforward.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/memory.c

index 1a427097b71f0044ca28f21aedc830ef223ea3f7..1dff248805bf7a9e2c978a48cb0d854950446e0a 100644 (file)
@@ -5279,8 +5279,7 @@ static inline bool get_mmap_lock_carefully(struct mm_struct *mm, struct pt_regs
                        return false;
        }
 
-       mmap_read_lock(mm);
-       return true;
+       return !mmap_read_lock_killable(mm);
 }
 
 static inline bool mmap_upgrade_trylock(struct mm_struct *mm)
@@ -5304,8 +5303,7 @@ static inline bool upgrade_mmap_lock_carefully(struct mm_struct *mm, struct pt_r
                if (!search_exception_tables(ip))
                        return false;
        }
-       mmap_write_lock(mm);
-       return true;
+       return !mmap_write_lock_killable(mm);
 }
 
 /*