All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/2] fix device orders consistency
@ 2018-01-31  2:28 Anand Jain
  2018-01-31  2:28 ` [PATCH v3 1/2] btrfs: fix device order consistency Anand Jain
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Anand Jain @ 2018-01-31  2:28 UTC (permalink / raw)
  To: linux-btrfs

v3->v2:
 rename device_sort() to device_cmp().
v1->v2:
 No code change. Change log updated to include the type
 of problem that this consistency would help. And
 I don't see patch 2/2 in the ML. So trying to resend.

By maintaining the device order (some) consistency it makes reproducing
the missing chunk related problems more consistent. (More fixes of this
sort is coming up).

Anand Jain (2):
  btrfs: fix device order consistency
  btrfs: fix alloc device order consistency

 fs/btrfs/volumes.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

-- 
2.7.0

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v3 1/2] btrfs: fix device order consistency
  2018-01-31  2:28 [PATCH v3 0/2] fix device orders consistency Anand Jain
@ 2018-01-31  2:28 ` Anand Jain
  2018-01-31  2:28 ` [PATCH v3 2/2] btrfs: fix alloc " Anand Jain
  2018-01-31  7:03 ` [PATCH v3 0/2] fix device orders consistency Nikolay Borisov
  2 siblings, 0 replies; 4+ messages in thread
From: Anand Jain @ 2018-01-31  2:28 UTC (permalink / raw)
  To: linux-btrfs

By maintaining the device order consistency it makes reproducing
the problems related to missing chunk in the degraded mode much more
consistent. So fix this by sorting the devices by devid within the
kernel. So that we know which device is assigned to the struct
fs_info::latest_bdev when all the devices are having and same
SB generation.

Signed-off-by: Anand Jain <anand.jain@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 b5036bd69e6a..0109f370ad5b 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"
@@ -1102,6 +1103,20 @@ static int __btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
 	return ret;
 }
 
+static int device_cmp(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)
 {
@@ -1112,6 +1127,7 @@ int btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
 		fs_devices->opened++;
 		ret = 0;
 	} else {
+		list_sort(NULL, &fs_devices->devices, device_cmp);
 		ret = __btrfs_open_devices(fs_devices, flags, holder);
 	}
 	mutex_unlock(&uuid_mutex);
-- 
2.7.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v3 2/2] btrfs: fix alloc device order consistency
  2018-01-31  2:28 [PATCH v3 0/2] fix device orders consistency Anand Jain
  2018-01-31  2:28 ` [PATCH v3 1/2] btrfs: fix device order consistency Anand Jain
@ 2018-01-31  2:28 ` Anand Jain
  2018-01-31  7:03 ` [PATCH v3 0/2] fix device orders consistency Nikolay Borisov
  2 siblings, 0 replies; 4+ messages in thread
From: Anand Jain @ 2018-01-31  2:28 UTC (permalink / raw)
  To: linux-btrfs

Add opened device to the tail of dev_alloc_list instead of head, so that
it maintains the same order as dev_list.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
---
 fs/btrfs/volumes.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index 0109f370ad5b..9c3b4ff7f505 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -708,7 +708,7 @@ static int btrfs_open_one_device(struct btrfs_fs_devices *fs_devices,
 	if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state) &&
 	    device->devid != BTRFS_DEV_REPLACE_DEVID) {
 		fs_devices->rw_devices++;
-		list_add(&device->dev_alloc_list, &fs_devices->alloc_list);
+		list_add_tail(&device->dev_alloc_list, &fs_devices->alloc_list);
 	}
 	brelse(bh);
 
-- 
2.7.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 0/2] fix device orders consistency
  2018-01-31  2:28 [PATCH v3 0/2] fix device orders consistency Anand Jain
  2018-01-31  2:28 ` [PATCH v3 1/2] btrfs: fix device order consistency Anand Jain
  2018-01-31  2:28 ` [PATCH v3 2/2] btrfs: fix alloc " Anand Jain
@ 2018-01-31  7:03 ` Nikolay Borisov
  2 siblings, 0 replies; 4+ messages in thread
From: Nikolay Borisov @ 2018-01-31  7:03 UTC (permalink / raw)
  To: Anand Jain, linux-btrfs



On 31.01.2018 04:28, Anand Jain wrote:
> v3->v2:
>  rename device_sort() to device_cmp().
> v1->v2:
>  No code change. Change log updated to include the type
>  of problem that this consistency would help. And
>  I don't see patch 2/2 in the ML. So trying to resend.
> 
> By maintaining the device order (some) consistency it makes reproducing
> the missing chunk related problems more consistent. (More fixes of this
> sort is coming up).
> 
> Anand Jain (2):
>   btrfs: fix device order consistency
>   btrfs: fix alloc device order consistency
> 
>  fs/btrfs/volumes.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
> 

For the whole series:

Reviewed-by: Nikolay Borisov <nborisov@suse.com>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-01-31  7:03 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-31  2:28 [PATCH v3 0/2] fix device orders consistency Anand Jain
2018-01-31  2:28 ` [PATCH v3 1/2] btrfs: fix device order consistency Anand Jain
2018-01-31  2:28 ` [PATCH v3 2/2] btrfs: fix alloc " Anand Jain
2018-01-31  7:03 ` [PATCH v3 0/2] fix device orders consistency Nikolay Borisov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.