Linux-BTRFS Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH v3] btrfs-progs: add verbose option to btrfs device scan
@ 2019-10-02  4:11 Anand Jain
  2019-10-02  4:44 ` [PATCH v3.1] " Anand Jain
  2019-10-07 17:41 ` [PATCH v3] " David Sterba
  0 siblings, 2 replies; 6+ messages in thread
From: Anand Jain @ 2019-10-02  4:11 UTC (permalink / raw)
  To: linux-btrfs

To help debug device scan issues, add verbose option to btrfs device scan.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Tested-by: Graham Cobb <g.btrfs@cobb.uk.net>
---
v3: Add --verbose long option and update documentation. Thanks Graham.A
    Add Tested-by.
v2: Use bool instead of int as a btrfs_scan_device() argument.

 Documentation/btrfs-device.asciidoc | 2 ++
 cmds/device.c                       | 9 +++++++--
 cmds/filesystem.c                   | 2 +-
 common/device-scan.c                | 4 +++-
 common/device-scan.h                | 3 ++-
 common/utils.c                      | 2 +-
 disk-io.c                           | 2 +-
 7 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/Documentation/btrfs-device.asciidoc b/Documentation/btrfs-device.asciidoc
index 70ce6c5a97f8..a251be9e0fa2 100644
--- a/Documentation/btrfs-device.asciidoc
+++ b/Documentation/btrfs-device.asciidoc
@@ -120,6 +120,8 @@ available.
 -u|--forget::::
 Unregister a given device or all stale devices if no path is given, the device
 must be unmounted otherwise it's an error.
+-v|--verbose::::
+Be verbose and list the devices scanned.
 
 *stats* [options] <path>|<device>::
 Read and print the device IO error statistics for all devices of the given
diff --git a/cmds/device.c b/cmds/device.c
index 24158308a41b..655b97d83cb7 100644
--- a/cmds/device.c
+++ b/cmds/device.c
@@ -313,6 +313,7 @@ static int cmd_device_scan(const struct cmd_struct *cmd, int argc, char **argv)
 	int all = 0;
 	int ret = 0;
 	int forget = 0;
+	bool verbose = false;
 
 	optind = 0;
 	while (1) {
@@ -320,10 +321,11 @@ static int cmd_device_scan(const struct cmd_struct *cmd, int argc, char **argv)
 		static const struct option long_options[] = {
 			{ "all-devices", no_argument, NULL, 'd'},
 			{ "forget", no_argument, NULL, 'u'},
+			{ "verbose", no_argument, NULL, 'v'},
 			{ NULL, 0, NULL, 0}
 		};
 
-		c = getopt_long(argc, argv, "du", long_options, NULL);
+		c = getopt_long(argc, argv, "duv", long_options, NULL);
 		if (c < 0)
 			break;
 		switch (c) {
@@ -333,6 +335,9 @@ static int cmd_device_scan(const struct cmd_struct *cmd, int argc, char **argv)
 		case 'u':
 			forget = 1;
 			break;
+		case 'v':
+			verbose = true;
+			break;
 		default:
 			usage_unknown_option(cmd, argv);
 		}
@@ -354,7 +359,7 @@ static int cmd_device_scan(const struct cmd_struct *cmd, int argc, char **argv)
 			}
 		} else {
 			printf("Scanning for Btrfs filesystems\n");
-			ret = btrfs_scan_devices();
+			ret = btrfs_scan_devices(verbose);
 			error_on(ret, "error %d while scanning", ret);
 			ret = btrfs_register_all_devices();
 			error_on(ret,
diff --git a/cmds/filesystem.c b/cmds/filesystem.c
index 4f22089abeaa..02d47a43a792 100644
--- a/cmds/filesystem.c
+++ b/cmds/filesystem.c
@@ -746,7 +746,7 @@ devs_only:
 		else
 			ret = 1;
 	} else {
-		ret = btrfs_scan_devices();
+		ret = btrfs_scan_devices(false);
 	}
 
 	if (ret) {
diff --git a/common/device-scan.c b/common/device-scan.c
index 48dbd9e19715..a500edf0f7d7 100644
--- a/common/device-scan.c
+++ b/common/device-scan.c
@@ -360,7 +360,7 @@ void free_seen_fsid(struct seen_fsid *seen_fsid_hash[])
 	}
 }
 
