|
@@ -4614,11 +4614,24 @@ static int ext4_quota_on(struct super_block *sb, int type, int format_id,
|
|
|
|
|
|
static int ext4_quota_off(struct super_block *sb, int type)
|
|
|
{
|
|
|
+ struct inode *inode = sb_dqopt(sb)->files[type];
|
|
|
+ handle_t *handle;
|
|
|
+
|
|
|
/* Force all delayed allocation blocks to be allocated.
|
|
|
* Caller already holds s_umount sem */
|
|
|
if (test_opt(sb, DELALLOC))
|
|
|
sync_filesystem(sb);
|
|
|
|
|
|
+ /* Update modification times of quota files when userspace can
|
|
|
+ * start looking at them */
|
|
|
+ handle = ext4_journal_start(inode, 1);
|
|
|
+ if (IS_ERR(handle))
|
|
|
+ goto out;
|
|
|
+ inode->i_mtime = inode->i_ctime = CURRENT_TIME;
|
|
|
+ ext4_mark_inode_dirty(handle, inode);
|
|
|
+ ext4_journal_stop(handle);
|
|
|
+
|
|
|
+out:
|
|
|
return dquot_quota_off(sb, type);
|
|
|
}
|
|
|
|
|
@@ -4714,9 +4727,8 @@ out:
|
|
|
if (inode->i_size < off + len) {
|
|
|
i_size_write(inode, off + len);
|
|
|
EXT4_I(inode)->i_disksize = inode->i_size;
|
|
|
+ ext4_mark_inode_dirty(handle, inode);
|
|
|
}
|
|
|
- inode->i_mtime = inode->i_ctime = CURRENT_TIME;
|
|
|
- ext4_mark_inode_dirty(handle, inode);
|
|
|
mutex_unlock(&inode->i_mutex);
|
|
|
return len;
|
|
|
}
|