* [PATCH RESEND v3 0/6] preparatory work to add device forget
@ 2018-01-09 14:13 Anand Jain
2018-01-09 14:13 ` [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage Anand Jain
` (5 more replies)
0 siblings, 6 replies; 20+ messages in thread
From: Anand Jain @ 2018-01-09 14:13 UTC (permalink / raw)
To: linux-btrfs
v2->v3:
@ 6/6:
add btrfs_free_stale_device() fn description, suggested by Nikolay
Fix line with longer than 80 char
v1->v2:
@ 6/6:
btrfs_device::name is null when we have missing device and
unmounted. So we still need to check for dev->name.
We can reuse the function btrfs_free_stale_device() to add feature
to forget a scanned device or all stale devices. So this patch set
proposes following changes to it.
Anand Jain (6):
btrfs: cleanup btrfs_free_stale_device() usage
btrfs: no need to check for btrfs_fs_devices::seeding
btrfs: make btrfs_free_stale_device() to delete all stales
btrfs: make btrfs_free_stale_device() argument optional
btrfs: make btrfs_free_stale_device() to search given path
btrfs: cleanup to make btrfs_free_stale_device() readable
fs/btrfs/volumes.c | 50 +++++++++++++++-----------------------------------
1 file changed, 15 insertions(+), 35 deletions(-)
--
2.7.0
^ permalink raw reply [flat|nested] 20+ messages in thread* [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage 2018-01-09 14:13 [PATCH RESEND v3 0/6] preparatory work to add device forget Anand Jain @ 2018-01-09 14:13 ` Anand Jain 2018-01-09 16:18 ` Josef Bacik 2018-01-09 14:13 ` [PATCH 2/6] btrfs: no need to check for btrfs_fs_devices::seeding Anand Jain ` (4 subsequent siblings) 5 siblings, 1 reply; 20+ messages in thread From: Anand Jain @ 2018-01-09 14:13 UTC (permalink / raw) To: linux-btrfs We call btrfs_free_stale_device() only when we alloc a new struct btrfs_device (ret=1), so move it closer to where we alloc the new device. Also drop the comments. Signed-off-by: Anand Jain <anand.jain@oracle.com> --- fs/btrfs/volumes.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 9a04245003ab..7e04cd509ab9 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -782,6 +782,7 @@ static noinline int device_list_add(const char *path, ret = 1; device->fs_devices = fs_devices; + btrfs_free_stale_device(device); } else if (!device->name || strcmp(device->name->str, path)) { /* * When FS is already mounted. @@ -840,13 +841,6 @@ static noinline int device_list_add(const char *path, if (!fs_devices->opened) device->generation = found_transid; - /* - * if there is new btrfs on an already registered device, - * then remove the stale device entry. - */ - if (ret > 0) - btrfs_free_stale_device(device); - *fs_devices_ret = fs_devices; return ret; -- 2.7.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage 2018-01-09 14:13 ` [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage Anand Jain @ 2018-01-09 16:18 ` Josef Bacik 0 siblings, 0 replies; 20+ messages in thread From: Josef Bacik @ 2018-01-09 16:18 UTC (permalink / raw) To: Anand Jain; +Cc: linux-btrfs On Tue, Jan 09, 2018 at 10:13:09PM +0800, Anand Jain wrote: > We call btrfs_free_stale_device() only when we alloc a new > struct btrfs_device (ret=1), so move it closer to where we > alloc the new device. Also drop the comments. > > Signed-off-by: Anand Jain <anand.jain@oracle.com> Reviewed-by: Josef Bacik <jbacik@fb.com> Thanks, Josef ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 2/6] btrfs: no need to check for btrfs_fs_devices::seeding 2018-01-09 14:13 [PATCH RESEND v3 0/6] preparatory work to add device forget Anand Jain 2018-01-09 14:13 ` [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage Anand Jain @ 2018-01-09 14:13 ` Anand Jain 2018-01-09 16:19 ` Josef Bacik 2018-01-09 14:13 ` [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales Anand Jain ` (3 subsequent siblings) 5 siblings, 1 reply; 20+ messages in thread From: Anand Jain @ 2018-01-09 14:13 UTC (permalink / raw) To: linux-btrfs There is no need to check for btrfs_fs_devices::seeding when we have checked for btrfs_fs_devices::opened, because we can't sprout without its seed FS being opened. Signed-off-by: Anand Jain <anand.jain@oracle.com> --- fs/btrfs/volumes.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 7e04cd509ab9..ab6ccad08ef7 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -619,8 +619,6 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) if (fs_devs->opened) continue; - if (fs_devs->seeding) - continue; list_for_each_entry(dev, &fs_devs->devices, dev_list) { -- 2.7.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 2/6] btrfs: no need to check for btrfs_fs_devices::seeding 2018-01-09 14:13 ` [PATCH 2/6] btrfs: no need to check for btrfs_fs_devices::seeding Anand Jain @ 2018-01-09 16:19 ` Josef Bacik 0 siblings, 0 replies; 20+ messages in thread From: Josef Bacik @ 2018-01-09 16:19 UTC (permalink / raw) To: Anand Jain; +Cc: linux-btrfs On Tue, Jan 09, 2018 at 10:13:10PM +0800, Anand Jain wrote: > There is no need to check for btrfs_fs_devices::seeding when we > have checked for btrfs_fs_devices::opened, because we can't sprout > without its seed FS being opened. > > Signed-off-by: Anand Jain <anand.jain@oracle.com> Reviewed-by: Josef Bacik <jbacik@fb.com> Thanks, Josef ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales 2018-01-09 14:13 [PATCH RESEND v3 0/6] preparatory work to add device forget Anand Jain 2018-01-09 14:13 ` [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage Anand Jain 2018-01-09 14:13 ` [PATCH 2/6] btrfs: no need to check for btrfs_fs_devices::seeding Anand Jain @ 2018-01-09 14:13 ` Anand Jain 2018-01-09 16:21 ` Josef Bacik 2018-01-09 14:13 ` [PATCH 4/6] btrfs: make btrfs_free_stale_device() argument optional Anand Jain ` (2 subsequent siblings) 5 siblings, 1 reply; 20+ messages in thread From: Anand Jain @ 2018-01-09 14:13 UTC (permalink / raw) To: linux-btrfs From: Anand Jain <Anand.Jain@oracle.com> Let the list iterator iterate further and find other stale devices and delete it. This is in preparation to add support for user land request-able stale devices cleanup. Signed-off-by: Anand Jain <anand.jain@oracle.com> --- fs/btrfs/volumes.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index ab6ccad08ef7..7b253da6c0a4 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -608,19 +608,20 @@ static void pending_bios_fn(struct btrfs_work *work) static void btrfs_free_stale_device(struct btrfs_device *cur_dev) { - struct btrfs_fs_devices *fs_devs; - struct btrfs_device *dev; + struct btrfs_fs_devices *fs_devs, *tmp_fs_devs; + struct btrfs_device *dev, *tmp_dev; if (!cur_dev->name) return; - list_for_each_entry(fs_devs, &fs_uuids, list) { - int del = 1; + list_for_each_entry_safe(fs_devs, tmp_fs_devs, &fs_uuids, list) { if (fs_devs->opened) continue; - list_for_each_entry(dev, &fs_devs->devices, dev_list) { + list_for_each_entry_safe(dev, tmp_dev, + &fs_devs->devices, dev_list) { + int not_found; if (dev == cur_dev) continue; @@ -634,14 +635,12 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) * either use mapper or non mapper path throughout. */ rcu_read_lock(); - del = strcmp(rcu_str_deref(dev->name), + not_found = strcmp(rcu_str_deref(dev->name), rcu_str_deref(cur_dev->name)); rcu_read_unlock(); - if (!del) - break; - } + if (not_found) + continue; - if (!del) { /* delete the stale device */ if (fs_devs->num_devices == 1) { btrfs_sysfs_remove_fsid(fs_devs); @@ -652,7 +651,6 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) list_del(&dev->dev_list); free_device(dev); } - break; } } } -- 2.7.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales 2018-01-09 14:13 ` [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales Anand Jain @ 2018-01-09 16:21 ` Josef Bacik 0 siblings, 0 replies; 20+ messages in thread From: Josef Bacik @ 2018-01-09 16:21 UTC (permalink / raw) To: Anand Jain; +Cc: linux-btrfs On Tue, Jan 09, 2018 at 10:13:11PM +0800, Anand Jain wrote: > From: Anand Jain <Anand.Jain@oracle.com> > > Let the list iterator iterate further and find other stale > devices and delete it. This is in preparation to add support > for user land request-able stale devices cleanup. > > Signed-off-by: Anand Jain <anand.jain@oracle.com> If we're going to do this then please change the function name to btrfs_free_stale_devices() so it's clear what its intentions are. Thanks, Josef ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 4/6] btrfs: make btrfs_free_stale_device() argument optional 2018-01-09 14:13 [PATCH RESEND v3 0/6] preparatory work to add device forget Anand Jain ` (2 preceding siblings ...) 2018-01-09 14:13 ` [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales Anand Jain @ 2018-01-09 14:13 ` Anand Jain 2018-01-09 16:22 ` Josef Bacik 2018-01-09 14:13 ` [PATCH 5/6] btrfs: make btrfs_free_stale_device() to match the path Anand Jain 2018-01-09 14:13 ` [PATCH 6/6] btrfs: cleanup to make btrfs_free_stale_device() readable Anand Jain 5 siblings, 1 reply; 20+ messages in thread From: Anand Jain @ 2018-01-09 14:13 UTC (permalink / raw) To: linux-btrfs From: Anand Jain <Anand.Jain@oracle.com> This updates btrfs_free_stale_device() helper function to delete all unmouted devices, when arg is NULL. Signed-off-by: Anand Jain <anand.jain@oracle.com> --- fs/btrfs/volumes.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 7b253da6c0a4..7646f8860096 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -611,9 +611,6 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) struct btrfs_fs_devices *fs_devs, *tmp_fs_devs; struct btrfs_device *dev, *tmp_dev; - if (!cur_dev->name) - return; - list_for_each_entry_safe(fs_devs, tmp_fs_devs, &fs_uuids, list) { if (fs_devs->opened) @@ -623,9 +620,7 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) &fs_devs->devices, dev_list) { int not_found; - if (dev == cur_dev) - continue; - if (!dev->name) + if (cur_dev && (cur_dev == dev || !dev->name)) continue; /* @@ -635,8 +630,11 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) * either use mapper or non mapper path throughout. */ rcu_read_lock(); - not_found = strcmp(rcu_str_deref(dev->name), - rcu_str_deref(cur_dev->name)); + if (cur_dev) + not_found = strcmp(rcu_str_deref(dev->name), + rcu_str_deref(cur_dev->name)); + else + not_found = 0; rcu_read_unlock(); if (not_found) continue; -- 2.7.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 4/6] btrfs: make btrfs_free_stale_device() argument optional 2018-01-09 14:13 ` [PATCH 4/6] btrfs: make btrfs_free_stale_device() argument optional Anand Jain @ 2018-01-09 16:22 ` Josef Bacik 0 siblings, 0 replies; 20+ messages in thread From: Josef Bacik @ 2018-01-09 16:22 UTC (permalink / raw) To: Anand Jain; +Cc: linux-btrfs On Tue, Jan 09, 2018 at 10:13:12PM +0800, Anand Jain wrote: > From: Anand Jain <Anand.Jain@oracle.com> > > This updates btrfs_free_stale_device() helper function to delete all > unmouted devices, when arg is NULL. > > Signed-off-by: Anand Jain <anand.jain@oracle.com> > --- > fs/btrfs/volumes.c | 14 ++++++-------- > 1 file changed, 6 insertions(+), 8 deletions(-) > > diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c > index 7b253da6c0a4..7646f8860096 100644 > --- a/fs/btrfs/volumes.c > +++ b/fs/btrfs/volumes.c > @@ -611,9 +611,6 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) > struct btrfs_fs_devices *fs_devs, *tmp_fs_devs; > struct btrfs_device *dev, *tmp_dev; > > - if (!cur_dev->name) > - return; > - > list_for_each_entry_safe(fs_devs, tmp_fs_devs, &fs_uuids, list) { > > if (fs_devs->opened) > @@ -623,9 +620,7 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) > &fs_devs->devices, dev_list) { > int not_found; Change this to int not_found = 0; > > - if (dev == cur_dev) > - continue; > - if (!dev->name) > + if (cur_dev && (cur_dev == dev || !dev->name)) > continue; > > /* > @@ -635,8 +630,11 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) > * either use mapper or non mapper path throughout. > */ > rcu_read_lock(); > - not_found = strcmp(rcu_str_deref(dev->name), > - rcu_str_deref(cur_dev->name)); > + if (cur_dev) > + not_found = strcmp(rcu_str_deref(dev->name), > + rcu_str_deref(cur_dev->name)); > + else > + not_found = 0; And drop the else part of this. Thanks, Josef ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 5/6] btrfs: make btrfs_free_stale_device() to match the path 2018-01-09 14:13 [PATCH RESEND v3 0/6] preparatory work to add device forget Anand Jain ` (3 preceding siblings ...) 2018-01-09 14:13 ` [PATCH 4/6] btrfs: make btrfs_free_stale_device() argument optional Anand Jain @ 2018-01-09 14:13 ` Anand Jain 2018-01-09 16:22 ` Josef Bacik 2018-01-09 14:13 ` [PATCH 6/6] btrfs: cleanup to make btrfs_free_stale_device() readable Anand Jain 5 siblings, 1 reply; 20+ messages in thread From: Anand Jain @ 2018-01-09 14:13 UTC (permalink / raw) To: linux-btrfs From: Anand Jain <Anand.Jain@oracle.com> The btrfs_free_stale_device() is updated to match for the given device path and delete it. (It searchs for only unmounted list of devices.) Signed-off-by: Anand Jain <anand.jain@oracle.com> --- fs/btrfs/volumes.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 7646f8860096..f87d30aa0e18 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -606,7 +606,7 @@ static void pending_bios_fn(struct btrfs_work *work) } -static void btrfs_free_stale_device(struct btrfs_device *cur_dev) +static void btrfs_free_stale_device(struct btrfs_device *cur_dev, char *path) { struct btrfs_fs_devices *fs_devs, *tmp_fs_devs; struct btrfs_device *dev, *tmp_dev; @@ -633,6 +633,8 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) if (cur_dev) not_found = strcmp(rcu_str_deref(dev->name), rcu_str_deref(cur_dev->name)); + else if (path) + not_found = strcmp(rcu_str_deref(dev->name), path); else not_found = 0; rcu_read_unlock(); @@ -776,7 +778,7 @@ static noinline int device_list_add(const char *path, ret = 1; device->fs_devices = fs_devices; - btrfs_free_stale_device(device); + btrfs_free_stale_device(device, NULL); } else if (!device->name || strcmp(device->name->str, path)) { /* * When FS is already mounted. -- 2.7.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 5/6] btrfs: make btrfs_free_stale_device() to match the path 2018-01-09 14:13 ` [PATCH 5/6] btrfs: make btrfs_free_stale_device() to match the path Anand Jain @ 2018-01-09 16:22 ` Josef Bacik 0 siblings, 0 replies; 20+ messages in thread From: Josef Bacik @ 2018-01-09 16:22 UTC (permalink / raw) To: Anand Jain; +Cc: linux-btrfs On Tue, Jan 09, 2018 at 10:13:13PM +0800, Anand Jain wrote: > From: Anand Jain <Anand.Jain@oracle.com> > > The btrfs_free_stale_device() is updated to match for the given > device path and delete it. (It searchs for only unmounted list of > devices.) > > Signed-off-by: Anand Jain <anand.jain@oracle.com> Reviewed-by: Josef Bacik <jbacik@fb.com> Thanks, Josef ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 6/6] btrfs: cleanup to make btrfs_free_stale_device() readable 2018-01-09 14:13 [PATCH RESEND v3 0/6] preparatory work to add device forget Anand Jain ` (4 preceding siblings ...) 2018-01-09 14:13 ` [PATCH 5/6] btrfs: make btrfs_free_stale_device() to match the path Anand Jain @ 2018-01-09 14:13 ` Anand Jain 2018-01-09 16:24 ` Josef Bacik 5 siblings, 1 reply; 20+ messages in thread From: Anand Jain @ 2018-01-09 14:13 UTC (permalink / raw) To: linux-btrfs From: Anand Jain <Anand.Jain@oracle.com> Now as the there is path in arg, so instead of reading the path from cur_device just get it from the caller, and so the purpose of cur_device is to skip the device, so rename it to skip_dev. Also drop the comment about different path being used for the same device, since now we will have cli to clean any device that's not a concern any more. Signed-off-by: Anand Jain <anand.jain@oracle.com> --- v3: add btrfs_free_stale_device() fn description, as suggested by Nikolay Fix line with longer than 80 char v2: btrfs_device::name is null when we have missing device and unmounted. So we still need to check for dev->name. fs/btrfs/volumes.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index f87d30aa0e18..848824fe98a3 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -605,8 +605,17 @@ static void pending_bios_fn(struct btrfs_work *work) run_scheduled_bios(device); } - -static void btrfs_free_stale_device(struct btrfs_device *cur_dev, char *path) +/* + * btrfs_free_stale_device() + * Search and remove all stale (devices which are not mounted) devices. + * When both inputs are NULL, it will search and release all stale devices. + * path: Optional. When provided will it release all unmounted devices + * matching this path only. + * skip_dev: Optional. Will skip this device when searching for the stale + * devices. + */ +static void btrfs_free_stale_device(const char *path, + struct btrfs_device *skip_dev) { struct btrfs_fs_devices *fs_devs, *tmp_fs_devs; struct btrfs_device *dev, *tmp_dev; @@ -620,20 +629,13 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev, char *path) &fs_devs->devices, dev_list) { int not_found; - if (cur_dev && (cur_dev == dev || !dev->name)) + if (skip_dev && skip_dev == dev) + continue; + if (path && !dev->name) continue; - /* - * Todo: This won't be enough. What if the same device - * comes back (with new uuid and) with its mapper path? - * But for now, this does help as mostly an admin will - * either use mapper or non mapper path throughout. - */ rcu_read_lock(); - if (cur_dev) - not_found = strcmp(rcu_str_deref(dev->name), - rcu_str_deref(cur_dev->name)); - else if (path) + if (path) not_found = strcmp(rcu_str_deref(dev->name), path); else not_found = 0; @@ -778,7 +780,7 @@ static noinline int device_list_add(const char *path, ret = 1; device->fs_devices = fs_devices; - btrfs_free_stale_device(device, NULL); + btrfs_free_stale_device(path, device); } else if (!device->name || strcmp(device->name->str, path)) { /* * When FS is already mounted. -- 2.7.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 6/6] btrfs: cleanup to make btrfs_free_stale_device() readable 2018-01-09 14:13 ` [PATCH 6/6] btrfs: cleanup to make btrfs_free_stale_device() readable Anand Jain @ 2018-01-09 16:24 ` Josef Bacik 0 siblings, 0 replies; 20+ messages in thread From: Josef Bacik @ 2018-01-09 16:24 UTC (permalink / raw) To: Anand Jain; +Cc: linux-btrfs On Tue, Jan 09, 2018 at 10:13:14PM +0800, Anand Jain wrote: > From: Anand Jain <Anand.Jain@oracle.com> > > Now as the there is path in arg, so instead of reading the path from > cur_device just get it from the caller, and so the purpose of cur_device > is to skip the device, so rename it to skip_dev. Also drop the comment > about different path being used for the same device, since now we will > have cli to clean any device that's not a concern any more. > > Signed-off-by: Anand Jain <anand.jain@oracle.com> Wait you added char *path, and then changed it to device here? Just drop the previous patch and do this one. Thanks, Josef ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH v5 0/6] preparatory work to add device forget @ 2018-01-18 14:00 Anand Jain 2018-01-18 14:00 ` [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales Anand Jain 0 siblings, 1 reply; 20+ messages in thread From: Anand Jain @ 2018-01-18 14:00 UTC (permalink / raw) To: linux-btrfs v4->v5: Fix fn name btrfs_free_stale_device() to btrfs_free_stale_devices() in the comments and commit title. No code change. Add received reviewed-by. v3->v4: Mainly fix as per comments from Josef. @3/6: rename btrfs_free_stale_device() to btrfs_free_stale_devices() @4/6: reorg logic, init not_found = 0; drop else part @5/6: added new in v4. Renames arg cur_dev to skip_dev @6/6: v3:5/6 is merged to v4:6/6 checkpath error fixes. v2->v3: @ 6/6: add btrfs_free_stale_device() fn description, suggested by Nikolay Fix line with longer than 80 char v1->v2: @ 6/6: btrfs_device::name is null when we have missing device and unmounted. So we still need to check for dev->name. We can reuse the function btrfs_free_stale_device() to add feature to forget a scanned device or all stale devices. So this patch set proposes following changes to it. Anand Jain (6): btrfs: cleanup btrfs_free_stale_device() usage btrfs: no need to check for btrfs_fs_devices::seeding btrfs: make btrfs_free_stale_device() to iterate all stales btrfs: make btrfs_free_stale_devices() argument optional btrfs: rename btrfs_free_stale_devices() arg to skip_dev btrfs: make btrfs_free_stale_devices() to match the path fs/btrfs/volumes.c | 59 +++++++++++++++++++++++------------------------------- 1 file changed, 25 insertions(+), 34 deletions(-) -- 2.7.0 ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales 2018-01-18 14:00 [PATCH v5 0/6] preparatory work to add device forget Anand Jain @ 2018-01-18 14:00 ` Anand Jain 0 siblings, 0 replies; 20+ messages in thread From: Anand Jain @ 2018-01-18 14:00 UTC (permalink / raw) To: linux-btrfs From: Anand Jain <Anand.Jain@oracle.com> Let the list iterator iterate further and find other stale devices and delete it. This is in preparation to add support for user land request-able stale devices cleanup. Also rename btrfs_free_stale_device() to btrfs_free_stale_devices(). Signed-off-by: Anand Jain <anand.jain@oracle.com> Reviewed-by: Josef Bacik <jbacik@fb.com> --- fs/btrfs/volumes.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 3f481da9cae7..cd234a5dc763 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -606,21 +606,22 @@ static void pending_bios_fn(struct btrfs_work *work) } -static void btrfs_free_stale_device(struct btrfs_device *cur_dev) +static void btrfs_free_stale_devices(struct btrfs_device *cur_dev) { - struct btrfs_fs_devices *fs_devs; - struct btrfs_device *dev; + struct btrfs_fs_devices *fs_devs, *tmp_fs_devs; + struct btrfs_device *dev, *tmp_dev; if (!cur_dev->name) return; - list_for_each_entry(fs_devs, &fs_uuids, list) { - int del = 1; + list_for_each_entry_safe(fs_devs, tmp_fs_devs, &fs_uuids, list) { if (fs_devs->opened) continue; - list_for_each_entry(dev, &fs_devs->devices, dev_list) { + list_for_each_entry_safe(dev, tmp_dev, + &fs_devs->devices, dev_list) { + int not_found; if (dev == cur_dev) continue; @@ -634,14 +635,12 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) * either use mapper or non mapper path throughout. */ rcu_read_lock(); - del = strcmp(rcu_str_deref(dev->name), + not_found = strcmp(rcu_str_deref(dev->name), rcu_str_deref(cur_dev->name)); rcu_read_unlock(); - if (!del) - break; - } + if (not_found) + continue; - if (!del) { /* delete the stale device */ if (fs_devs->num_devices == 1) { btrfs_sysfs_remove_fsid(fs_devs); @@ -652,7 +651,6 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) list_del(&dev->dev_list); free_device(dev); } - break; } } } @@ -780,7 +778,7 @@ static noinline int device_list_add(const char *path, ret = 1; device->fs_devices = fs_devices; - btrfs_free_stale_device(device); + btrfs_free_stale_devices(device); } else if (!device->name || strcmp(device->name->str, path)) { /* * When FS is already mounted. -- 2.7.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH v4 0/6] preparatory work to add device forget @ 2018-01-10 5:15 Anand Jain 2018-01-10 5:15 ` [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales Anand Jain 0 siblings, 1 reply; 20+ messages in thread From: Anand Jain @ 2018-01-10 5:15 UTC (permalink / raw) To: linux-btrfs v3->v4: Mainly fix as per comments from Josef. @3/6: rename btrfs_free_stale_device() to btrfs_free_stale_devices() @4/6: reorg logic, init not_found = 0; drop else part @5/6: added new in v4. Renames arg cur_dev to skip_dev @6/6: v3:5/6 is merged to v4:6/6 checkpath error fixes. v2->v3: @ 6/6: add btrfs_free_stale_device() fn description, suggested by Nikolay Fix line with longer than 80 char v1->v2: @ 6/6: btrfs_device::name is null when we have missing device and unmounted. So we still need to check for dev->name. We can reuse the function btrfs_free_stale_device() to add feature to forget a scanned device or all stale devices. So this patch set proposes following changes to it. Anand Jain (6): btrfs: cleanup btrfs_free_stale_device() usage btrfs: no need to check for btrfs_fs_devices::seeding btrfs: make btrfs_free_stale_device() to iterate all stales btrfs: make btrfs_free_stale_device() argument optional btrfs: rename btrfs_free_stale_devices() arg to skip_dev btrfs: make btrfs_free_stale_device() to match the path fs/btrfs/volumes.c | 59 +++++++++++++++++++++++------------------------------- 1 file changed, 25 insertions(+), 34 deletions(-) -- 2.7.0 ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales 2018-01-10 5:15 [PATCH v4 0/6] preparatory work to add device forget Anand Jain @ 2018-01-10 5:15 ` Anand Jain 2018-01-10 15:49 ` Josef Bacik 0 siblings, 1 reply; 20+ messages in thread From: Anand Jain @ 2018-01-10 5:15 UTC (permalink / raw) To: linux-btrfs From: Anand Jain <Anand.Jain@oracle.com> Let the list iterator iterate further and find other stale devices and delete it. This is in preparation to add support for user land request-able stale devices cleanup. Also rename btrfs_free_stale_device() to btrfs_free_stale_devices(). Signed-off-by: Anand Jain <anand.jain@oracle.com> --- fs/btrfs/volumes.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 3f481da9cae7..cd234a5dc763 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -606,21 +606,22 @@ static void pending_bios_fn(struct btrfs_work *work) } -static void btrfs_free_stale_device(struct btrfs_device *cur_dev) +static void btrfs_free_stale_devices(struct btrfs_device *cur_dev) { - struct btrfs_fs_devices *fs_devs; - struct btrfs_device *dev; + struct btrfs_fs_devices *fs_devs, *tmp_fs_devs; + struct btrfs_device *dev, *tmp_dev; if (!cur_dev->name) return; - list_for_each_entry(fs_devs, &fs_uuids, list) { - int del = 1; + list_for_each_entry_safe(fs_devs, tmp_fs_devs, &fs_uuids, list) { if (fs_devs->opened) continue; - list_for_each_entry(dev, &fs_devs->devices, dev_list) { + list_for_each_entry_safe(dev, tmp_dev, + &fs_devs->devices, dev_list) { + int not_found; if (dev == cur_dev) continue; @@ -634,14 +635,12 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) * either use mapper or non mapper path throughout. */ rcu_read_lock(); - del = strcmp(rcu_str_deref(dev->name), + not_found = strcmp(rcu_str_deref(dev->name), rcu_str_deref(cur_dev->name)); rcu_read_unlock(); - if (!del) - break; - } + if (not_found) + continue; - if (!del) { /* delete the stale device */ if (fs_devs->num_devices == 1) { btrfs_sysfs_remove_fsid(fs_devs); @@ -652,7 +651,6 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) list_del(&dev->dev_list); free_device(dev); } - break; } } } @@ -780,7 +778,7 @@ static noinline int device_list_add(const char *path, ret = 1; device->fs_devices = fs_devices; - btrfs_free_stale_device(device); + btrfs_free_stale_devices(device); } else if (!device->name || strcmp(device->name->str, path)) { /* * When FS is already mounted. -- 2.7.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales 2018-01-10 5:15 ` [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales Anand Jain @ 2018-01-10 15:49 ` Josef Bacik 0 siblings, 0 replies; 20+ messages in thread From: Josef Bacik @ 2018-01-10 15:49 UTC (permalink / raw) To: Anand Jain; +Cc: linux-btrfs On Wed, Jan 10, 2018 at 01:15:20PM +0800, Anand Jain wrote: > From: Anand Jain <Anand.Jain@oracle.com> > > Let the list iterator iterate further and find other stale > devices and delete it. This is in preparation to add support > for user land request-able stale devices cleanup. Also rename > btrfs_free_stale_device() to btrfs_free_stale_devices(). > > Signed-off-by: Anand Jain <anand.jain@oracle.com> Reviewed-by: Josef Bacik <jbacik@fb.com> Thanks, Josef ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 0/6] preparatory work to add device forget @ 2017-12-15 3:47 Anand Jain 2017-12-15 3:47 ` [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales Anand Jain 0 siblings, 1 reply; 20+ messages in thread From: Anand Jain @ 2017-12-15 3:47 UTC (permalink / raw) To: linux-btrfs We can reuse the function btrfs_free_stale_device() to add feature to forget a scanned device or all stale devices. So this patch set proposes following changes to it. Anand Jain (6): btrfs: cleanup btrfs_free_stale_device() usage btrfs: no need to check for btrfs_fs_devices::seeding btrfs: make btrfs_free_stale_device() to delete all stales btrfs: make btrfs_free_stale_device() argument optional btrfs: make btrfs_free_stale_device() to search given path btrfs: cleanup to make btrfs_free_stale_device() readable fs/btrfs/volumes.c | 50 +++++++++++++++----------------------------------- 1 file changed, 15 insertions(+), 35 deletions(-) -- 2.7.0 ^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales 2017-12-15 3:47 [PATCH 0/6] preparatory work to add device forget Anand Jain @ 2017-12-15 3:47 ` Anand Jain 2017-12-15 15:06 ` Nikolay Borisov 0 siblings, 1 reply; 20+ messages in thread From: Anand Jain @ 2017-12-15 3:47 UTC (permalink / raw) To: linux-btrfs Let the list iterator iterate further and find other stale devices and delete it. This is in preparation to add support for user land request-able stale devices cleanup. Signed-off-by: Anand Jain <anand.jain@oracle.com> --- fs/btrfs/volumes.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 0e89409112d5..70db6a1d5658 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -610,19 +610,20 @@ static void pending_bios_fn(struct btrfs_work *work) static void btrfs_free_stale_device(struct btrfs_device *cur_dev) { - struct btrfs_fs_devices *fs_devs; - struct btrfs_device *dev; + struct btrfs_fs_devices *fs_devs, *tmp_fs_devs; + struct btrfs_device *dev, *tmp_dev; if (!cur_dev->name) return; - list_for_each_entry(fs_devs, &fs_uuids, list) { - int del = 1; + list_for_each_entry_safe(fs_devs, tmp_fs_devs, &fs_uuids, list) { if (fs_devs->opened) continue; - list_for_each_entry(dev, &fs_devs->devices, dev_list) { + list_for_each_entry_safe(dev, tmp_dev, + &fs_devs->devices, dev_list) { + int not_found; if (dev == cur_dev) continue; @@ -636,14 +637,12 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) * either use mapper or non mapper path throughout. */ rcu_read_lock(); - del = strcmp(rcu_str_deref(dev->name), + not_found = strcmp(rcu_str_deref(dev->name), rcu_str_deref(cur_dev->name)); rcu_read_unlock(); - if (!del) - break; - } + if (not_found) + continue; - if (!del) { /* delete the stale device */ if (fs_devs->num_devices == 1) { btrfs_sysfs_remove_fsid(fs_devs); @@ -654,7 +653,6 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) list_del(&dev->dev_list); free_device(dev); } - break; } } } -- 2.7.0 ^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales 2017-12-15 3:47 ` [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales Anand Jain @ 2017-12-15 15:06 ` Nikolay Borisov 2017-12-16 2:13 ` Anand Jain 0 siblings, 1 reply; 20+ messages in thread From: Nikolay Borisov @ 2017-12-15 15:06 UTC (permalink / raw) To: Anand Jain, linux-btrfs On 15.12.2017 05:47, Anand Jain wrote: > Let the list iterator iterate further and find other stale > devices and delete it. This is in preparation to add support > for user land request-able stale devices cleanup. > > Signed-off-by: Anand Jain <anand.jain@oracle.com> What is the lock protection of this function - uuid_mutex, it's not really obvious. Perhaps adding a lockdep_assert_held for the correct lock ? I guess David's earlier patch to document the locking in volumes.c might shed some light on this one. > --- > fs/btrfs/volumes.c | 20 +++++++++----------- > 1 file changed, 9 insertions(+), 11 deletions(-) > > diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c > index 0e89409112d5..70db6a1d5658 100644 > --- a/fs/btrfs/volumes.c > +++ b/fs/btrfs/volumes.c > @@ -610,19 +610,20 @@ static void pending_bios_fn(struct btrfs_work *work) > > static void btrfs_free_stale_device(struct btrfs_device *cur_dev) > { > - struct btrfs_fs_devices *fs_devs; > - struct btrfs_device *dev; > + struct btrfs_fs_devices *fs_devs, *tmp_fs_devs; > + struct btrfs_device *dev, *tmp_dev; > > if (!cur_dev->name) > return; > > - list_for_each_entry(fs_devs, &fs_uuids, list) { > - int del = 1; > + list_for_each_entry_safe(fs_devs, tmp_fs_devs, &fs_uuids, list) { > > if (fs_devs->opened) > continue; > > - list_for_each_entry(dev, &fs_devs->devices, dev_list) { > + list_for_each_entry_safe(dev, tmp_dev, > + &fs_devs->devices, dev_list) { > + int not_found; > > if (dev == cur_dev) > continue; > @@ -636,14 +637,12 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) > * either use mapper or non mapper path throughout. > */ > rcu_read_lock(); > - del = strcmp(rcu_str_deref(dev->name), > + not_found = strcmp(rcu_str_deref(dev->name), > rcu_str_deref(cur_dev->name)); > rcu_read_unlock(); > - if (!del) > - break; > - } > + if (not_found) > + continue; > > - if (!del) { > /* delete the stale device */ > if (fs_devs->num_devices == 1) { > btrfs_sysfs_remove_fsid(fs_devs); > @@ -654,7 +653,6 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) > list_del(&dev->dev_list); > free_device(dev); > } > - break; > } > } > } > ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales 2017-12-15 15:06 ` Nikolay Borisov @ 2017-12-16 2:13 ` Anand Jain 2017-12-16 6:54 ` Nikolay Borisov 0 siblings, 1 reply; 20+ messages in thread From: Anand Jain @ 2017-12-16 2:13 UTC (permalink / raw) To: Nikolay Borisov, linux-btrfs On 12/15/2017 11:06 PM, Nikolay Borisov wrote: > > > On 15.12.2017 05:47, Anand Jain wrote: >> Let the list iterator iterate further and find other stale >> devices and delete it. This is in preparation to add support >> for user land request-able stale devices cleanup. >> >> Signed-off-by: Anand Jain <anand.jain@oracle.com> > > What is the lock protection of this function - uuid_mutex, it's not > really obvious. Perhaps adding a lockdep_assert_held for the correct > lock ? I guess David's earlier patch to document the locking in > volumes.c might shed some light on this one. I remembered your earlier similar comments and I thought of adding lockdep here, but as such I am also working on cleaning up uuid_mutext and device_list_mutex I would like to include such lockdep assert in those patches. Thanks, Anand >> --- >> fs/btrfs/volumes.c | 20 +++++++++----------- >> 1 file changed, 9 insertions(+), 11 deletions(-) >> >> diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c >> index 0e89409112d5..70db6a1d5658 100644 >> --- a/fs/btrfs/volumes.c >> +++ b/fs/btrfs/volumes.c >> @@ -610,19 +610,20 @@ static void pending_bios_fn(struct btrfs_work *work) >> >> static void btrfs_free_stale_device(struct btrfs_device *cur_dev) >> { >> - struct btrfs_fs_devices *fs_devs; >> - struct btrfs_device *dev; >> + struct btrfs_fs_devices *fs_devs, *tmp_fs_devs; >> + struct btrfs_device *dev, *tmp_dev; >> >> if (!cur_dev->name) >> return; >> >> - list_for_each_entry(fs_devs, &fs_uuids, list) { >> - int del = 1; >> + list_for_each_entry_safe(fs_devs, tmp_fs_devs, &fs_uuids, list) { >> >> if (fs_devs->opened) >> continue; >> >> - list_for_each_entry(dev, &fs_devs->devices, dev_list) { >> + list_for_each_entry_safe(dev, tmp_dev, >> + &fs_devs->devices, dev_list) { >> + int not_found; >> >> if (dev == cur_dev) >> continue; >> @@ -636,14 +637,12 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) >> * either use mapper or non mapper path throughout. >> */ >> rcu_read_lock(); >> - del = strcmp(rcu_str_deref(dev->name), >> + not_found = strcmp(rcu_str_deref(dev->name), >> rcu_str_deref(cur_dev->name)); >> rcu_read_unlock(); >> - if (!del) >> - break; >> - } >> + if (not_found) >> + continue; >> >> - if (!del) { >> /* delete the stale device */ >> if (fs_devs->num_devices == 1) { >> btrfs_sysfs_remove_fsid(fs_devs); >> @@ -654,7 +653,6 @@ static void btrfs_free_stale_device(struct btrfs_device *cur_dev) >> list_del(&dev->dev_list); >> free_device(dev); >> } >> - break; >> } >> } >> } >> > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales 2017-12-16 2:13 ` Anand Jain @ 2017-12-16 6:54 ` Nikolay Borisov 0 siblings, 0 replies; 20+ messages in thread From: Nikolay Borisov @ 2017-12-16 6:54 UTC (permalink / raw) To: Anand Jain, linux-btrfs On 16.12.2017 04:13, Anand Jain wrote: > > > On 12/15/2017 11:06 PM, Nikolay Borisov wrote: >> >> >> On 15.12.2017 05:47, Anand Jain wrote: >>> Let the list iterator iterate further and find other stale >>> devices and delete it. This is in preparation to add support >>> for user land request-able stale devices cleanup. >>> >>> Signed-off-by: Anand Jain <anand.jain@oracle.com> >> >> What is the lock protection of this function - uuid_mutex, it's not >> really obvious. Perhaps adding a lockdep_assert_held for the correct >> lock ? I guess David's earlier patch to document the locking in >> volumes.c might shed some light on this one. > > I remembered your earlier similar comments and I thought of adding > lockdep here, but as such I am also working on cleaning up uuid_mutext > and device_list_mutex I would like to include such lockdep assert in > those patches. Makes sense so long as this change lands > > Thanks, Anand >>> --- >>> fs/btrfs/volumes.c | 20 +++++++++----------- >>> 1 file changed, 9 insertions(+), 11 deletions(-) >>> >>> diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c >>> index 0e89409112d5..70db6a1d5658 100644 >>> --- a/fs/btrfs/volumes.c >>> +++ b/fs/btrfs/volumes.c >>> @@ -610,19 +610,20 @@ static void pending_bios_fn(struct btrfs_work >>> *work) >>> static void btrfs_free_stale_device(struct btrfs_device *cur_dev) >>> { >>> - struct btrfs_fs_devices *fs_devs; >>> - struct btrfs_device *dev; >>> + struct btrfs_fs_devices *fs_devs, *tmp_fs_devs; >>> + struct btrfs_device *dev, *tmp_dev; >>> if (!cur_dev->name) >>> return; >>> - list_for_each_entry(fs_devs, &fs_uuids, list) { >>> - int del = 1; >>> + list_for_each_entry_safe(fs_devs, tmp_fs_devs, &fs_uuids, list) { >>> if (fs_devs->opened) >>> continue; >>> - list_for_each_entry(dev, &fs_devs->devices, dev_list) { >>> + list_for_each_entry_safe(dev, tmp_dev, >>> + &fs_devs->devices, dev_list) { >>> + int not_found; >>> if (dev == cur_dev) >>> continue; >>> @@ -636,14 +637,12 @@ static void btrfs_free_stale_device(struct >>> btrfs_device *cur_dev) >>> * either use mapper or non mapper path throughout. >>> */ >>> rcu_read_lock(); >>> - del = strcmp(rcu_str_deref(dev->name), >>> + not_found = strcmp(rcu_str_deref(dev->name), >>> rcu_str_deref(cur_dev->name)); >>> rcu_read_unlock(); >>> - if (!del) >>> - break; >>> - } >>> + if (not_found) >>> + continue; >>> - if (!del) { >>> /* delete the stale device */ >>> if (fs_devs->num_devices == 1) { >>> btrfs_sysfs_remove_fsid(fs_devs); >>> @@ -654,7 +653,6 @@ static void btrfs_free_stale_device(struct >>> btrfs_device *cur_dev) >>> list_del(&dev->dev_list); >>> free_device(dev); >>> } >>> - break; >>> } >>> } >>> } >>> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> > ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2018-01-18 13:59 UTC | newest] Thread overview: 20+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-01-09 14:13 [PATCH RESEND v3 0/6] preparatory work to add device forget Anand Jain 2018-01-09 14:13 ` [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage Anand Jain 2018-01-09 16:18 ` Josef Bacik 2018-01-09 14:13 ` [PATCH 2/6] btrfs: no need to check for btrfs_fs_devices::seeding Anand Jain 2018-01-09 16:19 ` Josef Bacik 2018-01-09 14:13 ` [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales Anand Jain 2018-01-09 16:21 ` Josef Bacik 2018-01-09 14:13 ` [PATCH 4/6] btrfs: make btrfs_free_stale_device() argument optional Anand Jain 2018-01-09 16:22 ` Josef Bacik 2018-01-09 14:13 ` [PATCH 5/6] btrfs: make btrfs_free_stale_device() to match the path Anand Jain 2018-01-09 16:22 ` Josef Bacik 2018-01-09 14:13 ` [PATCH 6/6] btrfs: cleanup to make btrfs_free_stale_device() readable Anand Jain 2018-01-09 16:24 ` Josef Bacik -- strict thread matches above, loose matches on Subject: below -- 2018-01-18 14:00 [PATCH v5 0/6] preparatory work to add device forget Anand Jain 2018-01-18 14:00 ` [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales Anand Jain 2018-01-10 5:15 [PATCH v4 0/6] preparatory work to add device forget Anand Jain 2018-01-10 5:15 ` [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales Anand Jain 2018-01-10 15:49 ` Josef Bacik 2017-12-15 3:47 [PATCH 0/6] preparatory work to add device forget Anand Jain 2017-12-15 3:47 ` [PATCH 3/6] btrfs: make btrfs_free_stale_device() to iterate all stales Anand Jain 2017-12-15 15:06 ` Nikolay Borisov 2017-12-16 2:13 ` Anand Jain 2017-12-16 6:54 ` Nikolay Borisov
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).