diff mbox series

ubifs: Remove a redundant null check on pointer lp

Message ID 20210621152249.20901-1-colin.king@canonical.com
State Rejected
Headers show
Series ubifs: Remove a redundant null check on pointer lp | expand

Commit Message

Colin Ian King June 21, 2021, 3:22 p.m. UTC
From: Colin Ian King <colin.king@canonical.com>

An earlier fix to replace an IS_ERR check on lp with a null check
on lp didn't remove a following null check on lp. The second null
check is redundant and can be removed.

Addresses-Coverity: ("Logically dead code")
Fixes: c770cd5190ba ("ubifs: fix an IS_ERR() vs NULL check")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 fs/ubifs/gc.c | 2 --
 1 file changed, 2 deletions(-)

Comments

Zhihao Cheng June 22, 2021, 2:38 a.m. UTC | #1
在 2021/6/21 23:22, Colin King 写道:
> From: Colin Ian King <colin.king@canonical.com>
> 
> An earlier fix to replace an IS_ERR check on lp with a null check
> on lp didn't remove a following null check on lp. The second null
> check is redundant and can be removed.
> 
> Addresses-Coverity: ("Logically dead code")
> Fixes: c770cd5190ba ("ubifs: fix an IS_ERR() vs NULL check")
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>   fs/ubifs/gc.c | 2 --
>   1 file changed, 2 deletions(-)
> 
> diff --git a/fs/ubifs/gc.c b/fs/ubifs/gc.c
> index 7cc22d7317ea..465beea52176 100644
> --- a/fs/ubifs/gc.c
> +++ b/fs/ubifs/gc.c
> @@ -899,8 +899,6 @@ int ubifs_gc_start_commit(struct ubifs_info *c)
>   			err = -ENOMEM;
>   			goto out;
>   		}
Hi Colin,
I just found out about it today thanks to your patch. Commit 
c770cd5190ba ("ubifs: fix an IS_ERR() vs NULL check") did import a new 
problem that ubifs_gc_start_commit() may return -ENOMEM while syncing fs.
I guess ubifs_fast_find_frdi_idx() return NULL pointer is the 
termination condition in while-loop, which means we cannot get a 
freeable index LEB in ubifs_gc_start_commit().

> -		if (!lp)
> -			break;
>   		idx_gc = kmalloc(sizeof(struct ubifs_gced_idx_leb), GFP_NOFS);
>   		if (!idx_gc) {
>   			err = -ENOMEM;
> 
BTW, the following modifications may be what you want?
diff --git a/fs/ubifs/gc.c b/fs/ubifs/gc.c
index 7cc22d7317ea..b1f276599b04 100644
--- a/fs/ubifs/gc.c
+++ b/fs/ubifs/gc.c
@@ -895,10 +895,6 @@ int ubifs_gc_start_commit(struct ubifs_info *c)
         /* Record index freeable LEBs for unmapping after commit */
         while (1) {
                 lp = ubifs_fast_find_frdi_idx(c);
-               if (!lp) {
-                       err = -ENOMEM;
-                       goto out;
-               }
                 if (!lp)
                         break;
                 idx_gc = kmalloc(sizeof(struct ubifs_gced_idx_leb), 
GFP_NOFS);
Dan Carpenter June 22, 2021, 6:44 a.m. UTC | #2
On Tue, Jun 22, 2021 at 10:38:52AM +0800, Zhihao Cheng wrote:
> 在 2021/6/21 23:22, Colin King 写道:
> > From: Colin Ian King <colin.king@canonical.com>
> > 
> > An earlier fix to replace an IS_ERR check on lp with a null check
> > on lp didn't remove a following null check on lp. The second null
> > check is redundant and can be removed.
> > 
> > Addresses-Coverity: ("Logically dead code")
> > Fixes: c770cd5190ba ("ubifs: fix an IS_ERR() vs NULL check")
> > Signed-off-by: Colin Ian King <colin.king@canonical.com>
> > ---
> >   fs/ubifs/gc.c | 2 --
> >   1 file changed, 2 deletions(-)
> > 
> > diff --git a/fs/ubifs/gc.c b/fs/ubifs/gc.c
> > index 7cc22d7317ea..465beea52176 100644
> > --- a/fs/ubifs/gc.c
> > +++ b/fs/ubifs/gc.c
> > @@ -899,8 +899,6 @@ int ubifs_gc_start_commit(struct ubifs_info *c)
> >   			err = -ENOMEM;
> >   			goto out;
> >   		}
> Hi Colin,
> I just found out about it today thanks to your patch. Commit c770cd5190ba
> ("ubifs: fix an IS_ERR() vs NULL check") did import a new problem that
> ubifs_gc_start_commit() may return -ENOMEM while syncing fs.
> I guess ubifs_fast_find_frdi_idx() return NULL pointer is the termination
> condition in while-loop, which means we cannot get a freeable index LEB in
> ubifs_gc_start_commit().

Ugh...  I'm so sorry.  My patch was clearly wrong.  I've tried before to
add a Smatch check which warns about duplicative NULL checks, but I
think this gives me a new idea to try.  Hopefully, it will prevent this
in the future.

Yeah, and it's my check which needs to be deleted, not the other one.

regards,
dan carpenter
Richard Weinberger June 22, 2021, 7:24 a.m. UTC | #3
----- Ursprüngliche Mail -----
> I just found out about it today thanks to your patch. Commit
> c770cd5190ba ("ubifs: fix an IS_ERR() vs NULL check") did import a new
> problem that ubifs_gc_start_commit() may return -ENOMEM while syncing fs.
> I guess ubifs_fast_find_frdi_idx() return NULL pointer is the
> termination condition in while-loop, which means we cannot get a
> freeable index LEB in ubifs_gc_start_commit().

Good catch! :-)

>> -		if (!lp)
>> -			break;
>>   		idx_gc = kmalloc(sizeof(struct ubifs_gced_idx_leb), GFP_NOFS);
>>   		if (!idx_gc) {
>>   			err = -ENOMEM;
>> 
> BTW, the following modifications may be what you want?
> diff --git a/fs/ubifs/gc.c b/fs/ubifs/gc.c
> index 7cc22d7317ea..b1f276599b04 100644
> --- a/fs/ubifs/gc.c
> +++ b/fs/ubifs/gc.c
> @@ -895,10 +895,6 @@ int ubifs_gc_start_commit(struct ubifs_info *c)
>         /* Record index freeable LEBs for unmapping after commit */
>         while (1) {
>                 lp = ubifs_fast_find_frdi_idx(c);
> -               if (!lp) {
> -                       err = -ENOMEM;
> -                       goto out;
> -               }
>                 if (!lp)
>                         break;
>                 idx_gc = kmalloc(sizeof(struct ubifs_gced_idx_leb),
> GFP_NOFS);

I'll drop Dan's patch from -next. Do you want to send a followup patch which removes the
in vain check?

Thanks,
//richard
Richard Weinberger June 22, 2021, 7:26 a.m. UTC | #4
----- Ursprüngliche Mail -----
> Ugh...  I'm so sorry.  My patch was clearly wrong.  I've tried before to

No need to worry. :)

> add a Smatch check which warns about duplicative NULL checks, but I
> think this gives me a new idea to try.  Hopefully, it will prevent this
> in the future.

Sounds great!

Thanks,
//richard
diff mbox series

Patch

diff --git a/fs/ubifs/gc.c b/fs/ubifs/gc.c
index 7cc22d7317ea..465beea52176 100644
--- a/fs/ubifs/gc.c
+++ b/fs/ubifs/gc.c
@@ -899,8 +899,6 @@  int ubifs_gc_start_commit(struct ubifs_info *c)
 			err = -ENOMEM;
 			goto out;
 		}
-		if (!lp)
-			break;
 		idx_gc = kmalloc(sizeof(struct ubifs_gced_idx_leb), GFP_NOFS);
 		if (!idx_gc) {
 			err = -ENOMEM;