reiserfs: Relax lock before open xattr dir in reiserfs_xattr_set_handle()
[deliverable/linux.git] / fs / reiserfs / xattr.c
index c320c7792c7578b6e534f395fec8c37b13380753..78a3f246295c04541db0589c1eba4c2aea88f6ed 100644 (file)
@@ -485,11 +485,16 @@ reiserfs_xattr_set_handle(struct reiserfs_transaction_handle *th,
        if (!buffer)
                return lookup_and_delete_xattr(inode, name);
 
+       reiserfs_write_unlock(inode->i_sb);
        dentry = xattr_lookup(inode, name, flags);
-       if (IS_ERR(dentry))
+       if (IS_ERR(dentry)) {
+               reiserfs_write_lock(inode->i_sb);
                return PTR_ERR(dentry);
+       }
 
-       reiserfs_down_read_safe(&REISERFS_I(inode)->i_xattr_sem, inode->i_sb);
+       down_read(&REISERFS_I(inode)->i_xattr_sem);
+
+       reiserfs_write_lock(inode->i_sb);
 
        xahash = xattr_hash(buffer, buffer_size);
        while (buffer_pos < buffer_size || buffer_pos == 0) {
This page took 0.024156 seconds and 5 git commands to generate.