diff options
-rw-r--r-- | fs/reiserfs/xattr.c | 9 |
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) { |