[PATCH] btrfs-progs: add '-b' option to filesystem df and show

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Add '-b' and '--bytes' options to btrfs filesystem df and show, for easier
integration with scripts. This causes all sizes to be displayed in decimal
bytes instead of pretty-printed with human-readable suffices KB, MB, etc.

Signed-off-by: Audrius Butkevicius <audrius.butkevicius@xxxxxxxxxxxxxxxx>
---
 cmds-filesystem.c |   93 +++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 68 insertions(+), 25 deletions(-)

diff --git a/cmds-filesystem.c b/cmds-filesystem.c
index 507239a..9392209 100644
--- a/cmds-filesystem.c
+++ b/cmds-filesystem.c
@@ -40,7 +40,7 @@ static const char * const filesystem_cmd_group_usage[] = {
 };
 
 static const char * const cmd_df_usage[] = {
-	"btrfs filesystem df <path>",
+	"btrfs filesystem df [-b|--bytes] <path>",
 	"Show space usage information for a mount point",
 	NULL
 };
@@ -53,11 +53,23 @@ static int cmd_df(int argc, char **argv)
 	int fd;
 	int e;
 	char *path;
+	int start = 1;
+	int rawbytes = 0;
+
+	while (argc > start) {
+		if (!strcmp(argv[start], "--bytes") ||
+		    !strcmp(argv[start], "-b")) {
+			rawbytes = 1;
+			start += 1;
+		} else {
+			break;
+		}
+	}
 
-	if (check_argc_exact(argc, 2))
+	if (check_argc_exact(argc, start + 1))
 		usage(cmd_df_usage);
 
-	path = argv[1];
+	path = argv[start];
 
 	fd = open_file_or_dir(path);
 	if (fd < 0) {
@@ -150,10 +162,18 @@ static int cmd_df(int argc, char **argv)
 			written += 8;
 		}
 
-		total_bytes = pretty_sizes(sargs->spaces[i].total_bytes);
-		used_bytes = pretty_sizes(sargs->spaces[i].used_bytes);
-		printf("%s: total=%s, used=%s\n", description, total_bytes,
-		       used_bytes);
+		if (rawbytes) {
+			printf("%s: total=%llu, used=%llu\n", description,
+			       (unsigned long long)sargs->spaces[i].total_bytes,
+			       (unsigned long long)sargs->spaces[i].used_bytes);
+		} else {
+			total_bytes = pretty_sizes(sargs->spaces[i].total_bytes);
+			used_bytes = pretty_sizes(sargs->spaces[i].used_bytes);
+			printf("%s: total=%s, used=%s\n", description, total_bytes,
+			       used_bytes);
+			free(total_bytes);
+			free(bytes_used);
+		}
 	}
 	close(fd);
 	free(sargs);
@@ -182,7 +202,7 @@ static int uuid_search(struct btrfs_fs_devices *fs_devices, char *search)
 	return 0;
 }
 
-static void print_one_uuid(struct btrfs_fs_devices *fs_devices)
+static void print_one_uuid(struct btrfs_fs_devices *fs_devices, int rawbytes)
 {
 	char uuidbuf[37];
 	struct list_head *cur;
@@ -199,25 +219,39 @@ static void print_one_uuid(struct btrfs_fs_devices *fs_devices)
 	else
 		printf("Label: none ");
 
-	super_bytes_used = pretty_sizes(device->super_bytes_used);
-
 	total = device->total_devs;
-	printf(" uuid: %s\n\tTotal devices %llu FS bytes used %s\n", uuidbuf,
-	       (unsigned long long)total, super_bytes_used);
 
-	free(super_bytes_used);
+	if (rawbytes) {
+		printf(" uuid: %s\n\tTotal devices %llu FS bytes used %llu\n",
+		       uuidbuf, (unsigned long long)total,
+		       (unsigned long long)device->super_bytes_used);
+	} else {
+		super_bytes_used = pretty_sizes(device->super_bytes_used);
+		printf(" uuid: %s\n\tTotal devices %llu FS bytes used %s\n",
+		       uuidbuf, (unsigned long long)total, super_bytes_used);
+		free(super_bytes_used);
+	}
 
 	list_for_each(cur, &fs_devices->devices) {
 		char *total_bytes;
 		char *bytes_used;
 		device = list_entry(cur, struct btrfs_device, dev_list);
-		total_bytes = pretty_sizes(device->total_bytes);
-		bytes_used = pretty_sizes(device->bytes_used);
-		printf("\tdevid %4llu size %s used %s path %s\n",
-		       (unsigned long long)device->devid,
-		       total_bytes, bytes_used, device->name);
-		free(total_bytes);
-		free(bytes_used);
+		if (rawbytes) {
+			printf("\tdevid %4llu size %llu used %llu path %s\n",
+			       (unsigned long long)device->devid,
+			       (unsigned long long)device->total_bytes,
+			       (unsigned long long)device->bytes_used,
+			       device->name);
+		}
+		else {
+			total_bytes = pretty_sizes(device->total_bytes);
+			bytes_used = pretty_sizes(device->bytes_used);
+			printf("\tdevid %4llu size %s used %s path %s\n",
+			       (unsigned long long)device->devid,
+			       total_bytes, bytes_used, device->name);
+			free(total_bytes);
+			free(bytes_used);
+		}
 		devs_found++;
 	}
 	if (devs_found < total) {
@@ -227,7 +261,7 @@ static void print_one_uuid(struct btrfs_fs_devices *fs_devices)
 }
 
 static const char * const cmd_show_usage[] = {
-	"btrfs filesystem show [--all-devices] [<uuid>|<label>]",
+	"btrfs filesystem show [--all-devices] [-b|--bytes] [<uuid>|<label>]",
 	"Show the structure of a filesystem",
 	"If no argument is given, structure of all present filesystems is shown.",
 	NULL
@@ -240,12 +274,21 @@ static int cmd_show(int argc, char **argv)
 	struct list_head *cur_uuid;
 	char *search = 0;
 	int ret;
+	int rawbytes = 0;
 	int checklist = 1;
 	int searchstart = 1;
 
-	if( argc > 1 && !strcmp(argv[1],"--all-devices")){
-		checklist = 0;
-		searchstart += 1;
+	while (argc > searchstart) {
+		if (!strcmp(argv[searchstart], "--all-devices")) {
+			checklist = 0;
+			searchstart += 1;
+		} else if (!strcmp(argv[searchstart], "--bytes") ||
+			    !strcmp(argv[searchstart], "-b")) {
+			rawbytes = 1;
+			searchstart += 1;
+		} else {
+			break;
+		}
 	}
 
 	if (check_argc_max(argc, searchstart + 1))
@@ -270,7 +313,7 @@ static int cmd_show(int argc, char **argv)
 					list);
 		if (search && uuid_search(fs_devices, search) == 0)
 			continue;
-		print_one_uuid(fs_devices);
+		print_one_uuid(fs_devices, rawbytes);
 	}
 	printf("%s\n", BTRFS_BUILD_VERSION);
 	return 0;
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux