Messages in this thread | | | Date | Thu, 7 Aug 2008 14:27:34 +0100 (BST) | From | Hugh Dickins <> | Subject | Re: [RFC][PATCH 9/7] mm: fix mm_take_all_locks() locking order |
| |
On Thu, 7 Aug 2008, Peter Zijlstra wrote: > 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(); > } > > ?
Yes, I would have preferred that.
> > 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.
Yes, I imagined it would be just as problematic for lockep.
Hugh
| |