]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_quota: modify commands which can't handle multiple types
authorZorro Lang <zlang@redhat.com>
Sun, 28 Feb 2016 23:45:53 +0000 (10:45 +1100)
committerDave Chinner <david@fromorbit.com>
Sun, 28 Feb 2016 23:45:53 +0000 (10:45 +1100)
Some xfs_quota commands can't deal with multiple types together.
For example, if we run "limit -ug ...", one type will overwrite
the other. I find below commands can't handle multiple types:

  [quota, limit, timer, warn, dump, restore and quot]

(Although timer and warn command can't support -ugp types until
now, it will in one day.)

For every single $command, I change their ${command}_f function,
${command}_cmd structure and man page.

Signed-off-by: Zorro Lang <zlang@redhat.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
man/man8/xfs_quota.8
quota/edit.c
quota/quot.c
quota/quota.c
quota/report.c

index 3bee14508e0334d37d3d86d6449e116a28d60ec6..951252bf5b686673bb3a8cd1bf806f1df1bd6a0d 100644 (file)
@@ -169,7 +169,7 @@ command.
 .HP
 .B quota
 [
-.B \-gpu
+.BR \-g " | " \-p " | " \-u
 ] [
 .B \-bir
 ] [
@@ -398,7 +398,7 @@ option reports state on all filesystems and not just the current path.
 .B
 limit
 [
-.B \-gpu
+.BR \-g " | " \-p " | " \-u
 ]
 .BI bsoft= N
 |
@@ -430,7 +430,7 @@ must be specified.
 .HP
 .B timer
 [
-.B \-gpu
+.BR \-g " | " \-p " | " \-u
 ] [
 .B \-bir
 ]
@@ -446,7 +446,7 @@ command. The value argument is a number of seconds, but units of
 .HP
 .B warn
 [
-.B \-gpu
+.BR \-g " | " \-p " | " \-u
 ] [
 .B \-bir
 ]
@@ -497,7 +497,7 @@ report an error.
 .B
 dump
 [
-.B \-gpu
+.BR \-g " | " \-p " | " \-u
 ] [
 .B \-f
 .I file
@@ -510,7 +510,7 @@ This is only the limits, not the usage information, of course.
 .HP
 .B restore
 [
-.B \-gpu
+.BR \-g " | " \-p " | " \-u
 ] [
 .B \-f
 .I file
@@ -525,7 +525,7 @@ command.
 .B
 quot
 [
-.B \-gpu
+.BR \-g " | " \-p " | " \-u
 ] [
 .B \-bir
 ] [
index 6146f7ef41c3fa645eff01a3382af72d921f5a45..e5ddc8ce0c55f77972517de91bfc65d9d17aaf19 100644 (file)
@@ -282,13 +282,13 @@ limit_f(
                        flags |= DEFAULTS_FLAG;
                        break;
                case 'g':
-                       type = XFS_GROUP_QUOTA;
+                       type |= XFS_GROUP_QUOTA;
                        break;
                case 'p':
-                       type = XFS_PROJ_QUOTA;
+                       type |= XFS_PROJ_QUOTA;
                        break;
                case 'u':
-                       type = XFS_USER_QUOTA;
+                       type |= XFS_USER_QUOTA;
                        break;
                default:
                        return command_usage(&limit_cmd);
@@ -343,8 +343,13 @@ limit_f(
 
        name = (flags & DEFAULTS_FLAG) ? "0" : argv[optind++];
 
-       if (!type)
+       if (!type) {
                type = XFS_USER_QUOTA;
+       } else if (type != XFS_GROUP_QUOTA &&
+                  type != XFS_PROJ_QUOTA &&
+                  type != XFS_USER_QUOTA) {
+               return command_usage(&limit_cmd);
+       }
 
        switch (type) {
        case XFS_USER_QUOTA:
@@ -422,13 +427,13 @@ restore_f(
                        fname = optarg;
                        break;
                case 'g':
-                       type = XFS_GROUP_QUOTA;
+                       type |= XFS_GROUP_QUOTA;
                        break;
                case 'p':
-                       type = XFS_PROJ_QUOTA;
+                       type |= XFS_PROJ_QUOTA;
                        break;
                case 'u':
-                       type = XFS_USER_QUOTA;
+                       type |= XFS_USER_QUOTA;
                        break;
                default:
                        return command_usage(&restore_cmd);
@@ -438,8 +443,13 @@ restore_f(
        if (argc < optind)
                return command_usage(&restore_cmd);
 
-       if (!type)
+       if (!type) {
                type = XFS_USER_QUOTA;
+       } else if (type != XFS_GROUP_QUOTA &&
+                  type != XFS_PROJ_QUOTA &&
+                  type != XFS_USER_QUOTA) {
+               return command_usage(&restore_cmd);
+       }
 
        if (fname) {
                if ((fp = fopen(fname, "r")) == NULL) {
@@ -501,13 +511,13 @@ timer_f(
                        mask |= FS_DQ_RTBTIMER;
                        break;
                case 'g':
-                       type = XFS_GROUP_QUOTA;
+                       type |= XFS_GROUP_QUOTA;
                        break;
                case 'p':
-                       type = XFS_PROJ_QUOTA;
+                       type |= XFS_PROJ_QUOTA;
                        break;
                case 'u':
-                       type = XFS_USER_QUOTA;
+                       type |= XFS_USER_QUOTA;
                        break;
                default:
                        return command_usage(&timer_cmd);
@@ -522,8 +532,13 @@ timer_f(
        if (!mask)
                mask = FS_DQ_TIMER_MASK;
 
-       if (!type)
+       if (!type) {
                type = XFS_USER_QUOTA;
+       } else if (type != XFS_GROUP_QUOTA &&
+                  type != XFS_PROJ_QUOTA &&
+                  type != XFS_USER_QUOTA) {
+               return command_usage(&timer_cmd);
+       }
 
        set_timer(type, mask, fs_path->fs_name, value);
        return 0;
@@ -630,13 +645,13 @@ warn_f(
                        mask |= FS_DQ_RTBWARNS;
                        break;
                case 'g':
-                       type = XFS_GROUP_QUOTA;
+                       type |= XFS_GROUP_QUOTA;
                        break;
                case 'p':
-                       type = XFS_PROJ_QUOTA;
+                       type |= XFS_PROJ_QUOTA;
                        break;
                case 'u':
-                       type = XFS_USER_QUOTA;
+                       type |= XFS_USER_QUOTA;
                        break;
                default:
                        return command_usage(&warn_cmd);
@@ -661,8 +676,13 @@ warn_f(
        if (!mask)
                mask = FS_DQ_WARNS_MASK;
 
-       if (!type)
+       if (!type) {
                type = XFS_USER_QUOTA;
+       } else if (type != XFS_GROUP_QUOTA &&
+                  type != XFS_PROJ_QUOTA &&
+                  type != XFS_USER_QUOTA) {
+               return command_usage(&warn_cmd);
+       }
 
        switch (type) {
        case XFS_USER_QUOTA:
@@ -686,7 +706,7 @@ edit_init(void)
        limit_cmd.argmin = 2;
        limit_cmd.argmax = -1;
        limit_cmd.args = \
-       _("[-gpu] bsoft|bhard|isoft|ihard|rtbsoft|rtbhard=N -d|id|name");
+       _("[-g|-p|-u] bsoft|bhard|isoft|ihard|rtbsoft|rtbhard=N -d|id|name");
        limit_cmd.oneline = _("modify quota limits");
        limit_cmd.help = limit_help;
 
@@ -694,14 +714,14 @@ edit_init(void)
        restore_cmd.cfunc = restore_f;
        restore_cmd.argmin = 0;
        restore_cmd.argmax = -1;
-       restore_cmd.args = _("[-gpu] [-f file]");
+       restore_cmd.args = _("[-g|-p|-u] [-f file]");
        restore_cmd.oneline = _("restore quota limits from a backup file");
 
        timer_cmd.name = "timer";
        timer_cmd.cfunc = timer_f;
        timer_cmd.argmin = 2;
        timer_cmd.argmax = -1;
-       timer_cmd.args = _("[-bir] [-gpu] value");
+       timer_cmd.args = _("[-bir] [-g|-p|-u] value");
        timer_cmd.oneline = _("set quota enforcement timeouts");
        timer_cmd.help = timer_help;
 
@@ -709,7 +729,7 @@ edit_init(void)
        warn_cmd.cfunc = warn_f;
        warn_cmd.argmin = 2;
        warn_cmd.argmax = -1;
-       warn_cmd.args = _("[-bir] [-gpu] value -d|id|name");
+       warn_cmd.args = _("[-bir] [-g|-p|-u] value -d|id|name");
        warn_cmd.oneline = _("get/set enforcement warning counter");
        warn_cmd.help = warn_help;
 
index 9116e4812c3b3d5aa2dc1da928ee687f0adf5b37..2e583e555061da9d9c81df82e179c9daeb5334b9 100644 (file)
@@ -361,13 +361,13 @@ quot_f(
                        form |= XFS_RTBLOCK_QUOTA;
                        break;
                case 'g':
-                       type = XFS_GROUP_QUOTA;
+                       type |= XFS_GROUP_QUOTA;
                        break;
                case 'p':
-                       type = XFS_PROJ_QUOTA;
+                       type |= XFS_PROJ_QUOTA;
                        break;
                case 'u':
-                       type = XFS_USER_QUOTA;
+                       type |= XFS_USER_QUOTA;
                        break;
                case 'a':
                        flags |= ALL_MOUNTS_FLAG;
@@ -389,8 +389,13 @@ quot_f(
        if (!form)
                form = XFS_BLOCK_QUOTA;
 
-       if (!type)
+       if (!type) {
                type = XFS_USER_QUOTA;
+       } else if (type != XFS_GROUP_QUOTA &&
+                  type != XFS_PROJ_QUOTA &&
+                  type != XFS_USER_QUOTA) {
+               return command_usage(&quot_cmd);
+       }
 
        if ((fp = fopen_write_secure(fname)) == NULL)
                return 0;
@@ -416,7 +421,7 @@ quot_init(void)
        quot_cmd.cfunc = quot_f;
        quot_cmd.argmin = 0;
        quot_cmd.argmax = -1;
-       quot_cmd.args = _("[-bir] [-gpu] [-acv] [-f file]");
+       quot_cmd.args = _("[-bir] [-g|-p|-u] [-acv] [-f file]");
        quot_cmd.oneline = _("summarize filesystem ownership");
        quot_cmd.help = quot_help;
 
index f6b24c35c48189164cc8731c97fee9b3598acc5f..e0da7c0ba246d4f11195dcf986bfe157713cf4d9 100644 (file)
@@ -409,13 +409,13 @@ quota_f(
                        form |= XFS_RTBLOCK_QUOTA;
                        break;
                case 'g':
-                       type = XFS_GROUP_QUOTA;
+                       type |= XFS_GROUP_QUOTA;
                        break;
                case 'p':
-                       type = XFS_PROJ_QUOTA;
+                       type |= XFS_PROJ_QUOTA;
                        break;
                case 'u':
-                       type = XFS_USER_QUOTA;
+                       type |= XFS_USER_QUOTA;
                        break;
                case 'h':
                        flags |= HUMAN_FLAG;
@@ -437,8 +437,13 @@ quota_f(
        if (!form)
                form = XFS_BLOCK_QUOTA;
 
-       if (!type)
+       if (!type) {
                type = XFS_USER_QUOTA;
+       } else if (type != XFS_GROUP_QUOTA &&
+                  type != XFS_PROJ_QUOTA &&
+                  type != XFS_USER_QUOTA) {
+               return command_usage(&quota_cmd);
+       }
 
        if ((fp = fopen_write_secure(fname)) == NULL)
                return 0;
@@ -461,7 +466,7 @@ quota_init(void)
        quota_cmd.cfunc = quota_f;
        quota_cmd.argmin = 0;
        quota_cmd.argmax = -1;
-       quota_cmd.args = _("[-bir] [-gpu] [-hnNv] [-f file] [id|name]...");
+       quota_cmd.args = _("[-bir] [-g|-p|-u] [-hnNv] [-f file] [id|name]...");
        quota_cmd.oneline = _("show usage and limits");
        quota_cmd.help = quota_help;
 
index 8653134ed6d0a188f19334bf22591d955843a187..48a3f2913476def70090a9842905cd75c26abf37 100644 (file)
@@ -30,7 +30,7 @@ static cmdinfo_t report_cmd;
 static void
 dump_help(void)
 {
-       dump_cmd.args = _("[-gpu] [-f file]");
+       dump_cmd.args = _("[-g|-p|-u] [-f file]");
        dump_cmd.oneline = _("dump quota information for backup utilities");
        printf(_(
 "\n"
@@ -199,7 +199,7 @@ dump_f(
        FILE            *fp;
        char            *fname = NULL;
        uint            lower = 0, upper = 0;
-       int             c, type = XFS_USER_QUOTA;
+       int             c, type = 0;
 
        while ((c = getopt(argc, argv, "f:gpuL:U:")) != EOF) {
                switch(c) {
@@ -207,13 +207,13 @@ dump_f(
                        fname = optarg;
                        break;
                case 'g':
-                       type = XFS_GROUP_QUOTA;
+                       type |= XFS_GROUP_QUOTA;
                        break;
                case 'p':
-                       type = XFS_PROJ_QUOTA;
+                       type |= XFS_PROJ_QUOTA;
                        break;
                case 'u':
-                       type = XFS_USER_QUOTA;
+                       type |= XFS_USER_QUOTA;
                        break;
                case 'L':
                        lower = (uint)atoi(optarg);
@@ -229,6 +229,14 @@ dump_f(
        if (argc != optind)
                return command_usage(&dump_cmd);
 
+       if (!type) {
+               type = XFS_USER_QUOTA;
+       } else if (type != XFS_GROUP_QUOTA &&
+                  type != XFS_PROJ_QUOTA &&
+                  type != XFS_USER_QUOTA) {
+               return command_usage(&dump_cmd);
+       }
+
        if ((fp = fopen_write_secure(fname)) == NULL)
                return 0;
 
@@ -725,7 +733,7 @@ report_init(void)
        dump_cmd.cfunc = dump_f;
        dump_cmd.argmin = 0;
        dump_cmd.argmax = -1;
-       dump_cmd.args = _("[-gpu] [-f file]");
+       dump_cmd.args = _("[-g|-p|-u] [-f file]");
        dump_cmd.oneline = _("dump quota information for backup utilities");
        dump_cmd.help = dump_help;