NOTE: this got fixed by kernel change in 3.4 making sync a no-op operation. In 2005 commit master-melb:xfs-cmds:23840a from Nathan added calls to XFS_QSYNC/Q_XQUOTASYNC to xfs_quota, with the following rather sparse description: "Issue a quote sync before reporting quota, resolving issue with delayed allocation." I can't really see a reason for this - we do quota accounting by the time we reserve space for the delayed allocation, and while converting the reservations might change the quota accounting minimally due to the amount of btree blocks used for the bmap btree on large files in generally this makes little sense, and on today's large system has a large performance impact. Also only xfs_quota ever did these calls, the generic quota tool never did any kind of sync, and of course removing it does not cause any regressions in xfstests. Nathan, I've cced you in case you still remember anything about this, although it's fairly unlikely after 6.5 years. Also if anyone at SGI can find anything about the above commits in BugWorks additional feedback would be welcome. Signed-off-by: Christoph Hellwig Index: xfsprogs-dev/quota/free.c =================================================================== --- xfsprogs-dev.orig/quota/free.c 2012-01-27 11:10:34.000000000 +0000 +++ xfsprogs-dev/quota/free.c 2012-01-27 11:10:42.000000000 +0000 @@ -167,7 +167,6 @@ projects_free_space_data( return 0; } - xfsquotactl(XFS_QSYNC, dev, type, fsx.fsx_projid, NULL); if (xfsquotactl(XFS_GETQUOTA, dev, type, fsx.fsx_projid, &d) < 0) { perror("XFS_GETQUOTA"); close(fd); Index: xfsprogs-dev/quota/irix.c =================================================================== --- xfsprogs-dev.orig/quota/irix.c 2012-01-27 11:10:52.000000000 +0000 +++ xfsprogs-dev/quota/irix.c 2012-01-27 11:10:59.000000000 +0000 @@ -45,8 +45,6 @@ xcommand_to_qcommand( return Q_XGETQSTAT; case XFS_QUOTARM: return Q_XQUOTARM; - case XFS_QSYNC: - return Q_SYNC; } return 0; } Index: xfsprogs-dev/quota/linux.c =================================================================== --- xfsprogs-dev.orig/quota/linux.c 2012-01-27 11:11:02.000000000 +0000 +++ xfsprogs-dev/quota/linux.c 2012-01-27 11:11:05.000000000 +0000 @@ -55,8 +55,6 @@ xcommand_to_qcommand( return Q_XGETQSTAT; case XFS_QUOTARM: return Q_XQUOTARM; - case XFS_QSYNC: - return Q_XQUOTASYNC; } return 0; } Index: xfsprogs-dev/quota/quota.c =================================================================== --- xfsprogs-dev.orig/quota/quota.c 2012-01-27 11:10:24.000000000 +0000 +++ xfsprogs-dev/quota/quota.c 2012-01-27 11:10:29.000000000 +0000 @@ -64,7 +64,6 @@ quota_mount( uint qflags; int count; - xfsquotactl(XFS_QSYNC, dev, type, 0, NULL); if (xfsquotactl(XFS_GETQUOTA, dev, type, id, (void *)&d) < 0) return 0; Index: xfsprogs-dev/quota/quota.h =================================================================== --- xfsprogs-dev.orig/quota/quota.h 2012-01-27 11:11:10.000000000 +0000 +++ xfsprogs-dev/quota/quota.h 2012-01-27 11:11:20.000000000 +0000 @@ -41,7 +41,6 @@ enum { XFS_SETQLIM, /* set disk limits */ XFS_GETQSTAT, /* get quota subsystem status */ XFS_QUOTARM, /* free disk space used by dquots */ - XFS_QSYNC, /* flush delayed allocate space */ }; /* Index: xfsprogs-dev/quota/report.c =================================================================== --- xfsprogs-dev.orig/quota/report.c 2012-01-27 11:09:41.000000000 +0000 +++ xfsprogs-dev/quota/report.c 2012-01-27 11:10:19.000000000 +0000 @@ -520,10 +520,6 @@ report_any_type( if (type & XFS_USER_QUOTA) { fs_cursor_initialise(dir, FS_MOUNT_POINT, &cursor); while ((mount = fs_cursor_next_entry(&cursor))) { - if (xfsquotactl(XFS_QSYNC, mount->fs_name, - XFS_USER_QUOTA, 0, NULL) < 0 - && errno != ENOENT && errno != ENOSYS) - perror("XFS_QSYNC user quota"); report_user_mount(fp, form, mount, lower, upper, flags); } @@ -531,10 +527,6 @@ report_any_type( if (type & XFS_GROUP_QUOTA) { fs_cursor_initialise(dir, FS_MOUNT_POINT, &cursor); while ((mount = fs_cursor_next_entry(&cursor))) { - if (xfsquotactl(XFS_QSYNC, mount->fs_name, - XFS_GROUP_QUOTA, 0, NULL) < 0 - && errno != ENOENT && errno != ENOSYS) - perror("XFS_QSYNC group quota"); report_group_mount(fp, form, mount, lower, upper, flags); } @@ -542,10 +534,6 @@ report_any_type( if (type & XFS_PROJ_QUOTA) { fs_cursor_initialise(dir, FS_MOUNT_POINT, &cursor); while ((mount = fs_cursor_next_entry(&cursor))) { - if (xfsquotactl(XFS_QSYNC, mount->fs_name, - XFS_PROJ_QUOTA, 0, NULL) < 0 - && errno != ENOENT && errno != ENOSYS) - perror("XFS_QSYNC proj quota"); report_project_mount(fp, form, mount, lower, upper, flags); }