reiserfs: Don't call reiserfs_get_acl() with the reiserfs lock
authorFrederic Weisbecker <fweisbec@gmail.com>
Thu, 7 Jan 2010 11:57:47 +0000 (12:57 +0100)
committerFrederic Weisbecker <fweisbec@gmail.com>
Thu, 7 Jan 2010 12:46:48 +0000 (13:46 +0100)
reiserfs_get_acl is usually not called under the reiserfs lock,
as it doesn't need it. But it happens when it is called by
reiserfs_acl_chmod(), which creates a dependency inversion against
the private xattr inodes mutexes for the given inode.

We need to call it without the reiserfs lock, especially since
it's unnecessary.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Christian Kujau <lists@nerdbynature.de>
Cc: Alexander Beregalov <a.beregalov@gmail.com>
Cc: Chris Mason <chris.mason@oracle.com>
Cc: Ingo Molnar <mingo@elte.hu>
fs/reiserfs/xattr_acl.c

index 35d6e672a2796f7aaed49b31f96621c25593c51b..f559c9e1efc888cb35527a02ceb267c83be62362 100644 (file)
@@ -452,7 +452,9 @@ int reiserfs_acl_chmod(struct inode *inode)
                return 0;
        }
 
+       reiserfs_write_unlock(inode->i_sb);
        acl = reiserfs_get_acl(inode, ACL_TYPE_ACCESS);
+       reiserfs_write_lock(inode->i_sb);
        if (!acl)
                return 0;
        if (IS_ERR(acl))