2012-05-14 19:45:37

by Dan Carpenter

[permalink] [raw]
Subject: [patch] NFS: kmalloc() doesn't return an ERR_PTR()

Obviously we should check for NULL here instead of IS_ERR().

Signed-off-by: Dan Carpenter <[email protected]>

diff --git a/fs/nfs/idmap.c b/fs/nfs/idmap.c
index ba3019f..233beea 100644
--- a/fs/nfs/idmap.c
+++ b/fs/nfs/idmap.c
@@ -644,14 +644,14 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,

/* msg and im are freed in idmap_pipe_destroy_msg */
msg = kmalloc(sizeof(*msg), GFP_KERNEL);
- if (IS_ERR(msg)) {
- ret = PTR_ERR(msg);
+ if (!msg) {
+ ret = -ENOMEM;
goto out0;
}

im = kmalloc(sizeof(*im), GFP_KERNEL);
- if (IS_ERR(im)) {
- ret = PTR_ERR(im);
+ if (!im) {
+ ret = -ENOMEM;
goto out1;
}



2012-05-15 16:07:22

by Boaz Harrosh

[permalink] [raw]
Subject: Re: [patch] NFS: kmalloc() doesn't return an ERR_PTR()

On 05/15/2012 06:27 PM, Jim Rees wrote:

> Boaz Harrosh wrote:
>
> > Normally we wouldn't put an unlikely() here. It makes the code
> > less readable and it's not going to affect benchmarks. But I can
> > add one if people prefer.
> >
>
> Personally It makes it more readable for me. It's like a statement:
> "error, always slow-path case here". I have brain parsers set
> for these.
>
> Personally I don't like it. It's a hint for the compiler. Remember when
> code was liberally sprinkled with "register" modifiers on local variables?
> Turned out the compiler was smarter than we were, and those modifiers were
> hurting performance. I'd rather let the compiler decide how to optimize.


Actually the compiler cannot. This is specifying:
"against all judgment I consider this path as the cold path, even if it is
taken more times or generates less compact code. Remove this branch from
branch prediction permanently, and never pre-fetch this path"

Again for me it's a programming style programmer-to-programmer hint. And is
very unlike "register".

The Kernel style does use unlikely() extensively in error paths, so it's not
only me. I'm not sure what the official stance is though.

I agree that it's all just shop talk ;-)

Thanks
Boaz

2012-05-15 14:18:30

by Boaz Harrosh

[permalink] [raw]
Subject: Re: [patch] NFS: kmalloc() doesn't return an ERR_PTR()

On 05/15/2012 04:57 PM, Dan Carpenter wrote:

> On Tue, May 15, 2012 at 04:48:23PM +0300, Boaz Harrosh wrote:
>> On 05/14/2012 10:45 PM, Dan Carpenter wrote:
>>
>>> Obviously we should check for NULL here instead of IS_ERR().
>>>
>>> Signed-off-by: Dan Carpenter <[email protected]>
>>>
>>> diff --git a/fs/nfs/idmap.c b/fs/nfs/idmap.c
>>> index ba3019f..233beea 100644
>>> --- a/fs/nfs/idmap.c
>>> +++ b/fs/nfs/idmap.c
>>> @@ -644,14 +644,14 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
>>>
>>> /* msg and im are freed in idmap_pipe_destroy_msg */
>>> msg = kmalloc(sizeof(*msg), GFP_KERNEL);
>>> - if (IS_ERR(msg)) {
>>> - ret = PTR_ERR(msg);
>>> + if (!msg) {
>>
>>
>> While at it please put an unlikely()
>>
>
> Normally we wouldn't put an unlikely() here. It makes the code
> less readable and it's not going to affect benchmarks. But I can
> add one if people prefer.
>


Personally It makes it more readable for me. It's like a statement:
"error, always slow-path case here". I have brain parsers set
for these.

Specifically here the if () is very small but if it is more code
it is exactly where it counts. But as a general rule I like the
error/slow-path case to be in an unlikely(). Later someone
might add more code which will matter.

> regards,
> dan carpenter
>


Thanks
Boaz

2012-05-15 13:53:56

by Dan Carpenter

[permalink] [raw]
Subject: Re: [patch] NFS: kmalloc() doesn't return an ERR_PTR()

On Tue, May 15, 2012 at 04:48:23PM +0300, Boaz Harrosh wrote:
> On 05/14/2012 10:45 PM, Dan Carpenter wrote:
>
> > Obviously we should check for NULL here instead of IS_ERR().
> >
> > Signed-off-by: Dan Carpenter <[email protected]>
> >
> > diff --git a/fs/nfs/idmap.c b/fs/nfs/idmap.c
> > index ba3019f..233beea 100644
> > --- a/fs/nfs/idmap.c
> > +++ b/fs/nfs/idmap.c
> > @@ -644,14 +644,14 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
> >
> > /* msg and im are freed in idmap_pipe_destroy_msg */
> > msg = kmalloc(sizeof(*msg), GFP_KERNEL);
> > - if (IS_ERR(msg)) {
> > - ret = PTR_ERR(msg);
> > + if (!msg) {
>
>
> While at it please put an unlikely()
>

Normally we wouldn't put an unlikely() here. It makes the code
less readable and it's not going to affect benchmarks. But I can
add one if people prefer.

regards,
dan carpenter


2012-05-15 15:28:04

by Jim Rees

[permalink] [raw]
Subject: Re: [patch] NFS: kmalloc() doesn't return an ERR_PTR()

Boaz Harrosh wrote:

> Normally we wouldn't put an unlikely() here. It makes the code
> less readable and it's not going to affect benchmarks. But I can
> add one if people prefer.
>

Personally It makes it more readable for me. It's like a statement:
"error, always slow-path case here". I have brain parsers set
for these.

Personally I don't like it. It's a hint for the compiler. Remember when
code was liberally sprinkled with "register" modifiers on local variables?
Turned out the compiler was smarter than we were, and those modifiers were
hurting performance. I'd rather let the compiler decide how to optimize.

2012-05-15 16:49:24

by walter harms

[permalink] [raw]
Subject: Re: [patch] NFS: kmalloc() doesn't return an ERR_PTR()



Am 15.05.2012 16:18, schrieb Boaz Harrosh:
> On 05/15/2012 04:57 PM, Dan Carpenter wrote:
>
>> On Tue, May 15, 2012 at 04:48:23PM +0300, Boaz Harrosh wrote:
>>> On 05/14/2012 10:45 PM, Dan Carpenter wrote:
>>>
>>>> Obviously we should check for NULL here instead of IS_ERR().
>>>>
>>>> Signed-off-by: Dan Carpenter <[email protected]>
>>>>
>>>> diff --git a/fs/nfs/idmap.c b/fs/nfs/idmap.c
>>>> index ba3019f..233beea 100644
>>>> --- a/fs/nfs/idmap.c
>>>> +++ b/fs/nfs/idmap.c
>>>> @@ -644,14 +644,14 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
>>>>
>>>> /* msg and im are freed in idmap_pipe_destroy_msg */
>>>> msg = kmalloc(sizeof(*msg), GFP_KERNEL);
>>>> - if (IS_ERR(msg)) {
>>>> - ret = PTR_ERR(msg);
>>>> + if (!msg) {
>>>
>>>
>>> While at it please put an unlikely()
>>>
>>
>> Normally we wouldn't put an unlikely() here. It makes the code
>> less readable and it's not going to affect benchmarks. But I can
>> add one if people prefer.
>>
>
>
> Personally It makes it more readable for me. It's like a statement:
> "error, always slow-path case here". I have brain parsers set
> for these.
>
> Specifically here the if () is very small but if it is more code
> it is exactly where it counts. But as a general rule I like the
> error/slow-path case to be in an unlikely(). Later someone
> might add more code which will matter.
>
>> regards,
>> dan carpenter
>>
>
>

Not long a go we had a hint from one of the developers that this likely()-stuff
should be used in the scheduler and has no use outside.

re,
wh

2012-05-16 00:38:22

by Peng Tao

[permalink] [raw]
Subject: Re: [patch] NFS: kmalloc() doesn't return an ERR_PTR()

On Wed, May 16, 2012 at 12:49 AM, walter harms <[email protected]> wrote:
>
>
> Am 15.05.2012 16:18, schrieb Boaz Harrosh:
>> On 05/15/2012 04:57 PM, Dan Carpenter wrote:
>>
>>> On Tue, May 15, 2012 at 04:48:23PM +0300, Boaz Harrosh wrote:
>>>> On 05/14/2012 10:45 PM, Dan Carpenter wrote:
>>>>
>>>>> Obviously we should check for NULL here instead of IS_ERR().
>>>>>
>>>>> Signed-off-by: Dan Carpenter <[email protected]>
>>>>>
>>>>> diff --git a/fs/nfs/idmap.c b/fs/nfs/idmap.c
>>>>> index ba3019f..233beea 100644
>>>>> --- a/fs/nfs/idmap.c
>>>>> +++ b/fs/nfs/idmap.c
>>>>> @@ -644,14 +644,14 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
>>>>>
>>>>>    /* msg and im are freed in idmap_pipe_destroy_msg */
>>>>>    msg = kmalloc(sizeof(*msg), GFP_KERNEL);
>>>>> -  if (IS_ERR(msg)) {
>>>>> -          ret = PTR_ERR(msg);
>>>>> +  if (!msg) {
>>>>
>>>>
>>>> While at it please put an unlikely()
>>>>
>>>
>>> Normally we wouldn't put an unlikely() here.  It makes the code
>>> less readable and it's not going to affect benchmarks.  But I can
>>> add one if people prefer.
>>>
>>
>>
>> Personally It makes it more readable for me. It's like a statement:
>> "error, always slow-path case here". I have brain parsers set
>> for these.
>>
>> Specifically here the if () is very small but if it is more code
>> it is exactly where it counts. But as a general rule I like the
>> error/slow-path case to be in an unlikely(). Later someone
>> might add more code which will matter.
>>
My impression is these hints are useful iif the code is on performance
critical path like scheduler, path walking, etc. Apparently nfs idmap
isn't the case.

Thanks,
Tao
>>> regards,
>>> dan carpenter
>>>
>>
>>
>
> Not long a go we had a hint from one of the developers that this likely()-stuff
> should be used in the scheduler and has no use outside.
>
> re,
>  wh
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

2012-05-15 13:48:38

by Boaz Harrosh

[permalink] [raw]
Subject: Re: [patch] NFS: kmalloc() doesn't return an ERR_PTR()

On 05/14/2012 10:45 PM, Dan Carpenter wrote:

> Obviously we should check for NULL here instead of IS_ERR().
>
> Signed-off-by: Dan Carpenter <[email protected]>
>
> diff --git a/fs/nfs/idmap.c b/fs/nfs/idmap.c
> index ba3019f..233beea 100644
> --- a/fs/nfs/idmap.c
> +++ b/fs/nfs/idmap.c
> @@ -644,14 +644,14 @@ static int nfs_idmap_legacy_upcall(struct key_construction *cons,
>
> /* msg and im are freed in idmap_pipe_destroy_msg */
> msg = kmalloc(sizeof(*msg), GFP_KERNEL);
> - if (IS_ERR(msg)) {
> - ret = PTR_ERR(msg);
> + if (!msg) {


While at it please put an unlikely()

Thanks
Boaz

> + ret = -ENOMEM;
> goto out0;
> }
>
> im = kmalloc(sizeof(*im), GFP_KERNEL);
> - if (IS_ERR(im)) {
> - ret = PTR_ERR(im);
> + if (!im) {
> + ret = -ENOMEM;
> goto out1;
> }
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html