Thread (18 messages) 18 messages, 4 authors, 2011-01-06

Re: PATCH: hugetlb: handle NODEMASK_ALLOC failure correctly

From: Michal Hocko <hidden>
Date: 2011-01-06 22:23:37

On Thu 06-01-11 12:38:58, Andrew Morton wrote:
On Thu, 6 Jan 2011 11:04:39 +0100
Michal Hocko [off-list ref] wrote:
quoted
NODEMASK_ALLOC can use kmalloc if nodemask_t > 256 bytes so it might
fail with NULL as a result. Let's check the resulting variable and
fail with -ENOMEM if NODEMASK_ALLOC failed.

Signed-off-by: Michal Hocko <redacted>
---
 mm/hugetlb.c |   18 +++++++++++++++---
 1 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 4c0606c..21f31b2 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -1439,14 +1439,19 @@ static ssize_t nr_hugepages_store_common(bool obey_mempolicy,
 	struct hstate *h;
 	NODEMASK_ALLOC(nodemask_t, nodes_allowed, GFP_KERNEL | __GFP_NORETRY);
 
+	if (!nodes_allowed) {
+		err = -ENOMEM;
+		goto out;
+	}
Looks good to me.  I was going to complain that it adds extra unneeded
instructions in the case where the nodemasks are allocated on the
stack.  But it appears that gcc assumes that stack-based variables
cannot have address zero, so if gcc sees this:

	{
		nodemask_t foo;

		if (!&foo) {
			stuff
		}
	}

if just removes it all for us.
Yes, I cannot find it anywhere (maybe just a bad searching pattern) but
this seems to be the case for -O1, -O2 and -Os. Anyway it makes a
perfect sense to me.

Thanks for the review.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
-- 
Michal Hocko
L3 team 
SUSE LINUX s.r.o.
Lihovarska 1060/12
190 00 Praha 9    
Czech Republic

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help