diff options
author | Zhao Lei <zhaolei@cn.fujitsu.com> | 2015-11-03 19:03:00 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2015-11-03 12:56:52 +0100 |
commit | 568a3743f52d82b044e4a9f0d27170eba361e7bc (patch) | |
tree | 08deb4483280d6a7bd0b94fb4439c507cf30b47a | |
parent | c5cb2432bfea5a657495d511bcbfd38dcb8cba41 (diff) |
btrfs-progs: mkfs: output device list in sorted order
list_for_each_entry_reverse() in current code can not output
devices in sorted order, because the sequence are broken in
btrfs_alloc_chunk().
We can use list_sort() instead.
Before patch:
# mkfs.btrfs -f /dev/vdd /dev/vde /dev/vdf
...
Number of devices: 3
Devices:
ID SIZE PATH
3 2.60GiB /dev/vdf
1 2.60GiB /dev/vdd
2 2.60GiB /dev/vde
After patch:
# mkfs.btrfs -f /dev/vdd /dev/vde /dev/vdf
...
Number of devices: 3
Devices:
ID SIZE PATH
1 2.60GiB /dev/vdd
2 2.60GiB /dev/vde
3 2.60GiB /dev/vdf
Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r-- | mkfs.c | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -42,6 +42,7 @@ #include "volumes.h" #include "transaction.h" #include "utils.h" +#include "list_sort.h" static u64 index_cnt = 2; static int verbose = 1; @@ -1146,6 +1147,13 @@ static int is_ssd(const char *file) return !atoi((const char *)&rotational); } +static int _cmp_device_by_id(void *priv, struct list_head *a, + struct list_head *b) +{ + return list_entry(a, struct btrfs_device, dev_list)->devid - + list_entry(b, struct btrfs_device, dev_list)->devid; +} + static void list_all_devices(struct btrfs_root *root) { struct btrfs_fs_devices *fs_devices; @@ -1158,12 +1166,14 @@ static void list_all_devices(struct btrfs_root *root) list_for_each_entry(device, &fs_devices->devices, dev_list) number_of_devices++; + list_sort(NULL, &fs_devices->devices, _cmp_device_by_id); + printf("Number of devices: %d\n", number_of_devices); /* printf("Total devices size: %10s\n", */ /* pretty_size(total_block_count)); */ printf("Devices:\n"); printf(" ID SIZE PATH\n"); - list_for_each_entry_reverse(device, &fs_devices->devices, dev_list) { + list_for_each_entry(device, &fs_devices->devices, dev_list) { char dev_uuid[BTRFS_UUID_UNPARSED_SIZE]; uuid_unparse(device->uuid, dev_uuid); |