Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 454ed842 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar
Browse files

lockdep: annotate mm_take_all_locks()



The nesting is correct due to holding mmap_sem, use the new annotation
to annotate this.

Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent b7d39aff
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -2273,14 +2273,14 @@ int install_special_mapping(struct mm_struct *mm,

static DEFINE_MUTEX(mm_all_locks_mutex);

static void vm_lock_anon_vma(struct anon_vma *anon_vma)
static void vm_lock_anon_vma(struct mm_struct *mm, struct anon_vma *anon_vma)
{
	if (!test_bit(0, (unsigned long *) &anon_vma->head.next)) {
		/*
		 * The LSB of head.next can't change from under us
		 * because we hold the mm_all_locks_mutex.
		 */
		spin_lock(&anon_vma->lock);
		spin_lock_nest_lock(&anon_vma->lock, &mm->mmap_sem);
		/*
		 * We can safely modify head.next after taking the
		 * anon_vma->lock. If some other vma in this mm shares
@@ -2296,7 +2296,7 @@ static void vm_lock_anon_vma(struct anon_vma *anon_vma)
	}
}

static void vm_lock_mapping(struct address_space *mapping)
static void vm_lock_mapping(struct mm_struct *mm, struct address_space *mapping)
{
	if (!test_bit(AS_MM_ALL_LOCKS, &mapping->flags)) {
		/*
@@ -2310,7 +2310,7 @@ static void vm_lock_mapping(struct address_space *mapping)
		 */
		if (test_and_set_bit(AS_MM_ALL_LOCKS, &mapping->flags))
			BUG();
		spin_lock(&mapping->i_mmap_lock);
		spin_lock_nest_lock(&mapping->i_mmap_lock, &mm->mmap_sem);
	}
}

@@ -2359,9 +2359,9 @@ int mm_take_all_locks(struct mm_struct *mm)
		if (signal_pending(current))
			goto out_unlock;
		if (vma->anon_vma)
			vm_lock_anon_vma(vma->anon_vma);
			vm_lock_anon_vma(mm, vma->anon_vma);
		if (vma->vm_file && vma->vm_file->f_mapping)
			vm_lock_mapping(vma->vm_file->f_mapping);
			vm_lock_mapping(mm, vma->vm_file->f_mapping);
	}
	ret = 0;