lkml.org 
[lkml]   [2012]   [Mar]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: [PATCH] hugetlbfs: lockdep annotate root inode properly
Date
On Thu, 8 Mar 2012 13:40:50 -0800, Andrew Morton <akpm@linux-foundation.org> wrote:
> On Thu, 8 Mar 2012 15:19:27 -0600
> Tyler Hicks <tyhicks@canonical.com> wrote:
>
> > >
> > >
> > > Sigh. Was lockdep_annotate_inode_mutex_key() sufficiently
> > > self-explanatory to justify leaving it undocumented?
> > >
> > > <goes off and reads e096d0c7e2e>
> > >
> > > OK, the patch looks correct given the explanation in e096d0c7e2e, but
> > > I'd like to understand why it becomes necessary only now.
> > >
> > > > NOTE: This patch also require
> > > > http://thread.gmane.org/gmane.linux.file-systems/58795/focus=59565
> > > > to remove the lockdep warning
> > >
> > > And that patch has been basically ignored.
> >
> > Al commented on it here:
> >
> > https://lkml.org/lkml/2012/2/16/518
> >
> > He said that while my patch is correct, taking i_mutex inside mmap_sem
> > is still wrong.
>
> OK, thanks, yup. Taking i_mutex in file_operations.mmap() is wrong.
>
> Is hugetlbfs actually deadlockable because of this, or is it the case
> that the i_mutex->mmap_sem ordering happens to never happen for this
> filesystem? Although we shouldn't go and create incompatible lock
> ranking rules for different filesystems!
>
> So we need to pull the i_mutex out of hugetlbfs_file_mmap(). What's it
> actually trying to do in there? If we switch to
> i_size_read()/i_size_write() then AFAICT the problem comes down to
> hugetlb_reserve_pages().
>
> hugetlb_reserve_pages() fiddles with i_mapping->private_list and the fs
> owns private_list and is free to use a lock other than i_mutex to
> protect it. (In fact i_mapping.private_lock is the usual lock for
> private_list).
>
>
>
> So from a quick scan here I'm thinking that a decent fix is to remove
> the i_mutex locking from hugetlbfs_file_mmap(), switch
> hugetlbfs_file_mmap() to i_size_read/write then use a hugetlb-private
> lock to protect i_mapping->private_list. region_chg() will do
> GFP_KERNEL allocations under that lock, so some care is needed.
>

But as per 7762f5a0b709b415fda132258ad37b9f2a1db994 i_size_write should
always happen with i_mutex held

-aneesh



\
 
 \ /
  Last update: 2012-03-09 06:05    [W:0.056 / U:0.068 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site