On 2.03.2018 20:46, je...@suse.com wrote: > From: Jeff Mahoney <je...@suse.com> > > 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 <je...@suse.com> > --- > 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* <path>:: > Enable subvolume quota support for a filesystem. > > -*rescan* [-s] <path>:: > +*rescan* [-s|-w|-W] <path>:: > 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