aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext3
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2012-07-03 10:45:29 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2012-07-22 15:58:34 -0400
commita1177825719ccef3f76ef39bbfd5ebb6087d53c7 (patch)
treeeb7a1137ea6438be224052f17c104cd040a10366 /fs/ext3
parentceed17236a7491b44ee2be21f56a41ab997cbe7d (diff)
quota: Move quota syncing to ->sync_fs method
Since the moment writes to quota files are using block device page cache and space for quota structures is reserved at the moment they are first accessed we have no reason to sync quota before inode writeback. In fact this order is now only harmful since quota information can easily change during inode writeback (either because conversion of delayed-allocated extents or simply because of allocation of new blocks for simple filesystems not using page_mkwrite). So move syncing of quota information after writeback of inodes into ->sync_fs method. This way we do not have to use ->quota_sync callback which is primarily intended for use by quotactl syscall anyway and we get rid of calling ->sync_fs() twice unnecessarily. We skip quota syncing for OCFS2 since it does proper quota journalling in all cases (unlike ext3, ext4, and reiserfs which also support legacy non-journalled quotas) and thus there are no dirty quota structures. CC: "Theodore Ts'o" <tytso@mit.edu> CC: Joel Becker <jlbec@evilplan.org> CC: reiserfs-devel@vger.kernel.org Acked-by: Steven Whitehouse <swhiteho@redhat.com> Acked-by: Dave Kleikamp <shaggy@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/ext3')
-rw-r--r--fs/ext3/super.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/ext3/super.c b/fs/ext3/super.c
index 8c3a44b7c375..4ac304c55c53 100644
--- a/fs/ext3/super.c
+++ b/fs/ext3/super.c
@@ -2526,6 +2526,11 @@ static int ext3_sync_fs(struct super_block *sb, int wait)
2526 tid_t target; 2526 tid_t target;
2527 2527
2528 trace_ext3_sync_fs(sb, wait); 2528 trace_ext3_sync_fs(sb, wait);
2529 /*
2530 * Writeback quota in non-journalled quota case - journalled quota has
2531 * no dirty dquots
2532 */
2533 dquot_writeback_dquots(sb, -1);
2529 if (journal_start_commit(EXT3_SB(sb)->s_journal, &target)) { 2534 if (journal_start_commit(EXT3_SB(sb)->s_journal, &target)) {
2530 if (wait) 2535 if (wait)
2531 log_wait_commit(EXT3_SB(sb)->s_journal, target); 2536 log_wait_commit(EXT3_SB(sb)->s_journal, target);