linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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

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

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

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

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

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

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

* 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

* 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

* 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

* 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

* 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 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 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

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