summaryrefslogtreecommitdiffstats
path: root/fs/sync.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2010-02-16 03:44:52 -0500
committerJan Kara <jack@suse.cz>2010-03-05 00:20:24 +0100
commit5fb324ad24febe57a8a2e62903dcb7bad546ea71 (patch)
treef49d1b8b7fe9feffbdd1afba18047001f5d7228f /fs/sync.c
parent8c4e4acd660a09e571a71583b5bbe1eee700c9ad (diff)
downloadlinux-5fb324ad24febe57a8a2e62903dcb7bad546ea71.tar.gz
linux-5fb324ad24febe57a8a2e62903dcb7bad546ea71.tar.bz2
linux-5fb324ad24febe57a8a2e62903dcb7bad546ea71.zip
quota: move code from sync_quota_sb into vfs_quota_sync
Currenly sync_quota_sb does a lot of sync and truncate action that only applies to "VFS" style quotas and is actively harmful for the sync performance in XFS. Move it into vfs_quota_sync and add a wait parameter to ->quota_sync to tell if we need it or not. My audit of the GFS2 code says it's also not needed given the way GFS2 implements quotas, but I'd be happy if this can get a detailed review. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/sync.c')
-rw-r--r--fs/sync.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/fs/sync.c b/fs/sync.c
index 418727a2a239..f557d71cb097 100644
--- a/fs/sync.c
+++ b/fs/sync.c
@@ -34,14 +34,14 @@ static int __sync_filesystem(struct super_block *sb, int wait)
if (!sb->s_bdi)
return 0;
- /* Avoid doing twice syncing and cache pruning for quota sync */
- if (!wait) {
- writeout_quota_sb(sb, -1);
- writeback_inodes_sb(sb);
- } else {
- sync_quota_sb(sb, -1);
+ if (sb->s_qcop && sb->s_qcop->quota_sync)
+ sb->s_qcop->quota_sync(sb, -1, wait);
+
+ if (wait)
sync_inodes_sb(sb);
- }
+ else
+ writeback_inodes_sb(sb);
+
if (sb->s_op->sync_fs)
sb->s_op->sync_fs(sb, wait);
return __sync_blockdev(sb->s_bdev, wait);