diff options
author | Jan Schmidt <list.btrfs@jan-o-sch.net> | 2013-05-06 21:15:18 +0200 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2013-09-03 19:40:50 +0200 |
commit | eda2178b995a637529b95e748be9dd9460ec4d89 (patch) | |
tree | b517d970f32edef8246a644dee9c8727880751f2 /cmds-quota.c | |
parent | b9b1fc4f0dea55ed276819538d1d46e61edf1d86 (diff) | |
download | btrfs-progs-eda2178b995a637529b95e748be9dd9460ec4d89.tar.gz |
Btrfs-progs: added "btrfs quota rescan" -w switch (wait)
With -w one can wait for a rescan operation to finish. It can be used when
starting a rescan operation or later to wait for the currently running
rescan operation to finish. Waiting is interruptible.
Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Diffstat (limited to 'cmds-quota.c')
-rw-r--r-- | cmds-quota.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/cmds-quota.c b/cmds-quota.c index 792aa7e..3bef65c 100644 --- a/cmds-quota.c +++ b/cmds-quota.c @@ -94,10 +94,11 @@ static int cmd_quota_disable(int argc, char **argv) } static const char * const cmd_quota_rescan_usage[] = { - "btrfs quota rescan [-s] <path>", + "btrfs quota rescan [-sw] <path>", "Trash all qgroup numbers and scan the metadata again with the current config.", "", "-s show status of a running rescan operation", + "-w wait for rescan operation to finish (can be already in progress)", NULL }; @@ -110,21 +111,30 @@ static int cmd_quota_rescan(int argc, char **argv) struct btrfs_ioctl_quota_rescan_args args; int ioctlnum = BTRFS_IOC_QUOTA_RESCAN; DIR *dirstream = NULL; + int wait_for_completion = 0; optind = 1; while (1) { - int c = getopt(argc, argv, "s"); + int c = getopt(argc, argv, "sw"); if (c < 0) break; switch (c) { case 's': ioctlnum = BTRFS_IOC_QUOTA_RESCAN_STATUS; break; + case 'w': + wait_for_completion = 1; + break; default: usage(cmd_quota_rescan_usage); } } + if (ioctlnum != BTRFS_IOC_QUOTA_RESCAN && wait_for_completion) { + fprintf(stderr, "ERROR: -w cannot be used with -s\n"); + return 12; + } + if (check_argc_exact(argc - optind, 1)) usage(cmd_quota_rescan_usage); @@ -139,6 +149,11 @@ static int cmd_quota_rescan(int argc, char **argv) ret = ioctl(fd, ioctlnum, &args); e = errno; + + if (wait_for_completion && (ret == 0 || e == EINPROGRESS)) { + ret = ioctl(fd, BTRFS_IOC_QUOTA_RESCAN_WAIT, &args); + e = errno; + } close_file_or_dir(fd, dirstream); if (ioctlnum == BTRFS_IOC_QUOTA_RESCAN) { |