summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhao Lei <zhaolei@cn.fujitsu.com>2015-11-03 19:03:00 +0800
committerDavid Sterba <dsterba@suse.com>2015-11-03 12:56:52 +0100
commit568a3743f52d82b044e4a9f0d27170eba361e7bc (patch)
tree08deb4483280d6a7bd0b94fb4439c507cf30b47a
parentc5cb2432bfea5a657495d511bcbfd38dcb8cba41 (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.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/mkfs.c b/mkfs.c
index 86917340..70883d3f 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;
@@ -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);