Re: [RFC][PATCH 9/7] mm: fix mm_take_all_locks() locking order

Peter Zijlstra
2008-08-07T12:41:51Z

On Thu, 2008-08-07 at 13:14 +0100, Hugh Dickins wrote:
> On Thu, 7 Aug 2008, Peter Zijlstra wrote:
> >
> > Which the locking hierarchy in mm/rmap.c confirms as 'valid'.
> >
> > Although I don't think there are any users of these two locks that don't
> > hold the mmap_sem, therefore the nesting is strictly ok, but since we
> > already have an established order, we might as well respect it.
>
> Yes, I agree.
>
> > Fix this by first taking all the mapping->i_mmap_lock instances and then
> > take all anon_vma->lock instances.
>
> Okay. I'd have preferred taking anon_vma lock after i_mmap_lock
> each time around the loop, but imagine that's just as problematic
> for lockdep as the original.

I'm a little confused as to what you mean here, are you suggesting:

for_each_vma() {
if (file)
vm_lock_mapping();
if (anon)
vm_lock_anon();
}

?

That can still create the inverse lock order due to each vma being only
of a single type, and therefore the lock order is set by the vma order,
which can be anything.