aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/reiserfs/xattr.c2
-rw-r--r--include/linux/reiserfs_fs.h8
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
109static inline void
110reiserfs_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.