On Wed, 7 May 2008, Linus Torvalds wrote:

> The code that can take many locks, will have to get the global lock *and* 
> order the types, but that's still trivial. It's something like
> 
>       spin_lock(&global_lock);
>       for (vma = mm->mmap; vma; vma = vma->vm_next) {
>               if (vma->anon_vma)
>                       spin_lock(&vma->anon_vma->lock);
>       }
>       for (vma = mm->mmap; vma; vma = vma->vm_next) {
>               if (!vma->anon_vma && vma->vm_file && vma->vm_file->f_mapping)
>                       spin_lock(&vma->vm_file->f_mapping->i_mmap_lock);
>       }
>       spin_unlock(&global_lock);

Multiple vmas may share the same mapping or refer to the same anonymous 
vma. The above code will deadlock since we may take some locks multiple 
times.
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to