linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] hugetlb: Fix an error code in hugetlb_reserve_pages()
@ 2020-12-11 10:13 Dan Carpenter
  2020-12-11 19:49 ` Souptick Joarder
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Dan Carpenter @ 2020-12-11 10:13 UTC (permalink / raw)
  To: Mike Kravetz, Mina Almasry
  Cc: Andrew Morton, David Rientjes, linux-mm, kernel-janitors

Preserve the error code from region_add() instead of returning success.

Fixes: 0db9d74ed884 ("hugetlb: disable region_add file_region coalescing")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
From static analysis.  Untested.

 mm/hugetlb.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 1f3bf1710b66..ac2e48b9f1d7 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -5113,6 +5113,7 @@ int hugetlb_reserve_pages(struct inode *inode,
 
 		if (unlikely(add < 0)) {
 			hugetlb_acct_memory(h, -gbl_reserve);
+			ret = add;
 			goto out_put_pages;
 		} else if (unlikely(chg > add)) {
 			/*
-- 
2.29.2



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] hugetlb: Fix an error code in hugetlb_reserve_pages()
  2020-12-11 10:13 [PATCH] hugetlb: Fix an error code in hugetlb_reserve_pages() Dan Carpenter
@ 2020-12-11 19:49 ` Souptick Joarder
  2020-12-11 21:45   ` Matthew Wilcox
  2020-12-14  6:30   ` Dan Carpenter
  2020-12-14  9:37 ` David Hildenbrand
  2020-12-14 19:27 ` Mike Kravetz
  2 siblings, 2 replies; 6+ messages in thread
From: Souptick Joarder @ 2020-12-11 19:49 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: Mike Kravetz, Mina Almasry, Andrew Morton, David Rientjes,
	Linux-MM, kernel-janitors

Hi Dan,

