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)) { |