diff options
-rw-r--r-- | fs/reiserfs/xattr.c | 2 | ||||
-rw-r--r-- | include/linux/reiserfs_fs.h | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c index 8891cd88a3f4..a0e2e7acdc75 100644 --- a/fs/reiserfs/xattr.c +++ b/fs/reiserfs/xattr.c | |||
@@ -484,7 +484,7 @@ reiserfs_xattr_set_handle(struct reiserfs_transaction_handle *th, | |||
484 | if (IS_ERR(dentry)) | 484 | if (IS_ERR(dentry)) |
485 | return PTR_ERR(dentry); | 485 | return PTR_ERR(dentry); |
486 | 486 | ||
487 | down_write(&REISERFS_I(inode)->i_xattr_sem); | 487 | reiserfs_down_read_safe(&REISERFS_I(inode)->i_xattr_sem, inode->i_sb); |
488 | 488 | ||
489 | xahash = xattr_hash(buffer, buffer_size); | 489 | xahash = xattr_hash(buffer, buffer_size); |
490 | while (buffer_pos < buffer_size || buffer_pos == 0) { | 490 | while (buffer_pos < buffer_size || buffer_pos == 0) { |
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h index 4351b49e2b1e..35d3f459b0ac 100644 --- a/include/linux/reiserfs_fs.h +++ b/include/linux/reiserfs_fs.h | |||
@@ -106,6 +106,14 @@ reiserfs_mutex_lock_nested_safe(struct mutex *m, unsigned int subclass, | |||
106 | reiserfs_write_lock(s); | 106 | reiserfs_write_lock(s); |
107 | } | 107 | } |
108 | 108 | ||
109 | static inline void | ||
110 | reiserfs_down_read_safe(struct rw_semaphore *sem, struct super_block *s) | ||
111 | { | ||
112 | reiserfs_write_unlock(s); | ||
113 | down_read(sem); | ||
114 | reiserfs_write_lock(s); | ||
115 | } | ||
116 | |||
109 | /* | 117 | /* |
110 | * When we schedule, we usually want to also release the write lock, | 118 | * When we schedule, we usually want to also release the write lock, |
111 | * according to the previous bkl based locking scheme of reiserfs. | 119 | * according to the previous bkl based locking scheme of reiserfs. |