mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 12:44:32 -04:00
mm/mmap: write-lock VMAs in vma_prepare before modifying them
Write-lock all VMAs which might be affected by a merge, split, expand or shrink operations. All these operations use vma_prepare() before making the modifications, therefore it provides a centralized place to perform VMA locking. [surenb@google.com: remove unnecessary vp->vma check in vma_prepare] Link: https://lkml.kernel.org/r/20230301022720.1380780-1-surenb@google.com Link: https://lore.kernel.org/r/202302281802.J93Nma7q-lkp@intel.com/ Link: https://lkml.kernel.org/r/20230227173632.3292573-17-surenb@google.com Signed-off-by: Suren Baghdasaryan <surenb@google.com> Reviewed-by: David Hildenbrand <david@redhat.com> Reviewed-by: Liam R. Howlett <Liam.Howlett@oracle.com> Cc: David Howells <dhowells@redhat.com> Cc: Hugh Dickins <hughd@google.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Laurent Dufour <laurent.dufour@fr.ibm.com> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: Pavel Tatashin <pasha.tatashin@soleen.com> Cc: Stephen Rothwell <sfr@canb.auug.org.au> Cc: Yu Zhao <yuzhao@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
55fd6fccad
commit
10fca64a66
@@ -502,6 +502,15 @@ static inline void init_vma_prep(struct vma_prepare *vp,
|
||||
*/
|
||||
static inline void vma_prepare(struct vma_prepare *vp)
|
||||
{
|
||||
vma_start_write(vp->vma);
|
||||
if (vp->adj_next)
|
||||
vma_start_write(vp->adj_next);
|
||||
/* vp->insert is always a newly created VMA, no need for locking */
|
||||
if (vp->remove)
|
||||
vma_start_write(vp->remove);
|
||||
if (vp->remove2)
|
||||
vma_start_write(vp->remove2);
|
||||
|
||||
if (vp->file) {
|
||||
uprobe_munmap(vp->vma, vp->vma->vm_start, vp->vma->vm_end);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user