From: "Misono, Tomohiro" <misono.tomohiro@jp.fujitsu.com>
To: linux-btrfs <linux-btrfs@vger.kernel.org>
Subject: [PATCH v2] btrfs-progs: subvol: change subvol set-default to also accept subvol path
Date: Mon, 2 Oct 2017 17:19:23 +0900 [thread overview]
Message-ID: <5008967a-9da9-ad91-65e9-bcfbfb07feb0@jp.fujitsu.com> (raw)
This patch changes "subvol set-default" to also accept the subvolume path
for convenience.
This is the one of the issue on github:
https://github.com/kdave/btrfs-progs/issues/35
If there are two args, they are assumed as subvol id and path to the fs
(the same as current behavior), and if there is only one arg, it is assumed
as the path to the subvolume. Therefore there is no ambiguity between subvol
id and subvol name, which is mentioned in the above issue page.
Only the absolute path to the subvolume is allowed, for the safety when
multiple filesystems are used.
subvol id is resolved by get_subvol_info() which is used by "subvol show".
change to v2:
restrict the path to only allow absolute path.
documents are updated accordingly.
Signed-off-by: Tomohiro Misono <misono.tomohiro@jp.fujitsu.com>
---
Documentation/btrfs-subvolume.asciidoc | 11 +++----
cmds-subvolume.c | 53 +++++++++++++++++++++++++++-------
2 files changed, 48 insertions(+), 16 deletions(-)
diff --git a/Documentation/btrfs-subvolume.asciidoc b/Documentation/btrfs-subvolume.asciidoc
index 5cfe885..7973567 100644
--- a/Documentation/btrfs-subvolume.asciidoc
+++ b/Documentation/btrfs-subvolume.asciidoc
@@ -142,12 +142,13 @@ you can add \'\+' or \'-' in front of each items, \'+' means ascending,
for --sort you can combine some items together by \',', just like
--sort=+ogen,-gen,path,rootid.
-*set-default* <id> <path>::
-Set the subvolume of the filesystem <path> which is mounted as
-default.
+*set-default* [<path>|<id> <mountpoint>]::
+Set the subvolume of the filesystem which is mounted as default.
+
-The subvolume is identified by <id>, which is returned by the *subvolume list*
-command.
+Only absolute path is allowed to specify the subvolume.
+Alterantively, the pair of <id> and <mountpoint> can be used. In that
+case, the subvolume is identified by <id>, which is returned by the
+*subvolume list* command. The filesystem is specified by <mountpoint>.
*show* <path>::
Show information of a given subvolume in the <path>.
diff --git a/cmds-subvolume.c b/cmds-subvolume.c
index 666f6e0..dda9e73 100644
--- a/cmds-subvolume.c
+++ b/cmds-subvolume.c
@@ -803,28 +803,59 @@ out:
}
static const char * const cmd_subvol_set_default_usage[] = {
- "btrfs subvolume set-default <subvolid> <path>",
- "Set the default subvolume of a filesystem",
+ "btrfs subvolume set-default [<path>|<id> <mountpoint>]",
+ "Set the default subvolume of the filesystem mounted as default.",
+ "The subvolume can be specified by its absolute path,",
+ "or the pair of subvolume id and mount point to the filesystem.",
NULL
};
static int cmd_subvol_set_default(int argc, char **argv)
{
- int ret=0, fd, e;
- u64 objectid;
- char *path;
- char *subvolid;
- DIR *dirstream = NULL;
+ int ret = 0;
+ int fd, e;
+ u64 objectid;
+ char *path;
+ char *subvolid;
+ DIR *dirstream = NULL;
clean_args_no_options(argc, argv, cmd_subvol_set_default_usage);
- if (check_argc_exact(argc - optind, 2))
+ if (check_argc_min(argc - optind, 1) ||
+ check_argc_max(argc - optind, 2))
usage(cmd_subvol_set_default_usage);
- subvolid = argv[optind];
- path = argv[optind + 1];
+ if (argc - optind == 1) {
+ /* path to the subvolume is specified */
+ struct root_info ri;
+ char *fullpath;
- objectid = arg_strtou64(subvolid);
+ path = argv[optind];
+ if (path[0] != '/') {
+ error("only absolute path is allowed");
+ return 1;
+ }
+
+ fullpath = realpath(path, NULL);
+ if (!fullpath) {
+ error("cannot find real path for '%s': %s",
+ path, strerror(errno));
+ return 1;
+ }
+
+ ret = get_subvol_info(fullpath, &ri);
+ free(fullpath);
+
+ if (ret)
+ return 1;
+
+ objectid = ri.root_id;
+ } else {
+ /* subvol id and path to the filesystem are specified */
+ subvolid = argv[optind];
+ path = argv[optind + 1];
+ objectid = arg_strtou64(subvolid);
+ }
fd = btrfs_open_dir(path, &dirstream, 1);
if (fd < 0)
--
2.9.5
next reply other threads:[~2017-10-02 8:19 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-02 8:19 Misono, Tomohiro [this message]
2017-10-02 8:39 ` [PATCH v2] btrfs-progs: subvol: change subvol set-default to also accept subvol path Andrei Borzenkov
2017-10-02 9:01 ` Hugo Mills
2017-10-02 23:57 ` Misono, Tomohiro
2017-10-04 18:07 ` David Sterba
2017-10-05 0:57 ` Misono, Tomohiro
2017-10-05 15:14 ` David Sterba
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5008967a-9da9-ad91-65e9-bcfbfb07feb0@jp.fujitsu.com \
--to=misono.tomohiro@jp.fujitsu.com \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox