From patchwork Mon Oct 2 06:25:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Misono Tomohiro X-Patchwork-Id: 9980273 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 293DF60365 for ; Mon, 2 Oct 2017 06:26:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1AE8A287CE for ; Mon, 2 Oct 2017 06:26:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0FD32289D7; Mon, 2 Oct 2017 06:26:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7354C287CE for ; Mon, 2 Oct 2017 06:26:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750923AbdJBG0B (ORCPT ); Mon, 2 Oct 2017 02:26:01 -0400 Received: from mgwkm03.jp.fujitsu.com ([202.219.69.170]:52343 "EHLO mgwkm03.jp.fujitsu.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750715AbdJBG0A (ORCPT ); Mon, 2 Oct 2017 02:26:00 -0400 Received: from kw-mxoi1.gw.nic.fujitsu.com (unknown [192.168.231.131]) by mgwkm03.jp.fujitsu.com with smtp id 0877_91e4_c7572b85_a973_4745_a992_769286e6c869; Mon, 02 Oct 2017 15:25:44 +0900 Received: from g01jpfmpwyt03.exch.g01.fujitsu.local (g01jpfmpwyt03.exch.g01.fujitsu.local [10.128.193.57]) by kw-mxoi1.gw.nic.fujitsu.com (Postfix) with ESMTP id 91BAEAC0090 for ; Mon, 2 Oct 2017 15:25:44 +0900 (JST) Received: from G01JPEXCHYT13.g01.fujitsu.local (G01JPEXCHYT13.g01.fujitsu.local [10.128.194.52]) by g01jpfmpwyt03.exch.g01.fujitsu.local (Postfix) with ESMTP id E025246E6B5 for ; Mon, 2 Oct 2017 15:25:43 +0900 (JST) X-SecurityPolicyCheck: OK by SHieldMailChecker v2.5.2 X-SHieldMailCheckerPolicyVersion: FJ-ISEC-20170217-enc X-SHieldMailCheckerMailID: b4f72638123a4fe4bba14d58e0bd7044 To: linux-btrfs From: "Misono, Tomohiro" Subject: [PATCH] btrfs-progs: subvol: change subvol set-default to also accept subvol path Message-ID: <7faa2e3c-d157-f8f6-b818-5b95917cd7e7@jp.fujitsu.com> Date: Mon, 2 Oct 2017 15:25:40 +0900 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 Content-Language: en-US X-SecurityPolicyCheck-GC: OK by FENCE-Mail X-TM-AS-MML: disable Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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. subvol id is resolved by get_subvol_info() which is used by "subvol show". Signed-off-by: Tomohiro Misono --- Documentation/btrfs-subvolume.asciidoc | 10 +++---- cmds-subvolume.c | 48 ++++++++++++++++++++++++++-------- 2 files changed, 42 insertions(+), 16 deletions(-) diff --git a/Documentation/btrfs-subvolume.asciidoc b/Documentation/btrfs-subvolume.asciidoc index 5cfe885..df27460 100644 --- a/Documentation/btrfs-subvolume.asciidoc +++ b/Documentation/btrfs-subvolume.asciidoc @@ -142,12 +142,12 @@ 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* :: -Set the subvolume of the filesystem which is mounted as -default. +*set-default* [| ]:: +Set the subvolume of the filesystem which is mounted as default. + -The subvolume is identified by , which is returned by the *subvolume list* -command. +If and is given, the subvolume is identified by , +which is returned by the *subvolume list* command. The filesystem +is specified by . *show* :: Show information of a given subvolume in the . diff --git a/cmds-subvolume.c b/cmds-subvolume.c index 666f6e0..5bf8295 100644 --- a/cmds-subvolume.c +++ b/cmds-subvolume.c @@ -803,28 +803,54 @@ out: } static const char * const cmd_subvol_set_default_usage[] = { - "btrfs subvolume set-default ", - "Set the default subvolume of a filesystem", + "btrfs subvolume set-default [| ]", + "Set the default subvolume of the filesystem mounted as default.", + "The subvolume can be specified by its path,", + "or the pair of subvolume id and path 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]; + 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)