• Peter Zijlstra's avatar
    lockdep: annotate dir vs file i_mutex · 14358e6d
    Peter Zijlstra authored
    On Mon, 2007-09-24 at 22:13 -0400, Steven Rostedt wrote:
    > The circular lock seems to be this:
    > 
    > #1:
    > 
    >   sys_mmap2:              down_write(&mm->mmap_sem);
    >   nfs_revalidate_mapping: mutex_lock(&inode->i_mutex);
    > 
    > 
    > #0:
    > 
    >   vfs_readdir:     mutex_lock(&inode->i_mutex);
    >    - during the readdir (filldir64), we take a user fault (missing page?)
    >     and call do_page_fault -
    >   do_page_fault:   down_read(&mm->mmap_sem);
    > 
    > 
    > So it does indeed look like a circular locking. Now the question is, "is
    > this a bug?".  Looking like the inode of #1 must be a file or something
    > else that you can mmap and the inode of #0 seems it must be a directory.
    > I would say "no".
    > 
    > Now if you can readdir on a file or mmap a directory, then this could be
    > an issue.
    > 
    > Otherwise, I'd love to see someone teach lockdep about this issue! ;-)
    
    Make a distinction between file and dir usage of i_mutex.
    The inode should be complete and unused at unlock_new_inode(), re-init
    i_mutex depending on its type.
    Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    14358e6d
inode.c 37.9 KB