aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/reiserfs/xattr.c3
-rw-r--r--include/linux/reiserfs_fs.h9
2 files changed, 11 insertions, 1 deletions
diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c
index 58aa8e75f7f5..8891cd88a3f4 100644
--- a/fs/reiserfs/xattr.c
+++ b/fs/reiserfs/xattr.c
@@ -243,7 +243,8 @@ static int reiserfs_for_each_xattr(struct inode *inode,
243 goto out_dir; 243 goto out_dir;
244 } 244 }
245 245
246 mutex_lock_nested(&dir->d_inode->i_mutex, I_MUTEX_XATTR); 246 reiserfs_mutex_lock_nested_safe(&dir->d_inode->i_mutex, I_MUTEX_XATTR,
247 inode->i_sb);
247 buf.xadir = dir; 248 buf.xadir = dir;
248 err = reiserfs_readdir_dentry(dir, &buf, fill_with_dentries, &pos); 249 err = reiserfs_readdir_dentry(dir, &buf, fill_with_dentries, &pos);
249 while ((err == 0 || err == -ENOSPC) && buf.count) { 250 while ((err == 0 || err == -ENOSPC) && buf.count) {
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h
index a05b4a20768d..4351b49e2b1e 100644
--- a/include/linux/reiserfs_fs.h
+++ b/include/linux/reiserfs_fs.h
@@ -97,6 +97,15 @@ static inline void reiserfs_mutex_lock_safe(struct mutex *m,
97 reiserfs_write_lock(s); 97 reiserfs_write_lock(s);
98} 98}
99 99
100static inline void
101reiserfs_mutex_lock_nested_safe(struct mutex *m, unsigned int subclass,
102 struct super_block *s)
103{
104 reiserfs_write_unlock(s);
105 mutex_lock_nested(m, subclass);
106 reiserfs_write_lock(s);
107}
108
100/* 109/*
101 * When we schedule, we usually want to also release the write lock, 110 * When we schedule, we usually want to also release the write lock,
102 * according to the previous bkl based locking scheme of reiserfs. 111 * according to the previous bkl based locking scheme of reiserfs.