From patchwork Mon Jun 10 14:56:27 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anand Jain X-Patchwork-Id: 2697911 Return-Path: X-Original-To: patchwork-linux-btrfs@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id F1090E0172 for ; Mon, 10 Jun 2013 14:53:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752392Ab3FJOxB (ORCPT ); Mon, 10 Jun 2013 10:53:01 -0400 Received: from aserp1040.oracle.com ([141.146.126.69]:49943 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752190Ab3FJOw4 (ORCPT ); Mon, 10 Jun 2013 10:52:56 -0400 Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.1/Sentrion-MTA-4.3.1) with ESMTP id r5AEqtIr002858 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 10 Jun 2013 14:52:55 GMT Received: from aserz7021.oracle.com (aserz7021.oracle.com [141.146.126.230]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r5AEqsXC007867 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Mon, 10 Jun 2013 14:52:55 GMT Received: from abhmt112.oracle.com (abhmt112.oracle.com [141.146.116.64]) by aserz7021.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id r5AEqstq007856 for ; Mon, 10 Jun 2013 14:52:54 GMT Received: from wish.sg.oracle.com (/10.186.101.18) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 10 Jun 2013 07:52:54 -0700 From: Anand Jain To: linux-btrfs@vger.kernel.org Subject: [PATCH 6/9 v2] btrfs-progs: scan /dev/mapper in filesystem show and device scan Date: Mon, 10 Jun 2013 22:56:27 +0800 Message-Id: <1370876190-16520-7-git-send-email-anand.jain@oracle.com> X-Mailer: git-send-email 1.8.1.164.g2d0029e In-Reply-To: <1370876190-16520-1-git-send-email-anand.jain@oracle.com> References: <1370876190-16520-1-git-send-email-anand.jain@oracle.com> X-Source-IP: acsinet21.oracle.com [141.146.126.237] Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org Currently, btrsf fi show and btrfs dev scan uses /proc/partitions (by default) (which gives priority to dm- over sd paths) and with --all-devices it will scan /dev only (when it skips links under /dev/mapper). However using /dev/mapper paths are in common practice with mount, fstab, and lvm, so its better to be consistent with them. This patch adds --mapper option to device scan and filesystem show cli, when used will look for btrfs dev under /dev/mapper and will use the links provided under /dev/mapper. eg: btrfs fi show --mapper Label: none uuid: 0a621111-ad84-4d80-842a-dd9c1c60bf51 Total devices 2 FS bytes used 1.17MB devid 1 size 44.99GB used 2.04GB path /dev/mapper/mpathe devid 2 size 48.23GB used 2.03GB path /dev/mapper/mpathd Label: none uuid: bad9105f-bdc6-4626-9ba7-80bd97aebe19 Total devices 1 FS bytes used 28.00KB devid 1 size 15.00GB used 2.04GB path /dev/mapper/mpathbp1 In the long run I want the usage of /dev/mapper path along with /proc/partitions be the default option to scan for the btrfs devs. /proc/partitions must be scanned as well because to include the mapper blacklisted devs. Signed-off-by: Anand Jain --- cmds-device.c | 8 +++++++- cmds-filesystem.c | 7 +++++-- man/btrfs.8.in | 12 +++++++----- utils.c | 3 +++ utils.h | 5 +++-- 5 files changed, 25 insertions(+), 10 deletions(-) diff --git a/cmds-device.c b/cmds-device.c index b6ecb3b..ef6bc60 100644 --- a/cmds-device.c +++ b/cmds-device.c @@ -178,7 +178,7 @@ static int cmd_rm_dev(int argc, char **argv) } static const char * const cmd_scan_dev_usage[] = { - "btrfs device scan [<--all-devices>| [...]]", + "btrfs device scan [<--all-devices>|<--mapper>| [...]]", "Scan devices for a btrfs filesystem", NULL }; @@ -195,6 +195,12 @@ static int cmd_scan_dev(int argc, char **argv) where = BTRFS_SCAN_DEV; devstart += 1; + } else if( argc > 1 && !strcmp(argv[1],"--mapper")){ + if (check_argc_max(argc, 2)) + usage(cmd_scan_dev_usage); + + where = BTRFS_SCAN_MAPPER; + devstart += 1; } if(argc<=devstart){ diff --git a/cmds-filesystem.c b/cmds-filesystem.c index 0d76d58..9b7bcf1 100644 --- a/cmds-filesystem.c +++ b/cmds-filesystem.c @@ -232,7 +232,7 @@ static void print_one_uuid(struct btrfs_fs_devices *fs_devices) } static const char * const cmd_show_usage[] = { - "btrfs filesystem show [--all-devices|]", + "btrfs filesystem show [--all-devices|--mapper|]", "Show the structure of a filesystem", "If no argument is given, structure of all present filesystems is shown.", NULL @@ -248,9 +248,12 @@ static int cmd_show(int argc, char **argv) int where = BTRFS_SCAN_PROC; int searchstart = 1; - if( argc > 1 && !strcmp(argv[1],"--all-devices")){ + if (argc > 1 && !strcmp(argv[1],"--all-devices")) { where = BTRFS_SCAN_DEV; searchstart += 1; + } else if (argc > 1 && !strcmp(argv[1],"--mapper")) { + where = BTRFS_SCAN_MAPPER; + searchstart += 1; } if (check_argc_max(argc, searchstart + 1)) diff --git a/man/btrfs.8.in b/man/btrfs.8.in index ae984f8..8988b16 100644 --- a/man/btrfs.8.in +++ b/man/btrfs.8.in @@ -31,11 +31,11 @@ btrfs \- control a btrfs filesystem .PP \fBbtrfs\fP \fBfilesystem label\fP\fI [newlabel]\fP .PP -\fBbtrfs\fP \fBfilesystem show\fP\fI [--all-devices|]\fP +\fBbtrfs\fP \fBfilesystem show\fP\fI [--all-devices|--mapper|]\fP .PP \fBbtrfs\fP \fBfilesystem balance\fP\fI \fP .PP -\fBbtrfs\fP \fBdevice scan\fP\fI [--all-devices| [...]]\fP +\fBbtrfs\fP \fBdevice scan\fP\fI [--all-devices|--mapper| [...]]\fP .PP \fBbtrfs\fP \fBdevice stats\fP [-z] {\fI\fP|\fI\fP} .PP @@ -282,10 +282,11 @@ NOTE: Currently there are the following limitations: - the filesystem should not have more than one device. .TP -\fBfilesystem show\fR [--all-devices|]\fR +\fBfilesystem show\fR [--all-devices|--mapper|]\fR Show the btrfs filesystem with some additional info. If no \fIUUID\fP is passed, \fBbtrfs\fR show info of all the btrfs filesystem. If \fB--all-devices\fP is passed, all the devices under /dev are scanned; +If \fB--mapper\fP is passed, all the devices under /dev/mapper are scanned; otherwise the devices list is extracted from the /proc/partitions file. .TP @@ -314,11 +315,12 @@ Add device(s) to the filesystem identified by \fI\fR. Remove device(s) from a filesystem identified by \fI\fR. .TP -\fBdevice scan\fR \fI[--all-devices| [...]\fR +\fBdevice scan\fR \fI[--all-devices|--mapper| [...]\fR If one or more devices are passed, these are scanned for a btrfs filesystem. If no devices are passed, \fBbtrfs\fR scans all the block devices listed in the /proc/partitions file. -Finally, if \fB--all-devices\fP is passed, all the devices under /dev are +If \fB--all-devices\fP is passed, all the devices under /dev are +Finally, if \fB--mapper\fP is passed, all the devices under /dev/mapper are scanned. .TP diff --git a/utils.c b/utils.c index a329b7a..f9545b8 100644 --- a/utils.c +++ b/utils.c @@ -1825,6 +1825,9 @@ int scan_for_btrfs(int where, int update_kernel) case BTRFS_SCAN_DEV: ret = btrfs_scan_one_dir("/dev", update_kernel); break; + case BTRFS_SCAN_MAPPER: + ret = btrfs_scan_one_dir("/dev/mapper", update_kernel); + break; } return ret; } diff --git a/utils.h b/utils.h index 78f3a65..733d13b 100644 --- a/utils.h +++ b/utils.h @@ -24,8 +24,9 @@ #define BTRFS_MKFS_SYSTEM_GROUP_SIZE (4 * 1024 * 1024) -#define BTRFS_SCAN_PROC 1 -#define BTRFS_SCAN_DEV 2 +#define BTRFS_SCAN_PROC 1 +#define BTRFS_SCAN_DEV 2 +#define BTRFS_SCAN_MAPPER 3 int make_btrfs(int fd, const char *device, const char *label, u64 blocks[6], u64 num_bytes, u32 nodesize,