* [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; 18+ 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] 18+ 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; 18+ 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] 18+ 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; 18+ 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] 18+ 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; 18+ 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] 18+ 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; 18+ 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] 18+ 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; 18+ 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] 18+ 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; 18+ 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] 18+ 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; 18+ 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] 18+ 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; 18+ 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] 18+ 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; 18+ 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] 18+ 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; 18+ 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] 18+ 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; 18+ 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] 18+ 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; 18+ 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] 18+ 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 1/6] btrfs: cleanup btrfs_free_stale_device() usage Anand Jain 0 siblings, 1 reply; 18+ 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] 18+ messages in thread
* [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage 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; 18+ messages in thread From: Anand Jain @ 2018-01-18 14:00 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> Reviewed-by: Josef Bacik <jbacik@fb.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 d393808071d5..25b91776d036 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] 18+ 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 1/6] btrfs: cleanup btrfs_free_stale_device() usage Anand Jain 0 siblings, 1 reply; 18+ 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] 18+ messages in thread
* [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage 2018-01-10 5:15 [PATCH v4 0/6] preparatory work to add device forget Anand Jain @ 2018-01-10 5:15 ` Anand Jain 0 siblings, 0 replies; 18+ messages in thread From: Anand Jain @ 2018-01-10 5:15 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> Reviewed-by: Josef Bacik <jbacik@fb.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 d393808071d5..25b91776d036 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] 18+ 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 1/6] btrfs: cleanup btrfs_free_stale_device() usage Anand Jain 0 siblings, 1 reply; 18+ 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] 18+ messages in thread
* [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage 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:33 ` Nikolay Borisov 0 siblings, 1 reply; 18+ messages in thread From: Anand Jain @ 2017-12-15 3:47 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 b8ba3de6e9e6..6317a3561ae1 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -788,6 +788,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. @@ -846,13 +847,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] 18+ messages in thread
* Re: [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage 2017-12-15 3:47 ` [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage Anand Jain @ 2017-12-15 15:33 ` Nikolay Borisov 2017-12-16 2:15 ` Anand Jain 0 siblings, 1 reply; 18+ messages in thread From: Nikolay Borisov @ 2017-12-15 15:33 UTC (permalink / raw) To: Anand Jain, linux-btrfs On 15.12.2017 05:47, 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> > --- > 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 b8ba3de6e9e6..6317a3561ae1 100644 > --- a/fs/btrfs/volumes.c > +++ b/fs/btrfs/volumes.c > @@ -788,6 +788,7 @@ static noinline int device_list_add(const char *path, nit: not directly related to the series in question, but I think you can add one more patch which sinks the devid argument passed to device_list_add. We already pass the disk_super and we can get the devid in device_list_add this reduced the cognitive load when reading the code > > 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. > @@ -846,13 +847,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; > ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage 2017-12-15 15:33 ` Nikolay Borisov @ 2017-12-16 2:15 ` Anand Jain 0 siblings, 0 replies; 18+ messages in thread From: Anand Jain @ 2017-12-16 2:15 UTC (permalink / raw) To: Nikolay Borisov, linux-btrfs >> @@ -788,6 +788,7 @@ static noinline int device_list_add(const char *path, > > nit: not directly related to the series in question, but I think you can > add one more patch which sinks the devid argument passed to > device_list_add. We already pass the disk_super and we can get the devid > in device_list_add this reduced the cognitive load when reading the code I notice that too, yes it should be in a new patch. More cleanups around this is coming up. Thanks, Anand ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2018-01-18 13:59 UTC | newest] Thread overview: 18+ 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 1/6] btrfs: cleanup btrfs_free_stale_device() usage 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 1/6] btrfs: cleanup btrfs_free_stale_device() usage Anand Jain 2017-12-15 3:47 [PATCH 0/6] preparatory work to add device forget Anand Jain 2017-12-15 3:47 ` [PATCH 1/6] btrfs: cleanup btrfs_free_stale_device() usage Anand Jain 2017-12-15 15:33 ` Nikolay Borisov 2017-12-16 2:15 ` 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).