-int btrfs_scan_devices(void)
+int btrfs_scan_devices(bool verbose)
 {
 	int fd = -1;
 	int ret;
@@ -389,6 +389,8 @@ int btrfs_scan_devices(void)
 			continue;
 		/* if we are here its definitely a btrfs disk*/
 		strncpy_null(path, blkid_dev_devname(dev));
+		if (verbose)
+			printf("blkid: btrfs device: %s\n", path);
 
 		fd = open(path, O_RDONLY);
 		if (fd < 0) {
diff --git a/common/device-scan.h b/common/device-scan.h
index eda2bae5c6c4..3e473c48d1af 100644
--- a/common/device-scan.h
+++ b/common/device-scan.h
@@ -1,6 +1,7 @@
 #ifndef __DEVICE_SCAN_H__
 #define __DEVICE_SCAN_H__
 
+#include <stdbool.h>
 #include "kerncompat.h"
 #include "ioctl.h"
 
@@ -29,7 +30,7 @@ struct seen_fsid {
 	int fd;
 };
 
-int btrfs_scan_devices(void);
+int btrfs_scan_devices(bool verbose);
 int btrfs_register_one_device(const char *fname);
 int btrfs_register_all_devices(void);
 int btrfs_add_to_fsid(struct btrfs_trans_handle *trans,
diff --git a/common/utils.c b/common/utils.c
index 6617b3ef38b1..9027de596f5d 100644
--- a/common/utils.c
+++ b/common/utils.c
@@ -277,7 +277,7 @@ int check_mounted_where(int fd, const char *file, char *where, int size,
 
 	/* scan other devices */
 	if (is_btrfs && total_devs > 1) {
-		ret = btrfs_scan_devices();
+		ret = btrfs_scan_devices(false);
 		if (ret)
 			return ret;
 	}
diff --git a/disk-io.c b/disk-io.c
index fa679133e171..58861ccfb4ec 100644
--- a/disk-io.c
+++ b/disk-io.c
@@ -1096,7 +1096,7 @@ int btrfs_scan_fs_devices(int fd, const char *path,
 	}
 
 	if (!skip_devices && total_devs != 1) {
-		ret = btrfs_scan_devices();
+		ret = btrfs_scan_devices(false);
 		if (ret)
 			return ret;
 	}
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v3.1] btrfs-progs: add verbose option to btrfs device scan
  2019-10-02  4:11 [PATCH v3] btrfs-progs: add verbose option to btrfs device scan Anand Jain
@ 2019-10-02  4:44 ` " Anand Jain
  2019-10-07 17:41 ` [PATCH v3] " David Sterba
  1 sibling, 0 replies; 6+ messages in thread
From: Anand Jain @ 2019-10-02  4:44 UTC (permalink / raw)
  To: linux-btrfs

To help debug device scan issues, add verbose option to btrfs device scan.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Tested-by: Graham Cobb <g.btrfs@cobb.uk.net>
---
v3.1: Add --help as well. And update the wordings in Documentation.
v3: Add --verbose long option and update documentation. Thanks Graham.A
    Add Tested-by.
v2: Use bool instead of int as a btrfs_scan_device() argument.

 Documentation/btrfs-device.asciidoc |  2 ++
 cmds/device.c                       | 11 +++++++++--
 cmds/filesystem.c                   |  2 +-
 common/device-scan.c                |  4 +++-
 common/device-scan.h                |  3 ++-
 common/utils.c                      |  2 +-
 disk-io.c                           |  2 +-
 7 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/Documentation/btrfs-device.asciidoc b/Documentation/btrfs-device.asciidoc
index 70ce6c5a97f8..cca853e4ea8f 100644
--- a/Documentation/btrfs-device.asciidoc
+++ b/Documentation/btrfs-device.asciidoc
@@ -120,6 +120,8 @@ available.
 -u|--forget::::
 Unregister a given device or all stale devices if no path is given, the device
 must be unmounted otherwise it's an error.
+-v|--verbose::::
+List the devices scanned in the current scan and be verbose where needed
 
 *stats* [options] <path>|<device>::
 Read and print the device IO error statistics for all devices of the given
diff --git a/cmds/device.c b/cmds/device.c
index 24158308a41b..8bb44bae7946 100644
--- a/cmds/device.c
+++ b/cmds/device.c
@@ -303,6 +303,8 @@ static const char * const cmd_device_scan_usage[] = {
 	" -d|--all-devices            enumerate and register all devices, use as a fallback",
 	"                             if blkid is not available",
 	" -u|--forget [<device>...]   unregister a given device or all stale devices if no path ",
+	" -v|--verbose [<device>...]  stdout the devices that are scanned in the current scan",
+
 	NULL
 };
 
@@ -313,6 +315,7 @@ static int cmd_device_scan(const struct cmd_struct *cmd, int argc, char **argv)
 	int all = 0;
 	int ret = 0;
 	int forget = 0;
+	bool verbose = false;
 
 	optind = 0;
 	while (1) {
@@ -320,10 +323,11 @@ static int cmd_device_scan(const struct cmd_struct *cmd, int argc, char **argv)
 		static const struct option long_options[] = {
 			{ "all-devices", no_argument, NULL, 'd'},
 			{ "forget", no_argument, NULL, 'u'},
+			{ "verbose", no_argument, NULL, 'v'},
 			{ NULL, 0, NULL, 0}
 		};
 
-		c = getopt_long(argc, argv, "du", long_options, NULL);
+		c = getopt_long(argc, argv, "duv", long_options, NULL);
 		if (c < 0)
 			break;
 		switch (c) {
@@ -333,6 +337,9 @@ static int cmd_device_scan(const struct cmd_struct *cmd, int argc, char **argv)
 		case 'u':
 			forget = 1;
 			break;
+		case 'v':
+			verbose = true;
+			break;
 		default:
 			usage_unknown_option(cmd, argv);
 		}
@@ -354,7 +361,7 @@ static int cmd_device_scan(const struct cmd_struct *cmd, int argc, char **argv)
 			}
 		} else {
 			printf("Scanning for Btrfs filesystems\n");
-			ret = btrfs_scan_devices();
+			ret = btrfs_scan_devices(verbose);
 			error_on(ret, "error %d while scanning", ret);
 			ret = btrfs_register_all_devices();
 			error_on(ret,
diff --git a/cmds/filesystem.c b/cmds/filesystem.c
index 4f22089abeaa..02d47a43a792 100644
--- a/cmds/filesystem.c
+++ b/cmds/filesystem.c
@@ -746,7 +746,7 @@ devs_only:
 		else
 			ret = 1;
 	} else {
-		ret = btrfs_scan_devices();
+		ret = btrfs_scan_devices(false);
 	}
 
 	if (ret) {
diff --git a/common/device-scan.c b/common/device-scan.c
index 48dbd9e19715..a500edf0f7d7 100644
--- a/common/device-scan.c
+++ b/common/device-scan.c
@@ -360,7 +360,7 @@ void free_seen_fsid(struct seen_fsid *seen_fsid_hash[])
 	}
 }
 
-int btrfs_scan_devices(void)
+int btrfs_scan_devices(bool verbose)
 {
 	int fd = -1;
 	int ret;
@@ -389,6 +389,8 @@ int btrfs_scan_devices(void)
 			continue;
 		/* if we are here its definitely a btrfs disk*/
 		strncpy_null(path, blkid_dev_devname(dev));
+		if (verbose)
+			printf("blkid: btrfs device: %s\n", path);
 
 		fd = open(path, O_RDONLY);
 		if (fd < 0) {
diff --git a/common/device-scan.h b/common/device-scan.h
index eda2bae5c6c4..3e473c48d1af 100644
--- a/common/device-scan.h
+++ b/common/device-scan.h
@@ -1,6 +1,7 @@
 #ifndef __DEVICE_SCAN_H__
 #define __DEVICE_SCAN_H__
 
+#include <stdbool.h>
 #include "kerncompat.h"
 #include "ioctl.h"
 
@@ -29,7 +30,7 @@ struct seen_fsid {
 	int fd;
 };
 
-int btrfs_scan_devices(void);
+int btrfs_scan_devices(bool verbose);
 int btrfs_register_one_device(const char *fname);
 int btrfs_register_all_devices(void);
 int btrfs_add_to_fsid(struct btrfs_trans_handle *trans,
diff --git a/common/utils.c b/common/utils.c
index 6617b3ef38b1..9027de596f5d 100644
--- a/common/utils.c
+++ b/common/utils.c
@@ -277,7 +277,7 @@ int check_mounted_where(int fd, const char *file, char *where, int size,
 
 	/* scan other devices */
 	if (is_btrfs && total_devs > 1) {
-		ret = btrfs_scan_devices();
+		ret = btrfs_scan_devices(false);
 		if (ret)
 			return ret;
 	}
diff --git a/disk-io.c b/disk-io.c
index fa679133e171..58861ccfb4ec 100644
--- a/disk-io.c
+++ b/disk-io.c
@@ -1096,7 +1096,7 @@ int btrfs_scan_fs_devices(int fd, const char *path,
 	}
 
 	if (!skip_devices && total_devs != 1) {
-		ret = btrfs_scan_devices();
+		ret = btrfs_scan_devices(false);
 		if (ret)
 			return ret;
 	}
-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] btrfs-progs: add verbose option to btrfs device scan
  2019-10-02  4:11 [PATCH v3] btrfs-progs: add verbose option to btrfs device scan Anand Jain
  2019-10-02  4:44 ` [PATCH v3.1] " Anand Jain
@ 2019-10-07 17:41 ` " David Sterba
  2019-10-08  2:53   ` Anand Jain
  1 sibling, 1 reply; 6+ messages in thread
From: David Sterba @ 2019-10-07 17:41 UTC (permalink / raw)
  To: Anand Jain; +Cc: linux-btrfs

On Wed, Oct 02, 2019 at 12:11:52PM +0800, Anand Jain wrote:
> To help debug device scan issues, add verbose option to btrfs device scan.

The common options like --verbose are going to be added into the global
command so I'd rather avoid adding them to new subcommands as this would
become unnecessary compatibility issue.

There's an pattern to follow, the output formats (--format). So add a
definition for global verbosity options, add new GETOPT_VAL global enum
values that do not clash with existing options, add relevant
HELPINFO_INSERT_ text string and use it in commands where needed.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] btrfs-progs: add verbose option to btrfs device scan
  2019-10-07 17:41 ` [PATCH v3] " David Sterba
@ 2019-10-08  2:53   ` Anand Jain
  2019-10-14 15:24     ` David Sterba
  0 siblings, 1 reply; 6+ messages in thread
From: Anand Jain @ 2019-10-08  2:53 UTC (permalink / raw)
  To: dsterba, linux-btrfs

On 10/8/19 1:41 AM, David Sterba wrote:
> On Wed, Oct 02, 2019 at 12:11:52PM +0800, Anand Jain wrote:
>> To help debug device scan issues, add verbose option to btrfs device scan.
> 
> The common options like --verbose are going to be added into the global
> command so I'd rather avoid adding them to new subcommands as this would
> become unnecessary compatibility issue.

> There's an pattern to follow, the output formats (--format). So add a
> definition for global verbosity options, add new GETOPT_VAL global enum
> values that do not clash with existing options, add relevant
> HELPINFO_INSERT_ text string and use it in commands where needed.
> 

  IMO a debug option should rather be at the top level command.
  If verbose is the top level it would emit a lot of unwanted messages.
  Here is how a user is using --verbose option in dev scan.

 
https://lore.kernel.org/linux-btrfs/2daf15de-d1e7-b56a-be51-a6a3062ad28a@oracle.com/T/#t

------------
useful to get the list of devices it finds.
------------

  OR I didn't get the whole idea here. Looks like you are suggesting
  something like

   btrfs --verbose device scan
   btrfs --verbose subvolume list <mnt>
   ::

  How does the user will know if a subcommand will have any verbose
  or not?

  How would you not emit unwanted messages and keep the output clutter
  free.


Thanks, Anand

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] btrfs-progs: add verbose option to btrfs device scan
  2019-10-08  2:53   ` Anand Jain
@ 2019-10-14 15:24     ` David Sterba
  2019-10-15  3:29       ` Anand Jain
  0 siblings, 1 reply; 6+ messages in thread
From: David Sterba @ 2019-10-14 15:24 UTC (permalink / raw)
  To: Anand Jain; +Cc: dsterba, linux-btrfs

On Tue, Oct 08, 2019 at 10:53:37AM +0800, Anand Jain wrote:
> On 10/8/19 1:41 AM, David Sterba wrote:
> > On Wed, Oct 02, 2019 at 12:11:52PM +0800, Anand Jain wrote:
> >> To help debug device scan issues, add verbose option to btrfs device scan.
> > 
> > The common options like --verbose are going to be added into the global
> > command so I'd rather avoid adding them to new subcommands as this would
> > become unnecessary compatibility issue.
> 
> > There's an pattern to follow, the output formats (--format). So add a
> > definition for global verbosity options, add new GETOPT_VAL global enum
> > values that do not clash with existing options, add relevant
> > HELPINFO_INSERT_ text string and use it in commands where needed.
> > 
> 
>   IMO a debug option should rather be at the top level command.
>   If verbose is the top level it would emit a lot of unwanted messages.
>   Here is how a user is using --verbose option in dev scan.
> 
>  
> https://lore.kernel.org/linux-btrfs/2daf15de-d1e7-b56a-be51-a6a3062ad28a@oracle.com/T/#t
> 
> ------------
> useful to get the list of devices it finds.
> ------------
> 
>   OR I didn't get the whole idea here. Looks like you are suggesting
>   something like
> 
>    btrfs --verbose device scan
>    btrfs --verbose subvolume list <mnt>

Yes this is what I mean.

>    ::
> 
>   How does the user will know if a subcommand will have any verbose
>   or not?

The point is that the global option will work for all subcommands, so
the user does not have to know which support that or not. For
compatiblity reasons, what works now will continue to work. This means
that the verbosity option will be duplicated for some commands.

>   How would you not emit unwanted messages and keep the output clutter
>   free.

What unwanted messages? Though the verbosity option will be set as
global option, it will be up to the command itself what to print.

  $ btrfs -v device scan

would be equivalent to

  $ btrfs device scan -v

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3] btrfs-progs: add verbose option to btrfs device scan
  2019-10-14 15:24     ` David Sterba
@ 2019-10-15  3:29       ` Anand Jain
  0 siblings, 0 replies; 6+ messages in thread
From: Anand Jain @ 2019-10-15  3:29 UTC (permalink / raw)
  To: dsterba, linux-btrfs

On 10/14/19 11:24 PM, David Sterba wrote:
> On Tue, Oct 08, 2019 at 10:53:37AM +0800, Anand Jain wrote:
>> On 10/8/19 1:41 AM, David Sterba wrote:
>>> On Wed, Oct 02, 2019 at 12:11:52PM +0800, Anand Jain wrote:
>>>> To help debug device scan issues, add verbose option to btrfs device scan.
>>>
>>> The common options like --verbose are going to be added into the global
>>> command so I'd rather avoid adding them to new subcommands as this would
>>> become unnecessary compatibility issue.
>>
>>> There's an pattern to follow, the output formats (--format). So add a
>>> definition for global verbosity options, add new GETOPT_VAL global enum
>>> values that do not clash with existing options, add relevant
>>> HELPINFO_INSERT_ text string and use it in commands where needed.
>>>
>>
>>    IMO a debug option should rather be at the top level command.
>>    If verbose is the top level it would emit a lot of unwanted messages.
>>    Here is how a user is using --verbose option in dev scan.
>>
>>   
>> https://lore.kernel.org/linux-btrfs/2daf15de-d1e7-b56a-be51-a6a3062ad28a@oracle.com/T/#t
>>
>> ------------
>> useful to get the list of devices it finds.
>> ------------
>>
>>    OR I didn't get the whole idea here. Looks like you are suggesting
>>    something like
>>
>>     btrfs --verbose device scan
>>     btrfs --verbose subvolume list <mnt>
> 
> Yes this is what I mean.
> 
>>     ::
>>
>>    How does the user will know if a subcommand will have any verbose
>>    or not?
> 
> The point is that the global option will work for all subcommands, so
> the user does not have to know which support that or not. For
> compatiblity reasons, what works now will continue to work. This means
> that the verbosity option will be duplicated for some commands.
> 
>>    How would you not emit unwanted messages and keep the output clutter
>>    free.
> 
> What unwanted messages? Though the verbosity option will be set as
> global option, it will be up to the command itself what to print.
> 
>    $ btrfs -v device scan
> 
> would be equivalent to
> 
>    $ btrfs device scan -v
> 

  I was thinking there might be some common code between the
  sub-commands in btrfs-progs now or in future, and if the printf()
  due to verbose is required in one sub-command and the same printf()
  due to verbose is not required in another sub-command (which I
  called unwanted message) then we won't have any choice to not
  to print those unwanted printf().
  But as this is just an anticipatory only, so probably we could try
  global verbose and see how it fares. I will try.

Thanks, Anand


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, back to index

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-02  4:11 [PATCH v3] btrfs-progs: add verbose option to btrfs device scan Anand Jain
2019-10-02  4:44 ` [PATCH v3.1] " Anand Jain
2019-10-07 17:41 ` [PATCH v3] " David Sterba
2019-10-08  2:53   ` Anand Jain
2019-10-14 15:24     ` David Sterba
2019-10-15  3:29       ` Anand Jain

Linux-BTRFS Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-btrfs/0 linux-btrfs/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-btrfs linux-btrfs/ https://lore.kernel.org/linux-btrfs \
		linux-btrfs@vger.kernel.org linux-btrfs@archiver.kernel.org
	public-inbox-index linux-btrfs

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-btrfs


AGPL code for this site: git clone https://public-inbox.org/ public-inbox