diff options
| -rw-r--r-- | fs/reiserfs/inode.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index 47dbfb18877a..c876341ea738 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c | |||
| @@ -3140,8 +3140,17 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr) | |||
| 3140 | journal_end(&th, inode->i_sb, jbegin_count); | 3140 | journal_end(&th, inode->i_sb, jbegin_count); |
| 3141 | } | 3141 | } |
| 3142 | } | 3142 | } |
| 3143 | if (!error) | 3143 | if (!error) { |
| 3144 | /* | ||
| 3145 | * Relax the lock here, as it might truncate the | ||
| 3146 | * inode pages and wait for inode pages locks. | ||
| 3147 | * To release such page lock, the owner needs the | ||
| 3148 | * reiserfs lock | ||
| 3149 | */ | ||
| 3150 | reiserfs_write_unlock_once(inode->i_sb, depth); | ||
| 3144 | error = inode_setattr(inode, attr); | 3151 | error = inode_setattr(inode, attr); |
| 3152 | depth = reiserfs_write_lock_once(inode->i_sb); | ||
| 3153 | } | ||
| 3145 | } | 3154 | } |
| 3146 | 3155 | ||
| 3147 | if (!error && reiserfs_posixacl(inode->i_sb)) { | 3156 | if (!error && reiserfs_posixacl(inode->i_sb)) { |
