On 01/18/2018 04:32 PM, Nikolay Borisov wrote:
On 18.01.2018 04:32, Anand Jain wrote:
By maintaining the device order consistency it makes reproducing
the problem more consistent. So fix this by having the devices
Which problem is that ?
I noticed when trying to reproduce raid1 missed writes issue
(xfstests test case is coming up). This is good to have as
such with any device related issue.
Thanks, Anand
sorted by some order within the kernel, lets say by devid.
Signed-off-by: Anand Jain <anand.j...@oracle.com>
---
fs/btrfs/volumes.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index d393808071d5..68be58a5b03f 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -27,6 +27,7 @@
#include <linux/raid/pq.h>
#include <linux/semaphore.h>
#include <linux/uuid.h>
+#include <linux/list_sort.h>
#include <asm/div64.h>
#include "ctree.h"
#include "extent_map.h"
@@ -1108,6 +1109,20 @@ static int __btrfs_open_devices(struct btrfs_fs_devices
*fs_devices,
return ret;
}
+static int device_sort(void *priv, struct list_head *a, struct list_head *b)
+{
+ struct btrfs_device *dev1, *dev2;
+
+ dev1 = list_entry(a, struct btrfs_device, dev_list);
+ dev2 = list_entry(b, struct btrfs_device, dev_list);
+
+ if (dev1->devid < dev2->devid)
+ return -1;
+ else if (dev1->devid > dev2->devid)
+ return 1;
+ return 0;
+}
+
int btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
fmode_t flags, void *holder)
{
@@ -1118,6 +1133,7 @@ int btrfs_open_devices(struct btrfs_fs_devices
*fs_devices,
fs_devices->opened++;
ret = 0;
} else {
+ list_sort(NULL, &fs_devices->devices, device_sort);
ret = __btrfs_open_devices(fs_devices, flags, holder);
}
mutex_unlock(&uuid_mutex);
--
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