FROMLIST: mm/mmap: move VMA locking before vma_adjust_trans_huge call
vma_adjust_trans_huge() modifies the VMA and such modifications should be done after VMA is marked as being written. Therefore move VMA flag modifications before vma_adjust_trans_huge() so that VMA is marked before all these modifications. Signed-off-by: Suren Baghdasaryan <surenb@google.com> Link: https://lore.kernel.org/all/20230216051750.3125598-15-surenb@google.com/ [surenb: using older v3 of patchset due to missing __vma_adjust() refactoring in 6.2-rc4 which introduced vma_prepare()] Bug: 161210518 Change-Id: I650162fd85fabee00a8a05ddb32318e654270cb1 Signed-off-by: Suren Baghdasaryan <surenb@google.com>
This commit is contained in:
parent
6764412400
commit
3771808d64
1 changed files with 2 additions and 1 deletions
|
|
@ -2987,13 +2987,14 @@ static int do_brk_flags(struct ma_state *mas, struct vm_area_struct *vma,
|
|||
if (mas_preallocate(mas, vma, GFP_KERNEL))
|
||||
return -ENOMEM;
|
||||
|
||||
/* Set flags first to implicitly lock the VMA before updates */
|
||||
vm_flags_set(vma, VM_SOFTDIRTY);
|
||||
vma_adjust_trans_huge(vma, vma->vm_start, addr + len, 0);
|
||||
if (vma->anon_vma) {
|
||||
anon_vma_lock_write(vma->anon_vma);
|
||||
anon_vma_interval_tree_pre_update_vma(vma);
|
||||
}
|
||||
vma->vm_end = addr + len;
|
||||
vm_flags_set(vma, VM_SOFTDIRTY);
|
||||
mas_store_prealloc(mas, vma);
|
||||
|
||||
if (vma->anon_vma) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue