btrfs-progs: Print more info about device sizes
authorDavid Sterba <dsterba@suse.cz>
Thu, 24 Apr 2014 16:32:27 +0000 (18:32 +0200)
committerDavid Sterba <dsterba@suse.cz>
Thu, 4 Dec 2014 15:48:11 +0000 (16:48 +0100)
The entire device size may not be available to the filesystem, eg. if
it's modified via resize. Print this information if it can be obtained
from the DEV_INFO ioctl.

Print the device ID on the same line as the device name and move size to
the next line.

Sample:
/dev/sda7, ID: 3
   Device size:            10.00GiB
   FS occupied:             5.00GiB
   Data,RAID10:           512.00MiB
   Metadata,RAID10:       512.00MiB
   System,RAID10:           4.00MiB
   Unallocated:             9.00GiB

Signed-off-by: David Sterba <dsterba@suse.cz>
cmds-device.c
cmds-fi-disk_usage.c
cmds-fi-disk_usage.h

index 2fe33eb..546db6d 100644 (file)
@@ -474,9 +474,9 @@ static int _cmd_device_usage(int fd, char *path, int mode)
        }
 
        for (i = 0; i < device_info_count; i++) {
-               printf("%s\t%10s\n", device_info_ptr[i].path,
-                       df_pretty_sizes(device_info_ptr[i].size, mode));
-
+               printf("%s, ID: %llu\n", device_info_ptr[i].path,
+                               device_info_ptr[i].devid);
+               print_device_sizes(fd, &device_info_ptr[i], mode);
                print_device_chunks(fd, device_info_ptr[i].devid,
                                device_info_ptr[i].size,
                                info_ptr, info_count,
index f984be8..83a3c6d 100644 (file)
@@ -499,7 +499,8 @@ int load_device_info(int fd, struct device_info **device_info_ptr,
 
                info[ndevs].devid = dev_info.devid;
                strcpy(info[ndevs].path, (char *)dev_info.path);
-               info[ndevs].size = get_partition_size((char *)dev_info.path);
+               info[ndevs].device_size = get_partition_size((char *)dev_info.path);
+               info[ndevs].size = dev_info.total_bytes;
                ++ndevs;
        }
 
@@ -879,5 +880,14 @@ void print_device_chunks(int fd, u64 devid, u64 total_size,
        printf("   Unallocated: %*s%10s\n",
                (int)(20 - strlen("Unallocated")), "",
                df_pretty_sizes(total_size - allocated, mode));
+}
 
+void print_device_sizes(int fd, struct device_info *devinfo, int mode)
+{
+       printf("   Device size: %*s%10s\n",
+               (int)(20 - strlen("Device size")), "",
+               df_pretty_sizes(devinfo->device_size, mode));
+       printf("   FS occupied: %*s%10s\n",
+               (int)(20 - strlen("FS occupied")), "",
+               df_pretty_sizes(devinfo->size, mode));
 }
index 787b4eb..79cc2a1 100644 (file)
@@ -27,7 +27,10 @@ int cmd_filesystem_usage(int argc, char **argv);
 struct device_info {
        u64     devid;
        char    path[BTRFS_DEVICE_PATH_NAME_MAX];
-       u64     size;
+       /* Size of the block device */
+       u64     device_size;
+       /* Size that's occupied by the filesystem, can be changed via resize */
+       u64     size;
 };
 
 /*
@@ -50,5 +53,6 @@ char *df_pretty_sizes(u64 size, int mode);
 void print_device_chunks(int fd, u64 devid, u64 total_size,
                struct chunk_info *chunks_info_ptr,
                int chunks_info_count, int mode);
+void print_device_sizes(int fd, struct device_info *devinfo, int mode);
 
 #endif