linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] fix device orders consistency
@ 2018-01-22 22:49 Anand Jain
  2018-01-22 22:49 ` [PATCH v2 1/2] btrfs: fix device order consistency Anand Jain
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Anand Jain @ 2018-01-22 22:49 UTC (permalink / raw)
  To: linux-btrfs

Hi David,

 Could you pls consider this for 4.16 ?

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] 6+ messages in thread

* [PATCH v2 1/2] btrfs: fix device order consistency
  2018-01-22 22:49 [PATCH v2 0/2] fix device orders consistency Anand Jain
@ 2018-01-22 22:49 ` Anand Jain
  2018-01-30 14:20   ` David Sterba
  2018-01-22 22:49 ` [PATCH v2 2/2] btrfs: fix alloc " Anand Jain
  2018-01-30 14:16 ` [PATCH v2 0/2] fix device orders consistency David Sterba
  2 siblings, 1 reply; 6+ messages in thread
From: Anand Jain @ 2018-01-22 22:49 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 03f2685a5018..98e41d286283 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"
@@ -1107,6 +1108,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)
 {
@@ -1117,6 +1132,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);
-- 
2.7.0


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

* [PATCH v2 2/2] btrfs: fix alloc device order consistency
  2018-01-22 22:49 [PATCH v2 0/2] fix device orders consistency Anand Jain
  2018-01-22 22:49 ` [PATCH v2 1/2] btrfs: fix device order consistency Anand Jain
@ 2018-01-22 22:49 ` Anand Jain
  2018-01-30 14:16 ` [PATCH v2 0/2] fix device orders consistency David Sterba
  2 siblings, 0 replies; 6+ messages in thread
From: Anand Jain @ 2018-01-22 22:49 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 98e41d286283..879fb07a952b 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -713,7 +713,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] 6+ messages in thread

* Re: [PATCH v2 0/2] fix device orders consistency
  2018-01-22 22:49 [PATCH v2 0/2] fix device orders consistency Anand Jain
  2018-01-22 22:49 ` [PATCH v2 1/2] btrfs: fix device order consistency Anand Jain
  2018-01-22 22:49 ` [PATCH v2 2/2] btrfs: fix alloc " Anand Jain
@ 2018-01-30 14:16 ` David Sterba
  2 siblings, 0 replies; 6+ messages in thread
From: David Sterba @ 2018-01-30 14:16 UTC (permalink / raw)
  To: Anand Jain; +Cc: linux-btrfs

On Mon, Jan 22, 2018 at 02:49:35PM -0800, Anand Jain wrote:
>  Could you pls consider this for 4.16 ?

Sorry, the patches are not fixes and I'll probably not add them to 4.16
and they missed the first pull. But I will add them to misc-next so they
still help debugging and any fix that you come up with can be added to
4.16-rc independently.

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

* Re: [PATCH v2 1/2] btrfs: fix device order consistency
  2018-01-22 22:49 ` [PATCH v2 1/2] btrfs: fix device order consistency Anand Jain
@ 2018-01-30 14:20   ` David Sterba
  2018-01-31  2:29     ` Anand Jain
  0 siblings, 1 reply; 6+ messages in thread
From: David Sterba @ 2018-01-30 14:20 UTC (permalink / raw)
  To: Anand Jain; +Cc: linux-btrfs

On Mon, Jan 22, 2018 at 02:49:36PM -0800, Anand Jain wrote:
> 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 03f2685a5018..98e41d286283 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"
> @@ -1107,6 +1108,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)

I'll rename that to devid_cmp as it's the comparator and not really a
sorting function.

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

* Re: [PATCH v2 1/2] btrfs: fix device order consistency
  2018-01-30 14:20   ` David Sterba
@ 2018-01-31  2:29     ` Anand Jain
  0 siblings, 0 replies; 6+ messages in thread
From: Anand Jain @ 2018-01-31  2:29 UTC (permalink / raw)
  To: dsterba, linux-btrfs


>>   
>> +static int device_sort(void *priv, struct list_head *a, struct list_head *b)
> 
> I'll rename that to devid_cmp as it's the comparator and not really a
> sorting function.

  Ok. I will make that change in v3.

Thanks,
Anand

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

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

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-22 22:49 [PATCH v2 0/2] fix device orders consistency Anand Jain
2018-01-22 22:49 ` [PATCH v2 1/2] btrfs: fix device order consistency Anand Jain
2018-01-30 14:20   ` David Sterba
2018-01-31  2:29     ` Anand Jain
2018-01-22 22:49 ` [PATCH v2 2/2] btrfs: fix alloc " Anand Jain
2018-01-30 14:16 ` [PATCH v2 0/2] fix device orders consistency David Sterba

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).