X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=cmds-qgroup.c;h=93206900693de5a43472f6c6c6ff6f63b6d3230c;hb=1d5058058a811a03a1985d18ff3071ce95b99c08;hp=bc1507728098026d95264b4aed41525334ca5d89;hpb=49cb98e5d6989055860eee06879c10896489062f;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/cmds-qgroup.c b/cmds-qgroup.c index bc15077..9320690 100644 --- a/cmds-qgroup.c +++ b/cmds-qgroup.c @@ -20,12 +20,15 @@ #include #include +#include + #include "ctree.h" #include "ioctl.h" #include "commands.h" #include "qgroup.h" #include "utils.h" +#include "help.h" static const char * const qgroup_cmd_group_usage[] = { "btrfs qgroup [options] ", @@ -95,7 +98,7 @@ static int _cmd_qgroup_assign(int assign, int argc, char **argv, ret = ioctl(fd, BTRFS_IOC_QGROUP_ASSIGN, &args); if (ret < 0) { - error("unable to assign quota group: %s", strerror(errno)); + error("unable to assign quota group: %m"); close_file_or_dir(fd, dirstream); return 1; } @@ -116,8 +119,7 @@ static int _cmd_qgroup_assign(int assign, int argc, char **argv, memset(&qargs, 0, sizeof(qargs)); ret = ioctl(fd, BTRFS_IOC_QUOTA_RESCAN, &qargs); if (ret < 0) - error("quota rescan failed: %s", - strerror(errno)); + error("quota rescan failed: %m"); } else { warning("quotas may be inconsistent, rescan needed"); } @@ -130,7 +132,6 @@ static int _cmd_qgroup_create(int create, int argc, char **argv) { int ret = 0; int fd; - int e; char *path; struct btrfs_ioctl_qgroup_create_args args; DIR *dirstream = NULL; @@ -148,11 +149,10 @@ static int _cmd_qgroup_create(int create, int argc, char **argv) return 1; ret = ioctl(fd, BTRFS_IOC_QGROUP_CREATE, &args); - e = errno; close_file_or_dir(fd, dirstream); if (ret < 0) { - error("unable to %s quota group: %s", - create ? "create":"destroy", strerror(e)); + error("unable to %s quota group: %m", + create ? "create":"destroy"); return 1; } return 0; @@ -272,8 +272,7 @@ static int cmd_qgroup_destroy(int argc, char **argv) } static const char * const cmd_qgroup_show_usage[] = { - "btrfs qgroup show -pcreFf " - "[--sort=qgroupid,rfer,excl,max_rfer,max_excl] ", + "btrfs qgroup show [options] ", "Show subvolume quota groups.", "-p print parent qgroup id", "-c print child qgroup id", @@ -288,6 +287,7 @@ static const char * const cmd_qgroup_show_usage[] = { " list qgroups sorted by specified items", " you can use '+' or '-' in front of each item.", " (+:ascending, -:descending, ascending default)", + "--sync force sync of the filesystem before getting info", NULL }; @@ -296,11 +296,12 @@ static int cmd_qgroup_show(int argc, char **argv) char *path; int ret = 0; int fd; - int e; DIR *dirstream = NULL; u64 qgroupid; int filter_flag = 0; unsigned unit_mode; + int sync = 0; + enum btrfs_util_error err; struct btrfs_qgroup_comparer_set *comparer_set; struct btrfs_qgroup_filter_set *filter_set; @@ -311,8 +312,13 @@ static int cmd_qgroup_show(int argc, char **argv) while (1) { int c; + enum { + GETOPT_VAL_SORT = 256, + GETOPT_VAL_SYNC + }; static const struct option long_options[] = { - {"sort", required_argument, NULL, 'S'}, + {"sort", required_argument, NULL, GETOPT_VAL_SORT}, + {"sync", no_argument, NULL, GETOPT_VAL_SYNC}, { NULL, 0, NULL, 0 } }; @@ -342,12 +348,15 @@ static int cmd_qgroup_show(int argc, char **argv) case 'f': filter_flag |= 0x2; break; - case 'S': + case GETOPT_VAL_SORT: ret = btrfs_qgroup_parse_sort_string(optarg, &comparer_set); if (ret) usage(cmd_qgroup_show_usage); break; + case GETOPT_VAL_SYNC: + sync = 1; + break; default: usage(cmd_qgroup_show_usage); } @@ -365,6 +374,13 @@ static int cmd_qgroup_show(int argc, char **argv) return 1; } + if (sync) { + err = btrfs_util_sync_fd(fd); + if (err) + warning("sync ioctl failed on '%s': %s", path, + strerror(errno)); + } + if (filter_flag) { ret = lookup_path_rootid(fd, &qgroupid); if (ret < 0) { @@ -383,10 +399,9 @@ static int cmd_qgroup_show(int argc, char **argv) qgroupid); } ret = btrfs_show_qgroups(fd, filter_set, comparer_set); - e = errno; close_file_or_dir(fd, dirstream); - if (ret < 0) - error("can't list qgroups: %s", strerror(e)); + free(filter_set); + free(comparer_set); out: return !!ret; @@ -406,13 +421,13 @@ static int cmd_qgroup_limit(int argc, char **argv) { int ret = 0; int fd; - int e; char *path = NULL; struct btrfs_ioctl_qgroup_limit_args args; unsigned long long size; int compressed = 0; int exclusive = 0; DIR *dirstream = NULL; + enum btrfs_util_error err; while (1) { int c = getopt(argc, argv, "ce"); @@ -453,13 +468,9 @@ static int cmd_qgroup_limit(int argc, char **argv) if (argc - optind == 2) { args.qgroupid = 0; path = argv[optind + 1]; - ret = test_issubvolume(path); - if (ret < 0) { - error("cannot access '%s': %s", path, strerror(-ret)); - return 1; - } - if (!ret) { - error("'%s' is not a subvolume", path); + err = btrfs_util_is_subvolume(path); + if (err) { + error_btrfs_util(err); return 1; } /* @@ -477,10 +488,9 @@ static int cmd_qgroup_limit(int argc, char **argv) return 1; ret = ioctl(fd, BTRFS_IOC_QGROUP_LIMIT, &args); - e = errno; close_file_or_dir(fd, dirstream); if (ret < 0) { - error("unable to limit requested quota group: %s", strerror(e)); + error("unable to limit requested quota group: %m"); return 1; } return 0;