xfs
[Top] [All Lists]

Re: [PATCH v3] xfs_quota: modify commands which can't handle multiple ty

To: xfs@xxxxxxxxxxx
Subject: Re: [PATCH v3] xfs_quota: modify commands which can't handle multiple types
From: Eric Sandeen <sandeen@xxxxxxxxxxx>
Date: Mon, 15 Feb 2016 18:12:50 -0600
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1455554759-29213-1-git-send-email-zlang@xxxxxxxxxx>
References: <1455554759-29213-1-git-send-email-zlang@xxxxxxxxxx>
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:38.0) Gecko/20100101 Thunderbird/38.5.1
On 2/15/16 10:45 AM, Zorro Lang wrote:
> 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@xxxxxxxxxx>

Reviewed-by: Eric Sandeen <sandeen@xxxxxxxxxx>

> ---
>  man/man8/xfs_quota.8 | 14 ++++++------
>  quota/edit.c         | 60 
> ++++++++++++++++++++++++++++++++++------------------
>  quota/quot.c         | 15 ++++++++-----
>  quota/quota.c        | 15 ++++++++-----
>  quota/report.c       | 20 ++++++++++++------
>  5 files changed, 81 insertions(+), 43 deletions(-)
> 
> diff --git a/man/man8/xfs_quota.8 b/man/man8/xfs_quota.8
> index 3bee145..951252b 100644
> --- a/man/man8/xfs_quota.8
> +++ b/man/man8/xfs_quota.8
> @@ -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
>  ] [
> diff --git a/quota/edit.c b/quota/edit.c
> index 6146f7e..e5ddc8c 100644
> --- a/quota/edit.c
> +++ b/quota/edit.c
> @@ -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;
>  
> diff --git a/quota/quot.c b/quota/quot.c
> index 9116e48..2e583e5 100644
> --- a/quota/quot.c
> +++ b/quota/quot.c
> @@ -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;
>  
> diff --git a/quota/quota.c b/quota/quota.c
> index f6b24c3..e0da7c0 100644
> --- a/quota/quota.c
> +++ b/quota/quota.c
> @@ -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;
>  
> diff --git a/quota/report.c b/quota/report.c
> index 8653134..48a3f29 100644
> --- a/quota/report.c
> +++ b/quota/report.c
> @@ -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;
>  
> 

<Prev in Thread] Current Thread [Next in Thread>