* [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
* 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
* [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
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 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).