X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=cmds-quota.c;h=745889d125236e71e9fe096974f8e3ae26794eec;hb=f0a376df4733dc6f0f0cdc529f4e7df64806f3f6;hp=568482fc2a73a0eafd8eabee96ed6405274e7604;hpb=babe94e4817aca45aef409b7a21bc47e51cda6ff;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/cmds-quota.c b/cmds-quota.c index 568482f..745889d 100644 --- a/cmds-quota.c +++ b/cmds-quota.c @@ -24,6 +24,7 @@ #include "commands.h" #include "utils.h" +#include "help.h" static const char * const quota_cmd_group_usage[] = { "btrfs quota [options] ", @@ -34,7 +35,6 @@ static int quota_ctl(int cmd, int argc, char **argv) { int ret = 0; int fd; - int e; char *path = argv[1]; struct btrfs_ioctl_quota_ctl_args args; DIR *dirstream = NULL; @@ -50,10 +50,9 @@ static int quota_ctl(int cmd, int argc, char **argv) return 1; ret = ioctl(fd, BTRFS_IOC_QUOTA_CTL, &args); - e = errno; close_file_or_dir(fd, dirstream); if (ret < 0) { - error("quota command failed: %s", strerror(e)); + error("quota command failed: %m"); return 1; } return 0; @@ -120,7 +119,6 @@ static int cmd_quota_rescan(int argc, char **argv) DIR *dirstream = NULL; int wait_for_completion = 0; - optind = 1; while (1) { int c = getopt(argc, argv, "sw"); if (c < 0) @@ -155,28 +153,40 @@ 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) { + if (ioctlnum == BTRFS_IOC_QUOTA_RESCAN_STATUS) { + close_file_or_dir(fd, dirstream); if (ret < 0) { - error("quota rescan failed: %s", strerror(e)); + error("could not obtain quota rescan status: %m"); return 1; - } else { - printf("quota rescan started\n"); } - } else { - if (!args.flags) { + if (!args.flags) printf("no rescan operation in progress\n"); - } else { + else printf("rescan operation running (current key %lld)\n", args.progress); + return 0; + } + + if (ret == 0) { + printf("quota rescan started\n"); + fflush(stdout); + } else if (ret < 0 && (!wait_for_completion || e != EINPROGRESS)) { + error("quota rescan failed: %m"); + close_file_or_dir(fd, dirstream); + return 1; + } + + if (wait_for_completion) { + ret = ioctl(fd, BTRFS_IOC_QUOTA_RESCAN_WAIT, &args); + e = errno; + if (ret < 0) { + error("quota rescan wait failed: %m"); + close_file_or_dir(fd, dirstream); + return 1; } } + close_file_or_dir(fd, dirstream); return 0; }