* Liam Howlett <liam.howlett@xxxxxxxxxx> [221129 11:44]: > From: "Liam R. Howlett" <Liam.Howlett@xxxxxxxxxx> > > Andrew, > > These patches are for 6.2. Slight correction, that should be for 6.3 > > This patch set expands the VMA iterator API to provide type safety to > the VMA operations using the maple tree, as requested by Linus for 6.2 This version should also be 6.3, Linus didn't specify a version. > [1] > > It also addresses another issue of usability brought up by Linus about > needing to modify the maple state within the loops. The maple state is > has been replaced by the VMA iterator and the iterator is now modified > within the MM code so the caller should not need to worry about doing > the work themselves when tree modifications occur. > > This brought up a potential inconsistency of the iterator state and what > the user expects, so the inconsistency is addressed to keep the vma > iterator safe for use after the looping over a VMA range. This is > addressed in patch 3 and 4. > > While cleaning up the state, the duplicate locking code introduced by > the maple tree has been address by abstracting it to two functions: > vma_prepare() and vma_complete(). These abstractions allowed for a much > simpler __vma_adjust(), which eventually leads to the removal of the > __vma_adjust() function by placing the logic into the vma_merge() > function itself. > > > 1. https://lore.kernel.org/linux-mm/CAHk-=wg9WQXBGkNdKD2bqocnN73rDswuWsavBB7T-tekykEn_A@xxxxxxxxxxxxxx/ > > Liam R. Howlett (43): > maple_tree: Add mas_init() function > maple_tree: Fix potential rcu issue > maple_tree: Reduce user error potential > test_maple_tree: Test modifications while iterating > mm: Expand vma iterator interface. > mm/mmap: convert brk to use vma iterator > kernel/fork: Convert forking to using the vmi iterator > mmap: Convert vma_link() vma iterator > mm/mmap: Remove preallocation from do_mas_align_munmap() > mmap: Change do_mas_munmap and do_mas_aligned_munmap() to use vma > iterator > mmap: Convert vma_expand() to use vma iterator > mm: Add temporary vma iterator versions of vma_merge(), split_vma(), > and __split_vma() > ipc/shm: Use the vma iterator for munmap calls > userfaultfd: Use vma iterator > mm: Change mprotect_fixup to vma iterator > mlock: Convert mlock to vma iterator > coredump: Convert to vma iterator > mempolicy: Convert to vma iterator > task_mmu: Convert to vma iterator > sched: Convert to vma iterator > madvise: Use vmi iterator for __split_vma() and vma_merge() > mmap: Pass through vmi iterator to __split_vma() > mmap: Use vmi version of vma_merge() > mm/mremap: Use vmi version of vma_merge() > mm: Switch vma_merge(), split_vma(), and __split_vma to vma iterator > mmap: Convert __vma_adjust() to use vma iterator > mm: Pass through vma iterator to __vma_adjust() > madvise: Use split_vma() instead of __split_vma() > mm: Remove unnecessary write to vma iterator in __vma_adjust() > mm: Pass vma iterator through to __vma_adjust() > mm: Add vma iterator to vma_adjust() arguments > mmap: Clean up mmap_region() unrolling > mm: Change munmap splitting order and move_vma() > mm/mmap: move anon_vma setting in __vma_adjust() > mm/mmap: Refactor locking out of __vma_adjust() > mm/mmap: Use vma_prepare() and vma_complete() in vma_expand() > mm/mmap: Introduce init_vma_prep() and init_multi_vma_prep() > mm: Don't use __vma_adjust() in __split_vma() > mm/mmap: Don't use __vma_adjust() in shift_arg_pages() > mm/mmap: Introduce dup_vma_anon() helper > mm/mmap: Convert do_brk_flags() to use vma_prepare() and > vma_complete() > mm/mmap: Remove __vma_adjust() > vma_merge: Set vma iterator to correct position. > > fs/coredump.c | 8 +- > fs/exec.c | 16 +- > fs/proc/task_mmu.c | 14 +- > fs/userfaultfd.c | 88 ++- > include/linux/maple_tree.h | 11 + > include/linux/mm.h | 87 ++- > include/linux/mm_types.h | 4 +- > ipc/shm.c | 11 +- > kernel/events/uprobes.c | 2 +- > kernel/fork.c | 19 +- > kernel/sched/fair.c | 14 +- > lib/maple_tree.c | 12 +- > lib/test_maple_tree.c | 72 +++ > mm/filemap.c | 2 +- > mm/internal.h | 13 + > mm/madvise.c | 13 +- > mm/mempolicy.c | 25 +- > mm/mlock.c | 57 +- > mm/mmap.c | 1071 ++++++++++++++++++------------------ > mm/mprotect.c | 47 +- > mm/mremap.c | 42 +- > mm/rmap.c | 4 +- > 22 files changed, 862 insertions(+), 770 deletions(-) > > -- > 2.35.1