Commit ae635c0bbd6c10aa62bf5149c6f41add59fbf4d2
1 parent
08f14fc896
kill-the-bkl/reiserfs: fix "reiserfs lock" / "inode mutex" lock inversion dependency
reiserfs_xattr_init is called with the reiserfs write lock held, but if the ".reiserfs_priv" entry is not created, we take the superblock root directory inode mutex until .reiserfs_priv is created. This creates a lock dependency inversion against other sites such as reiserfs_file_release() which takes an inode mutex and the reiserfs lock after. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jeff Mahoney <jeffm@suse.com> Cc: Chris Mason <chris.mason@oracle.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Alexander Beregalov <a.beregalov@gmail.com> Cc: Laurent Riffard <laurent.riffard@free.fr>
Showing 1 changed file with 1 additions and 1 deletions Side-by-side Diff
fs/reiserfs/xattr.c
... | ... | @@ -1004,7 +1004,7 @@ |
1004 | 1004 | goto error; |
1005 | 1005 | |
1006 | 1006 | if (!privroot->d_inode && !(mount_flags & MS_RDONLY)) { |
1007 | - mutex_lock(&s->s_root->d_inode->i_mutex); | |
1007 | + reiserfs_mutex_lock_safe(&s->s_root->d_inode->i_mutex, s); | |
1008 | 1008 | err = create_privroot(REISERFS_SB(s)->priv_root); |
1009 | 1009 | mutex_unlock(&s->s_root->d_inode->i_mutex); |
1010 | 1010 | } |