diff mbox

btrfs-progs: Fix the return value of btrfs_scan_kernel()

Message ID 1396948562-16653-1-git-send-email-quwenruo@cn.fujitsu.com (mailing list archive)
State Accepted
Headers show

Commit Message

Qu Wenruo April 8, 2014, 9:16 a.m. UTC
btrfs_scan_kernel() is only used in 'btrfs fi show' but returns wrong
return value.
When search parameter is passed, it will never return 0 even the search
can be matched.

This patch will change the whatever strange logic to a more easy to
understand one using 'found' var.

Reported-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Cc: Anand Jain <anand.jain@oracle.com>
---
 cmds-filesystem.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

Comments

Anand Jain April 9, 2014, 2:09 a.m. UTC | #1
I expect btrfs_scan_kernel()  would go away in the long run,
  however below fix has a problem - when there is no search item
  you would return fail (1) always. Since btrfs_scan_kernel() has
  limited usage as you mention as well. So I will leave it to David
  to decide.

Thanks, Anand

On 08/04/2014 17:16, Qu Wenruo wrote:
> btrfs_scan_kernel() is only used in 'btrfs fi show' but returns wrong
> return value.
> When search parameter is passed, it will never return 0 even the search
> can be matched.
>
> This patch will change the whatever strange logic to a more easy to
> understand one using 'found' var.
>
> Reported-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
> Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
> Cc: Anand Jain <anand.jain@oracle.com>
> ---
>   cmds-filesystem.c | 9 +++------
>   1 file changed, 3 insertions(+), 6 deletions(-)
>
> diff --git a/cmds-filesystem.c b/cmds-filesystem.c
> index b81768b..49d3aa7 100644
> --- a/cmds-filesystem.c
> +++ b/cmds-filesystem.c
> @@ -430,6 +430,7 @@ static int btrfs_scan_kernel_v2(void *search)
>   static int btrfs_scan_kernel(void *search)
>   {
>   	int ret = 0, fd;
> +	int found = 0;
>   	FILE *f;
>   	struct mntent *mnt;
>   	struct btrfs_ioctl_fs_info_args fs_info_arg;
> @@ -452,7 +453,6 @@ static int btrfs_scan_kernel(void *search)
>
>   		if (get_label_mounted(mnt->mnt_dir, label)) {
>   			kfree(dev_info_arg);
> -			ret = 1;
>   			goto out;
>   		}
>   		if (search && !match_search_item_kernel(fs_info_arg.fsid,
> @@ -467,19 +467,16 @@ static int btrfs_scan_kernel(void *search)
>   					space_info_arg, label, mnt->mnt_dir);
>   			kfree(space_info_arg);
>   			memset(label, 0, sizeof(label));
> +			found = 1;
>   		}
>   		if (fd != -1)
>   			close(fd);
>   		kfree(dev_info_arg);
> -		if (search)
> -			ret = 0;
>   	}
> -	if (search)
> -		ret = 1;
>
>   out:
>   	endmntent(f);
> -	return ret;
> +	return !found;
>   }
>
>   static int dev_to_fsid(char *dev, __u8 *fsid)
>
--
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
Qu Wenruo April 9, 2014, 2:18 a.m. UTC | #2
Nope, the fix can also deal with no search parameter.

If any btrfs filesystem can be found and printed, found will be set to 1 
which considered as found,
then 0 will be returned.

Thanks,
Qu
? 2014?04?09? 10:09, Anand Jain ??:
>
>  I expect btrfs_scan_kernel()  would go away in the long run,
>  however below fix has a problem - when there is no search item
>  you would return fail (1) always. Since btrfs_scan_kernel() has
>  limited usage as you mention as well. So I will leave it to David
>  to decide.
>
> Thanks, Anand
>
> On 08/04/2014 17:16, Qu Wenruo wrote:
>> btrfs_scan_kernel() is only used in 'btrfs fi show' but returns wrong
>> return value.
>> When search parameter is passed, it will never return 0 even the search
>> can be matched.
>>
>> This patch will change the whatever strange logic to a more easy to
>> understand one using 'found' var.
>>
>> Reported-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
>> Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
>> Cc: Anand Jain <anand.jain@oracle.com>
>> ---
>>   cmds-filesystem.c | 9 +++------
>>   1 file changed, 3 insertions(+), 6 deletions(-)
>>
>> diff --git a/cmds-filesystem.c b/cmds-filesystem.c
>> index b81768b..49d3aa7 100644
>> --- a/cmds-filesystem.c
>> +++ b/cmds-filesystem.c
>> @@ -430,6 +430,7 @@ static int btrfs_scan_kernel_v2(void *search)
>>   static int btrfs_scan_kernel(void *search)
>>   {
>>       int ret = 0, fd;
>> +    int found = 0;
>>       FILE *f;
>>       struct mntent *mnt;
>>       struct btrfs_ioctl_fs_info_args fs_info_arg;
>> @@ -452,7 +453,6 @@ static int btrfs_scan_kernel(void *search)
>>
>>           if (get_label_mounted(mnt->mnt_dir, label)) {
>>               kfree(dev_info_arg);
>> -            ret = 1;
>>               goto out;
>>           }
>>           if (search && !match_search_item_kernel(fs_info_arg.fsid,
>> @@ -467,19 +467,16 @@ static int btrfs_scan_kernel(void *search)
>>                       space_info_arg, label, mnt->mnt_dir);
>>               kfree(space_info_arg);
>>               memset(label, 0, sizeof(label));
>> +            found = 1;
>>           }
>>           if (fd != -1)
>>               close(fd);
>>           kfree(dev_info_arg);
>> -        if (search)
>> -            ret = 0;
>>       }
>> -    if (search)
>> -        ret = 1;
>>
>>   out:
>>       endmntent(f);
>> -    return ret;
>> +    return !found;
>>   }
>>
>>   static int dev_to_fsid(char *dev, __u8 *fsid)
>>

