diff mbox

[RFC,3/4] sparc: remove __GFP_NOFAIL reuquirement

Message ID 1425304483-7987-4-git-send-email-mhocko@suse.cz
State RFC, archived
Delegated to: David Miller
Headers show

Commit Message

Michal Hocko March 2, 2015, 1:54 p.m. UTC
mdesc_kmalloc is currently requiring __GFP_NOFAIL allocation although it
seems that the allocation failure is handled by all callers (via
mdesc_alloc). __GFP_NOFAIL is a strong liability for the memory
allocator and so the users are discouraged to use the flag unless the
allocation failure is really a nogo. Drop the flag here as this doesn't
seem to be the case.

Signed-off-by: Michal Hocko <mhocko@suse.cz>
---
 arch/sparc/kernel/mdesc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

David Miller March 2, 2015, 8:04 p.m. UTC | #1
From: Michal Hocko <mhocko@suse.cz>
Date: Mon,  2 Mar 2015 14:54:42 +0100

> mdesc_kmalloc is currently requiring __GFP_NOFAIL allocation although it
> seems that the allocation failure is handled by all callers (via
> mdesc_alloc). __GFP_NOFAIL is a strong liability for the memory
> allocator and so the users are discouraged to use the flag unless the
> allocation failure is really a nogo. Drop the flag here as this doesn't
> seem to be the case.
> 
> Signed-off-by: Michal Hocko <mhocko@suse.cz>

It is a serious failure.

If we miss an MDESC update due to this allocation failure, the update
is not an event which gets retransmitted so we will lose the updated
machine description forever.

We really need this allocation to succeed.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/sparc/kernel/mdesc.c b/arch/sparc/kernel/mdesc.c
index 99632a87e697..6801bd778af2 100644
--- a/arch/sparc/kernel/mdesc.c
+++ b/arch/sparc/kernel/mdesc.c
@@ -136,7 +136,7 @@  static struct mdesc_handle *mdesc_kmalloc(unsigned int mdesc_size)
 		       sizeof(struct mdesc_hdr) +
 		       mdesc_size);
 
-	base = kmalloc(handle_size + 15, GFP_KERNEL | __GFP_NOFAIL);
+	base = kmalloc(handle_size + 15, GFP_KERNEL);
 	if (base) {
 		struct mdesc_handle *hp;
 		unsigned long addr;