From bd1ac1fb1d33188eaa7834af215e78ab41166d7a Mon Sep 17 00:00:00 2001 From: Tsutomu Itoh Date: Thu, 15 Dec 2016 13:29:28 +0900 Subject: btrfs-progs: qgroup: add sync option to 'qgroup show' The 'qgroup show' command does not synchronize filesystem. Therefore, 'qgroup show' may not display the correct value unless synchronized with 'filesystem sync' command etc. So add the '--sync' option so that we can choose whether or not to synchronize when executing the command. Signed-off-by: Tsutomu Itoh Signed-off-by: David Sterba --- Documentation/btrfs-qgroup.asciidoc | 4 ++++ cmds-qgroup.c | 22 ++++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/Documentation/btrfs-qgroup.asciidoc b/Documentation/btrfs-qgroup.asciidoc index 438dbc7d..3053f2e6 100644 --- a/Documentation/btrfs-qgroup.asciidoc +++ b/Documentation/btrfs-qgroup.asciidoc @@ -126,6 +126,10 @@ Prefix \'+' means ascending order and \'-' means descending order of . If no prefix is given, use ascending order by default. + If multiple s is given, use comma to separate. ++ +--sync:::: +To retrieve information after updating the state of qgroups, +force sync of the filesystem identified by before getting information. EXIT STATUS ----------- diff --git a/cmds-qgroup.c b/cmds-qgroup.c index d0f10dd4..6f073099 100644 --- a/cmds-qgroup.c +++ b/cmds-qgroup.c @@ -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 }; @@ -300,6 +300,7 @@ static int cmd_qgroup_show(int argc, char **argv) u64 qgroupid; int filter_flag = 0; unsigned unit_mode; + int sync = 0; struct btrfs_qgroup_comparer_set *comparer_set; struct btrfs_qgroup_filter_set *filter_set; @@ -310,8 +311,12 @@ static int cmd_qgroup_show(int argc, char **argv) while (1) { int c; + enum { + GETOPT_VAL_SYNC = 256 + }; static const struct option long_options[] = { {"sort", required_argument, NULL, 'S'}, + {"sync", no_argument, NULL, GETOPT_VAL_SYNC}, { NULL, 0, NULL, 0 } }; @@ -347,6 +352,9 @@ static int cmd_qgroup_show(int argc, char **argv) if (ret) usage(cmd_qgroup_show_usage); break; + case GETOPT_VAL_SYNC: + sync = 1; + break; default: usage(cmd_qgroup_show_usage); } @@ -364,6 +372,16 @@ static int cmd_qgroup_show(int argc, char **argv) return 1; } + if (sync) { + ret = ioctl(fd, BTRFS_IOC_SYNC); + if (ret < 0) { + error("sync ioctl failed on '%s': %s", path, + strerror(errno)); + close_file_or_dir(fd, dirstream); + goto out; + } + } + if (filter_flag) { ret = lookup_path_rootid(fd, &qgroupid); if (ret < 0) { -- cgit v1.2.3