btrfs-progs: add OPEN_CTREE_INVALIDATE_FST flag
[platform/upstream/btrfs-progs.git] / cmds-qgroup.c
index 45075a3..bc15077 100644 (file)
@@ -44,10 +44,12 @@ static int _cmd_qgroup_assign(int assign, int argc, char **argv,
 
        if (assign) {
                while (1) {
-                       enum { GETOPT_VAL_RESCAN = 256 };
+                       enum { GETOPT_VAL_RESCAN = 256, GETOPT_VAL_NO_RESCAN };
                        static const struct option long_options[] = {
                                { "rescan", no_argument, NULL,
                                        GETOPT_VAL_RESCAN },
+                               { "no-rescan", no_argument, NULL,
+                                       GETOPT_VAL_NO_RESCAN },
                                { NULL, 0, NULL, 0 }
                        };
                        int c = getopt_long(argc, argv, "", long_options, NULL);
@@ -58,6 +60,9 @@ static int _cmd_qgroup_assign(int assign, int argc, char **argv,
                        case GETOPT_VAL_RESCAN:
                                rescan = 1;
                                break;
+                       case GETOPT_VAL_NO_RESCAN:
+                               rescan = 0;
+                               break;
                        default:
                                /* Usage printed by the caller */
                                return -1;
@@ -208,7 +213,7 @@ static const char * const cmd_qgroup_assign_usage[] = {
        "Assign SRC as the child qgroup of DST",
        "",
        "--rescan       schedule qutoa rescan if needed",
-       "--no-rescan    ",
+       "--no-rescan    don't schedule quota rescan",
        NULL
 };
 
@@ -304,7 +309,6 @@ static int cmd_qgroup_show(int argc, char **argv)
 
        unit_mode = get_unit_mode_from_arg(&argc, argv, 0);
 
-       optind = 1;
        while (1) {
                int c;
                static const struct option long_options[] = {
@@ -356,13 +360,19 @@ static int cmd_qgroup_show(int argc, char **argv)
        path = argv[optind];
        fd = btrfs_open_dir(path, &dirstream, 1);
        if (fd < 0) {
-               btrfs_qgroup_free_filter_set(filter_set);
-               btrfs_qgroup_free_comparer_set(comparer_set);
+               free(filter_set);
+               free(comparer_set);
                return 1;
        }
 
        if (filter_flag) {
-               qgroupid = btrfs_get_path_rootid(fd);
+               ret = lookup_path_rootid(fd, &qgroupid);
+               if (ret < 0) {
+                       error("cannot resolve rootid for %s: %s",
+                                       path, strerror(-ret));
+                       close_file_or_dir(fd, dirstream);
+                       goto out;
+               }
                if (filter_flag & 0x1)
                        btrfs_qgroup_setup_filter(&filter_set,
                                        BTRFS_QGROUP_FILTER_ALL_PARENT,
@@ -378,6 +388,7 @@ static int cmd_qgroup_show(int argc, char **argv)
        if (ret < 0)
                error("can't list qgroups: %s", strerror(e));
 
+out:
        return !!ret;
 }
 
@@ -403,7 +414,6 @@ static int cmd_qgroup_limit(int argc, char **argv)
        int exclusive = 0;
        DIR *dirstream = NULL;
 
-       optind = 1;
        while (1) {
                int c = getopt(argc, argv, "ce");
                if (c < 0)