[XFS] Add a mechanism for XFS to use the generic quota sync method.
authorNathan Scott <nathans@sgi.com>
Thu, 3 Nov 2005 02:53:34 +0000 (13:53 +1100)
committerNathan Scott <nathans@sgi.com>
Thu, 3 Nov 2005 02:53:34 +0000 (13:53 +1100)
This is now used to issue a delayed allocation flush before reporting
quota, which allows the used space quota report to match reality.

Signed-off-by: Nathan Scott <nathans@sgi.com>
fs/quota.c
include/linux/dqblk_xfs.h

index f5d1cff551965ba30fa88d12d50d3a597c9a1245..1df7832b4e087460876251bf7b70d79566264f1a 100644 (file)
@@ -118,6 +118,10 @@ static int xqm_quotactl_valid(struct super_block *sb, int type, int cmd, qid_t i
                        if (!sb->s_qcop->get_xquota)
                                return -ENOSYS;
                        break;
+               case Q_XQUOTASYNC:
+                       if (!sb->s_qcop->quota_sync)
+                               return -ENOSYS;
+                       break;
                default:
                        return -EINVAL;
        }
@@ -128,7 +132,7 @@ static int xqm_quotactl_valid(struct super_block *sb, int type, int cmd, qid_t i
                     (type == XQM_GRPQUOTA && !in_egroup_p(id))) &&
                     !capable(CAP_SYS_ADMIN))
                        return -EPERM;
-       } else if (cmd != Q_XGETQSTAT) {
+       } else if (cmd != Q_XGETQSTAT && cmd != Q_XQUOTASYNC) {
                if (!capable(CAP_SYS_ADMIN))
                        return -EPERM;
        }
@@ -322,6 +326,8 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id, void
                                return -EFAULT;
                        return 0;
                }
+               case Q_XQUOTASYNC:
+                       return sb->s_qcop->quota_sync(sb, type);
                /* We never reach here unless validity check is broken */
                default:
                        BUG();
index 6ad85bbd0d171116afb2c78f2e2608e42f322a21..2fda1b2aabd964416137b337e70695f978458f66 100644 (file)
@@ -37,6 +37,7 @@
 #define Q_XSETQLIM     XQM_CMD(4)      /* set disk limits */
 #define Q_XGETQSTAT    XQM_CMD(5)      /* get quota subsystem status */
 #define Q_XQUOTARM     XQM_CMD(6)      /* free disk space used by dquots */
+#define Q_XQUOTASYNC   XQM_CMD(7)      /* delalloc flush, updates dquots */
 
 /*
  * fs_disk_quota structure: