2021-04-26 09:35:45

by Yang Li

[permalink] [raw]
Subject: [PATCH] bonding/alb: return -ENOMEM when kmalloc failed

The driver is using -1 instead of the -ENOMEM defined macro to
specify that a buffer allocation failed. Using the correct error
code is more intuitive.

Smatch tool warning:
drivers/net/bonding/bond_alb.c:850 rlb_initialize() warn: returning -1
instead of -ENOMEM is sloppy

No functional change, just more standardized.

Reported-by: Abaci Robot <[email protected]>
Signed-off-by: Yang Li <[email protected]>
---
drivers/net/bonding/bond_alb.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
index c3091e0..dad5383 100644
--- a/drivers/net/bonding/bond_alb.c
+++ b/drivers/net/bonding/bond_alb.c
@@ -847,7 +847,7 @@ static int rlb_initialize(struct bonding *bond)

new_hashtbl = kmalloc(size, GFP_KERNEL);
if (!new_hashtbl)
- return -1;
+ return -ENOMEM;

spin_lock_bh(&bond->mode_lock);

--
1.8.3.1


2021-04-26 13:55:47

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH] bonding/alb: return -ENOMEM when kmalloc failed

On Mon, 2021-04-26 at 17:33 +0800, Yang Li wrote:
> The driver is using -1 instead of the -ENOMEM defined macro to
> specify that a buffer allocation failed. Using the correct error
> code is more intuitive.
>
> Smatch tool warning:
> drivers/net/bonding/bond_alb.c:850 rlb_initialize() warn: returning -1
> instead of -ENOMEM is sloppy
>
> No functional change, just more standardized.
[]
> diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
[]
> @@ -847,7 +847,7 @@ static int rlb_initialize(struct bonding *bond)
> ?
>
> ? new_hashtbl = kmalloc(size, GFP_KERNEL);
> ? if (!new_hashtbl)
> - return -1;
> + return -ENOMEM;
> ?
>
> ? spin_lock_bh(&bond->mode_lock);
> ?
>

Perhaps the bond_alb_initialize call here which uses the return
value from this function:

drivers/net/bonding/bond_main.c: if (bond_alb_initialize(bond, (BOND_MODE(bond) == BOND_MODE_ALB)))
drivers/net/bonding/bond_main.c- return -ENOMEM;

should use a store/test/return style instead of a fixed value return.

res = bond_alb_initialize(bond, BOND_MODE(bond) == BOND_MODE_ALB);
if (res < 0)
return res;