On 2.03.2018 20:46, je...@suse.com wrote:
> From: Jeff Mahoney
>
> This patch adds a new -W option to wait for a rescan without starting a
> new operation. This is useful for things like xfstests where we want
> do to do a "btrfs quota enable" and not continue until the subsequent
> rescan has finished.
>
> In addition to documenting the new option in the man page, I've cleaned
> up the rescan entry to document the -w option a bit better.
>
> Signed-off-by: Jeff Mahoney
> ---
> Documentation/btrfs-quota.asciidoc | 10 +++---
> cmds-quota.c | 21 +++--
> 2 files changed, 22 insertions(+), 9 deletions(-)
>
> diff --git a/Documentation/btrfs-quota.asciidoc
> b/Documentation/btrfs-quota.asciidoc
> index 85ebf729..0b64a69b 100644
> --- a/Documentation/btrfs-quota.asciidoc
> +++ b/Documentation/btrfs-quota.asciidoc
> @@ -238,15 +238,19 @@ Disable subvolume quota support for a filesystem.
> *enable* ::
> Enable subvolume quota support for a filesystem.
>
> -*rescan* [-s] ::
> +*rescan* [-s|-w|-W] ::
> Trash all qgroup numbers and scan the metadata again with the current config.
> +
> `Options`
> +
> -s
> -show status of a running rescan operation.
> +Show status of a running rescan operation.
> +
> -w
> -wait for rescan operation to finish(can be already in progress).
> +Start rescan operation and wait until it has finished before exiting. If a
> rescan is already running, wait until it finishes and then exit without
> starting a new one.
> +
> +-W
> +Wait for rescan operation to finish and then exit. If a rescan is not
> already running, exit silently.
>
> EXIT STATUS
> ---
> diff --git a/cmds-quota.c b/cmds-quota.c
> index 745889d1..fe6376ac 100644
> --- a/cmds-quota.c
> +++ b/cmds-quota.c
> @@ -120,14 +120,20 @@ static int cmd_quota_rescan(int argc, char **argv)
> int wait_for_completion = 0;
>
> while (1) {
> - int c = getopt(argc, argv, "sw");
> + int c = getopt(argc, argv, "swW");
> if (c < 0)
> break;
> switch (c) {
> case 's':
> ioctlnum = BTRFS_IOC_QUOTA_RESCAN_STATUS;
> break;
> + case 'W':
> + ioctlnum = 0;
> + wait_for_completion = 1;
> + break;
> case 'w':
> + /* Reset it in case the user did both -W and -w */
> + ioctlnum = BTRFS_IOC_QUOTA_RESCAN;
> wait_for_completion = 1;
> break;
> default:
> @@ -135,8 +141,9 @@ static int cmd_quota_rescan(int argc, char **argv)
> }
> }
>
> - if (ioctlnum != BTRFS_IOC_QUOTA_RESCAN && wait_for_completion) {
> - error("switch -w cannot be used with -s");
> + if (ioctlnum == BTRFS_IOC_QUOTA_RESCAN_STATUS && wait_for_completion) {
> + error("switch -%c cannot be used with -s",
> + ioctlnum ? 'w' : 'W');
You can't really distinguish between w/W in this context, since ioctlnum
will be RESCAN_STATUS. So just harcode the w/W in the text message itself?
> return 1;
> }
>
> @@ -150,8 +157,10 @@ static int cmd_quota_rescan(int argc, char **argv)
> if (fd < 0)
> return 1;
>
> - ret = ioctl(fd, ioctlnum, &args);
> - e = errno;
> + if (ioctlnum) {
> + ret = ioctl(fd, ioctlnum, &args);
> + e = errno;
> + }
>
> if (ioctlnum == BTRFS_IOC_QUOTA_RESCAN_STATUS) {
> close_file_or_dir(fd, dirstream);
> @@ -167,7 +176,7 @@ static int cmd_quota_rescan(int argc, char **argv)
> return 0;
> }
>
> - if (ret == 0) {
> + if (ioctlnum == BTRFS_IOC_QUOTA_RESCAN && ret == 0) {
> printf("quota rescan started\n");
> fflush(stdout);
> } else if (ret < 0 && (!wait_for_completion || e != EINPROGRESS)) {
>
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html