diff mbox

btrfs: trival fix of __btrfs_set_acl error handling

Message ID 1441702002-109706-1-git-send-email-shengyong1@huawei.com (mailing list archive)
State New, archived
Headers show

Commit Message

Sheng Yong Sept. 8, 2015, 8:46 a.m. UTC
* If the allocation failed, don't free to free it, even though kfree
  allows to free a NULL pointer.
* If posix_acl_to_xattr() failed, cleanup the allocation and return
  the error directly.

Signed-off-by: Sheng Yong <shengyong1@huawei.com>
---
 fs/btrfs/acl.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

Comments

Qu Wenruo Sept. 8, 2015, 8:50 a.m. UTC | #1
Sheng Yong wrote on 2015/09/08 08:46 +0000:
> * If the allocation failed, don't free to free it, even though kfree
>    allows to free a NULL pointer.
> * If posix_acl_to_xattr() failed, cleanup the allocation and return
>    the error directly.
So, what's the point?
For me, I didn't see the pros of the change.
As kfree() allow NULL pointer, why not use it?

Thanks,
Qu
>
> Signed-off-by: Sheng Yong <shengyong1@huawei.com>
> ---
>   fs/btrfs/acl.c | 14 +++++++-------
>   1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c
> index 9a0124a..6d01d09 100644
> --- a/fs/btrfs/acl.c
> +++ b/fs/btrfs/acl.c
> @@ -103,18 +103,18 @@ static int __btrfs_set_acl(struct btrfs_trans_handle *trans,
>   	if (acl) {
>   		size = posix_acl_xattr_size(acl->a_count);
>   		value = kmalloc(size, GFP_NOFS);
> -		if (!value) {
> -			ret = -ENOMEM;
> -			goto out;
> -		}
> +		if (!value)
> +			return -ENOMEM;
>
>   		ret = posix_acl_to_xattr(&init_user_ns, acl, value, size);
> -		if (ret < 0)
> -			goto out;
> +		if (ret < 0) {
> +			kfree(value);
> +			return ret;
> +		}
>   	}
>
>   	ret = __btrfs_setxattr(trans, inode, name, value, size, 0);
> -out:
> +
>   	kfree(value);
>
>   	if (!ret)
>
--
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
Sheng Yong Sept. 8, 2015, 9:02 a.m. UTC | #2
Hi, Qu

On 9/8/2015 4:50 PM, Qu Wenruo wrote:
> Sheng Yong wrote on 2015/09/08 08:46 +0000:
>> * If the allocation failed, don't free to free it, even though kfree
>>    allows to free a NULL pointer.
>> * If posix_acl_to_xattr() failed, cleanup the allocation and return
>>    the error directly.
> So, what's the point?
> For me, I didn't see the pros of the change.
> As kfree() allow NULL pointer, why not use it?
In fact, there is no semantic changes. It's just because when I walk through
the code, and find there is no need to call kfree(), and could be cleaned up.
It's fine to keep as it is :)

thanks,
Sheng
> 
> Thanks,
> Qu
>>
>> Signed-off-by: Sheng Yong <shengyong1@huawei.com>
>> ---
>>   fs/btrfs/acl.c | 14 +++++++-------
>>   1 file changed, 7 insertions(+), 7 deletions(-)
>>
>> diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c
>> index 9a0124a..6d01d09 100644
>> --- a/fs/btrfs/acl.c
>> +++ b/fs/btrfs/acl.c
>> @@ -103,18 +103,18 @@ static int __btrfs_set_acl(struct btrfs_trans_handle *trans,
>>       if (acl) {
>>           size = posix_acl_xattr_size(acl->a_count);
>>           value = kmalloc(size, GFP_NOFS);
>> -        if (!value) {
>> -            ret = -ENOMEM;
>> -            goto out;
>> -        }
>> +        if (!value)
>> +            return -ENOMEM;
>>
>>           ret = posix_acl_to_xattr(&init_user_ns, acl, value, size);
>> -        if (ret < 0)
>> -            goto out;
>> +        if (ret < 0) {
>> +            kfree(value);
>> +            return ret;
>> +        }
>>       }
>>
>>       ret = __btrfs_setxattr(trans, inode, name, value, size, 0);
>> -out:
>> +
>>       kfree(value);
>>
>>       if (!ret)
>>
> 
> 

--
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
David Sterba Sept. 8, 2015, 11:51 a.m. UTC | #3
On Tue, Sep 08, 2015 at 05:02:32PM +0800, Sheng Yong wrote:
> Hi, Qu
> 
> On 9/8/2015 4:50 PM, Qu Wenruo wrote:
> > Sheng Yong wrote on 2015/09/08 08:46 +0000:
> >> * If the allocation failed, don't free to free it, even though kfree
> >>    allows to free a NULL pointer.
> >> * If posix_acl_to_xattr() failed, cleanup the allocation and return
> >>    the error directly.
> > So, what's the point?
> > For me, I didn't see the pros of the change.
> > As kfree() allow NULL pointer, why not use it?
> In fact, there is no semantic changes. It's just because when I walk through
> the code, and find there is no need to call kfree(), and could be cleaned up.
> It's fine to keep as it is :)

I agree with Qu. In this case it's not performance critical and conforms
to the widely used pattern of single return point from branches.
However, the acl functions are not consistent in that respect. It's more
a matter of style that gets unified eventually.
--
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/fs/btrfs/acl.c b/fs/btrfs/acl.c
index 9a0124a..6d01d09 100644
--- a/fs/btrfs/acl.c
+++ b/fs/btrfs/acl.c
@@ -103,18 +103,18 @@  static int __btrfs_set_acl(struct btrfs_trans_handle *trans,
 	if (acl) {
 		size = posix_acl_xattr_size(acl->a_count);
 		value = kmalloc(size, GFP_NOFS);
-		if (!value) {
-			ret = -ENOMEM;
-			goto out;
-		}
+		if (!value)
+			return -ENOMEM;
 
 		ret = posix_acl_to_xattr(&init_user_ns, acl, value, size);
-		if (ret < 0)
-			goto out;
+		if (ret < 0) {
+			kfree(value);
+			return ret;
+		}
 	}
 
 	ret = __btrfs_setxattr(trans, inode, name, value, size, 0);
-out:
+
 	kfree(value);
 
 	if (!ret)