diff options
| author | Frederic Weisbecker <fweisbec@gmail.com> | 2010-01-07 09:55:31 -0500 |
|---|---|---|
| committer | Frederic Weisbecker <fweisbec@gmail.com> | 2010-01-07 10:02:53 -0500 |
| commit | 31370f62baa1460b785cee9944bdcaf63d19e567 (patch) | |
| tree | cc3846f1a623366c61c4f16860f4ed62c68ea03f | |
| parent | e0baec1b63632f25ea8101b76edaca0accc061ec (diff) | |
reiserfs: Relax reiserfs_xattr_set_handle() while acquiring xattr locks
Fix remaining xattr locks acquired in reiserfs_xattr_set_handle()
while we are holding the reiserfs lock to avoid lock inversions.
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Christian Kujau <lists@nerdbynature.de>
Cc: Alexander Beregalov <a.beregalov@gmail.com>
Cc: Chris Mason <chris.mason@oracle.com>
Cc: Ingo Molnar <mingo@elte.hu>
| -rw-r--r-- | fs/reiserfs/xattr.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c index 4899d789ba67..7fee995c25ab 100644 --- a/fs/reiserfs/xattr.c +++ b/fs/reiserfs/xattr.c | |||
| @@ -559,8 +559,12 @@ reiserfs_xattr_set_handle(struct reiserfs_transaction_handle *th, | |||
| 559 | .ia_size = buffer_size, | 559 | .ia_size = buffer_size, |
| 560 | .ia_valid = ATTR_SIZE | ATTR_CTIME, | 560 | .ia_valid = ATTR_SIZE | ATTR_CTIME, |
| 561 | }; | 561 | }; |
| 562 | |||
| 563 | reiserfs_write_unlock(inode->i_sb); | ||
| 562 | mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_XATTR); | 564 | mutex_lock_nested(&dentry->d_inode->i_mutex, I_MUTEX_XATTR); |
| 563 | down_write(&dentry->d_inode->i_alloc_sem); | 565 | down_write(&dentry->d_inode->i_alloc_sem); |
| 566 | reiserfs_write_lock(inode->i_sb); | ||
| 567 | |||
| 564 | err = reiserfs_setattr(dentry, &newattrs); | 568 | err = reiserfs_setattr(dentry, &newattrs); |
| 565 | up_write(&dentry->d_inode->i_alloc_sem); | 569 | up_write(&dentry->d_inode->i_alloc_sem); |
| 566 | mutex_unlock(&dentry->d_inode->i_mutex); | 570 | mutex_unlock(&dentry->d_inode->i_mutex); |