On Fri, Dec 11, 2020 at 3:44 PM Dan Carpenter <dan.carpenter@oracle.com> wrote:
>
> Preserve the error code from region_add() instead of returning success.
>
> Fixes: 0db9d74ed884 ("hugetlb: disable region_add file_region coalescing")
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> ---
> From static analysis.  Untested.
>
>  mm/hugetlb.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 1f3bf1710b66..ac2e48b9f1d7 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -5113,6 +5113,7 @@ int hugetlb_reserve_pages(struct inode *inode,
>
>                 if (unlikely(add < 0)) {
>                         hugetlb_acct_memory(h, -gbl_reserve);
> +                       ret = add;

This function returns int but ret is long type.
Does it need correction ?

>                         goto out_put_pages;
>                 } else if (unlikely(chg > add)) {
>                         /*
> --
> 2.29.2
>
>


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] hugetlb: Fix an error code in hugetlb_reserve_pages()
  2020-12-11 19:49 ` Souptick Joarder
@ 2020-12-11 21:45   ` Matthew Wilcox
  2020-12-14  6:30   ` Dan Carpenter
  1 sibling, 0 replies; 6+ messages in thread
From: Matthew Wilcox @ 2020-12-11 21:45 UTC (permalink / raw)
  To: Souptick Joarder
  Cc: Dan Carpenter, Mike Kravetz, Mina Almasry, Andrew Morton,
	David Rientjes, Linux-MM, kernel-janitors

On Sat, Dec 12, 2020 at 01:19:28AM +0530, Souptick Joarder wrote:
> > @@ -5113,6 +5113,7 @@ int hugetlb_reserve_pages(struct inode *inode,
> >
> >                 if (unlikely(add < 0)) {
> >                         hugetlb_acct_memory(h, -gbl_reserve);
> > +                       ret = add;
> 
> This function returns int but ret is long type.
> Does it need correction ?

I wouold say "no", because 'ret' isn't returned _by_ this function (*),
its purpose is to capture the return value from other functions.

(*) OK, it is, if ret < 0.  But ret < 0 really means "Is this an error
number", which can be perfectly well represented in an int, short or long.
char is too small ;-)

So the range of values which will be placed in 'ret' is (-4096-LONG_MAX]


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] hugetlb: Fix an error code in hugetlb_reserve_pages()
  2020-12-11 19:49 ` Souptick Joarder
  2020-12-11 21:45   ` Matthew Wilcox
@ 2020-12-14  6:30   ` Dan Carpenter
  1 sibling, 0 replies; 6+ messages in thread
From: Dan Carpenter @ 2020-12-14  6:30 UTC (permalink / raw)
  To: Souptick Joarder
  Cc: Mike Kravetz, Mina Almasry, Andrew Morton, David Rientjes,
	Linux-MM, kernel-janitors

On Sat, Dec 12, 2020 at 01:19:28AM +0530, Souptick Joarder wrote:
> Hi Dan,
> 
> On Fri, Dec 11, 2020 at 3:44 PM Dan Carpenter <dan.carpenter@oracle.com> wrote:
> >
> > Preserve the error code from region_add() instead of returning success.
> >
> > Fixes: 0db9d74ed884 ("hugetlb: disable region_add file_region coalescing")
> > Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> > ---
> > From static analysis.  Untested.
> >
> >  mm/hugetlb.c | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> > index 1f3bf1710b66..ac2e48b9f1d7 100644
> > --- a/mm/hugetlb.c
> > +++ b/mm/hugetlb.c
> > @@ -5113,6 +5113,7 @@ int hugetlb_reserve_pages(struct inode *inode,
> >
> >                 if (unlikely(add < 0)) {
> >                         hugetlb_acct_memory(h, -gbl_reserve);
> > +                       ret = add;
> 
> This function returns int but ret is long type.
> Does it need correction ?
>

It doesn't *need* correction.  The code works fine as-is.  Smatch parses
it correctly, also.  Hard to say if making it "ret" makes the code
simpler or more complicated for a human reader.

regards,
dan carpenter



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] hugetlb: Fix an error code in hugetlb_reserve_pages()
  2020-12-11 10:13 [PATCH] hugetlb: Fix an error code in hugetlb_reserve_pages() Dan Carpenter
  2020-12-11 19:49 ` Souptick Joarder
@ 2020-12-14  9:37 ` David Hildenbrand
  2020-12-14 19:27 ` Mike Kravetz
  2 siblings, 0 replies; 6+ messages in thread
From: David Hildenbrand @ 2020-12-14  9:37 UTC (permalink / raw)
  To: Dan Carpenter, Mike Kravetz, Mina Almasry
  Cc: Andrew Morton, David Rientjes, linux-mm, kernel-janitors

On 11.12.20 11:13, Dan Carpenter wrote:
> Preserve the error code from region_add() instead of returning success.
> 
> Fixes: 0db9d74ed884 ("hugetlb: disable region_add file_region coalescing")
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> ---
> From static analysis.  Untested.
> 
>  mm/hugetlb.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 1f3bf1710b66..ac2e48b9f1d7 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -5113,6 +5113,7 @@ int hugetlb_reserve_pages(struct inode *inode,
>  
>  		if (unlikely(add < 0)) {
>  			hugetlb_acct_memory(h, -gbl_reserve);
> +			ret = add;
>  			goto out_put_pages;
>  		} else if (unlikely(chg > add)) {
>  			/*
> 

Was wioing if something like

return ret ? ret : add;

would be cleaner, but then I spotted "chg" ...

Reviewed-by: David Hildenbrand <david@redhat.com>

-- 
Thanks,

David / dhildenb



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] hugetlb: Fix an error code in hugetlb_reserve_pages()
  2020-12-11 10:13 [PATCH] hugetlb: Fix an error code in hugetlb_reserve_pages() Dan Carpenter
  2020-12-11 19:49 ` Souptick Joarder
  2020-12-14  9:37 ` David Hildenbrand
@ 2020-12-14 19:27 ` Mike Kravetz
  2 siblings, 0 replies; 6+ messages in thread
From: Mike Kravetz @ 2020-12-14 19:27 UTC (permalink / raw)
  To: Dan Carpenter, Mina Almasry
  Cc: Andrew Morton, David Rientjes, linux-mm, kernel-janitors

On 12/11/20 2:13 AM, Dan Carpenter wrote:
> Preserve the error code from region_add() instead of returning success.
> 
> Fixes: 0db9d74ed884 ("hugetlb: disable region_add file_region coalescing")
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> ---
> From static analysis.  Untested.

Thanks Dan.

> 
>  mm/hugetlb.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 1f3bf1710b66..ac2e48b9f1d7 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -5113,6 +5113,7 @@ int hugetlb_reserve_pages(struct inode *inode,
>  
>  		if (unlikely(add < 0)) {
>  			hugetlb_acct_memory(h, -gbl_reserve);
> +			ret = add;
>  			goto out_put_pages;
>  		} else if (unlikely(chg > add)) {
>  			/*
> 


That error path is VERY unlikely to be taken, but is indeed incorrect.

When looking at this, I noticed that callers of hugetlb_reserve_pages only
check for 0 or !0.  This changed as the code evolved to add reservation
cgroup support.  The routine type can be changed to a bool and simplified
some.  I'll send that as a follow up patch not for stable.

Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
-- 
Mike Kravetz


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-12-14 19:30 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-11 10:13 [PATCH] hugetlb: Fix an error code in hugetlb_reserve_pages() Dan Carpenter
2020-12-11 19:49 ` Souptick Joarder
2020-12-11 21:45   ` Matthew Wilcox
2020-12-14  6:30   ` Dan Carpenter
2020-12-14  9:37 ` David Hildenbrand
2020-12-14 19:27 ` Mike Kravetz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox