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 <zhao...@cn.fujitsu.com> --- mkfs.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/mkfs.c b/mkfs.c index 14e7eb4..75fc086 100644 --- a/mkfs.c +++ b/mkfs.c @@ -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; @@ -1148,6 +1149,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; @@ -1160,12 +1168,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); -- 1.8.5.1 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html