--
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
Anand Jain April 9, 2014, 3:19 a.m. UTC | #3
On 09/04/2014 10:18, Qu Wenruo wrote:
> Nope, the fix can also deal with no search parameter.

> If any btrfs filesystem can be found and printed, found will be set to 1
> which considered as found,
> then 0 will be returned.

  Oh yes. You are right. Thanks, Anand

> Thanks,
> Qu
> ? 2014?04?09? 10:09, Anand Jain ??:
>>
>>  I expect btrfs_scan_kernel()  would go away in the long run,
>>  however below fix has a problem - when there is no search item
>>  you would return fail (1) always. Since btrfs_scan_kernel() has
>>  limited usage as you mention as well. So I will leave it to David
>>  to decide.
>>
>> Thanks, Anand
>>
>> On 08/04/2014 17:16, Qu Wenruo wrote:
>>> btrfs_scan_kernel() is only used in 'btrfs fi show' but returns wrong
>>> return value.
>>> When search parameter is passed, it will never return 0 even the search
>>> can be matched.
>>>
>>> This patch will change the whatever strange logic to a more easy to
>>> understand one using 'found' var.
>>>
>>> Reported-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
>>> Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
>>> Cc: Anand Jain <anand.jain@oracle.com>
>>> ---
>>>   cmds-filesystem.c | 9 +++------
>>>   1 file changed, 3 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/cmds-filesystem.c b/cmds-filesystem.c
>>> index b81768b..49d3aa7 100644
>>> --- a/cmds-filesystem.c
>>> +++ b/cmds-filesystem.c
>>> @@ -430,6 +430,7 @@ static int btrfs_scan_kernel_v2(void *search)
>>>   static int btrfs_scan_kernel(void *search)
>>>   {
>>>       int ret = 0, fd;
>>> +    int found = 0;
>>>       FILE *f;
>>>       struct mntent *mnt;
>>>       struct btrfs_ioctl_fs_info_args fs_info_arg;
>>> @@ -452,7 +453,6 @@ static int btrfs_scan_kernel(void *search)
>>>
>>>           if (get_label_mounted(mnt->mnt_dir, label)) {
>>>               kfree(dev_info_arg);
>>> -            ret = 1;
>>>               goto out;
>>>           }
>>>           if (search && !match_search_item_kernel(fs_info_arg.fsid,
>>> @@ -467,19 +467,16 @@ static int btrfs_scan_kernel(void *search)
>>>                       space_info_arg, label, mnt->mnt_dir);
>>>               kfree(space_info_arg);
>>>               memset(label, 0, sizeof(label));
>>> +            found = 1;
>>>           }
>>>           if (fd != -1)
>>>               close(fd);
>>>           kfree(dev_info_arg);
>>> -        if (search)
>>> -            ret = 0;
>>>       }
>>> -    if (search)
>>> -        ret = 1;
>>>
>>>   out:
>>>       endmntent(f);
>>> -    return ret;
>>> +    return !found;
>>>   }
>>>
>>>   static int dev_to_fsid(char *dev, __u8 *fsid)
>>>
>
> --
> 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
--
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
diff mbox

Patch

diff --git a/cmds-filesystem.c b/cmds-filesystem.c
index b81768b..49d3aa7 100644
--- a/cmds-filesystem.c
+++ b/cmds-filesystem.c
@@ -430,6 +430,7 @@  static int btrfs_scan_kernel_v2(void *search)
 static int btrfs_scan_kernel(void *search)
 {
 	int ret = 0, fd;
+	int found = 0;
 	FILE *f;
 	struct mntent *mnt;
 	struct btrfs_ioctl_fs_info_args fs_info_arg;
@@ -452,7 +453,6 @@  static int btrfs_scan_kernel(void *search)
 
 		if (get_label_mounted(mnt->mnt_dir, label)) {
 			kfree(dev_info_arg);
-			ret = 1;
 			goto out;
 		}
 		if (search && !match_search_item_kernel(fs_info_arg.fsid,
@@ -467,19 +467,16 @@  static int btrfs_scan_kernel(void *search)
 					space_info_arg, label, mnt->mnt_dir);
 			kfree(space_info_arg);
 			memset(label, 0, sizeof(label));
+			found = 1;
 		}
 		if (fd != -1)
 			close(fd);
 		kfree(dev_info_arg);
-		if (search)
-			ret = 0;
 	}
-	if (search)
-		ret = 1;
 
 out:
 	endmntent(f);
-	return ret;
+	return !found;
 }
 
 static int dev_to_fsid(char *dev, __u8 *fsid)