aboutsummaryrefslogtreecommitdiffstats
path: root/fs/reiserfs/xattr.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/reiserfs/xattr.c')
-rw-r--r--fs/reiserfs/xattr.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c
index c320c7792c75..78a3f246295c 100644
--- a/fs/reiserfs/xattr.c
+++ b/fs/reiserfs/xattr.c
@@ -485,11 +485,16 @@ reiserfs_xattr_set_handle(struct reiserfs_transaction_handle *th,
485 if (!buffer) 485 if (!buffer)
486 return lookup_and_delete_xattr(inode, name); 486 return lookup_and_delete_xattr(inode, name);
487 487
488 reiserfs_write_unlock(inode->i_sb);
488 dentry = xattr_lookup(inode, name, flags); 489 dentry = xattr_lookup(inode, name, flags);
489 if (IS_ERR(dentry)) 490 if (IS_ERR(dentry)) {
491 reiserfs_write_lock(inode->i_sb);
490 return PTR_ERR(dentry); 492 return PTR_ERR(dentry);
493 }
491 494
492 reiserfs_down_read_safe(&REISERFS_I(inode)->i_xattr_sem, inode->i_sb); 495 down_read(&REISERFS_I(inode)->i_xattr_sem);
496
497 reiserfs_write_lock(inode->i_sb);
493 498
494 xahash = xattr_hash(buffer, buffer_size); 499 xahash = xattr_hash(buffer, buffer_size);
495 while (buffer_pos < buffer_size || buffer_pos == 0) { 500 while (buffer_pos < buffer_size || buffer_pos == 0) {