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

By maintaining the device order (some) consistency it makes reproducing
the problem more consistent.

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.15.0


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

* [PATCH 1/2] btrfs: fix device order consistency
  2018-01-18  2:32 [PATCH 0/2] fix device orders consistency Anand Jain
@ 2018-01-18  2:32 ` Anand Jain
  2018-01-18  8:32   ` Nikolay Borisov
  2018-01-18  2:32 ` [PATCH 2/2] btrfs: fix alloc " Anand Jain
  1 sibling, 1 reply; 5+ messages in thread
From: Anand Jain @ 2018-01-18  2:32 UTC (permalink / raw)
  To: linux-btrfs

By maintaining the device order consistency it makes reproducing
the problem more consistent. So fix this by having the devices
sorted by some order within the kernel, lets say by devid.

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 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);
-- 
2.15.0


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

* [PATCH 2/2] btrfs: fix alloc device order consistency
  2018-01-18  2:32 [PATCH 0/2] fix device orders consistency Anand Jain
  2018-01-18  2:32 ` [PATCH 1/2] btrfs: fix device order consistency Anand Jain
@ 2018-01-18  2:32 ` Anand Jain
  1 sibling, 0 replies; 5+ messages in thread
From: Anand Jain @ 2018-01-18  2:32 UTC (permalink / raw)
  To: linux-btrfs

Add opened device to the tail of dev_alloc_list 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 68be58a5b03f..543c166049e7 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.15.0


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

* Re: [PATCH 1/2] btrfs: fix device order consistency
  2018-01-18  2:32 ` [PATCH 1/2] btrfs: fix device order consistency Anand Jain
@ 2018-01-18  8:32   ` Nikolay Borisov
  2018-01-18 13:55     ` Anand Jain
  0 siblings, 1 reply; 5+ messages in thread
From: Nikolay Borisov @ 2018-01-18  8:32 UTC (permalink / raw)
  To: Anand Jain, linux-btrfs



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 ?

> sorted by some order within the kernel, lets say by devid.
> 
> 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 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);
> 

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

* Re: [PATCH 1/2] btrfs: fix device order consistency
  2018-01-18  8:32   ` Nikolay Borisov
@ 2018-01-18 13:55     ` Anand Jain
  0 siblings, 0 replies; 5+ messages in thread
From: Anand Jain @ 2018-01-18 13:55 UTC (permalink / raw)
  To: Nikolay Borisov, linux-btrfs



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.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 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);
>>

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

end of thread, other threads:[~2018-01-18 13:54 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-18  2:32 [PATCH 0/2] fix device orders consistency Anand Jain
2018-01-18  2:32 ` [PATCH 1/2] btrfs: fix device order consistency Anand Jain
2018-01-18  8:32   ` Nikolay Borisov
2018-01-18 13:55     ` Anand Jain
2018-01-18  2:32 ` [PATCH 2/2] btrfs: fix alloc " Anand Jain

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.