On Mon, 2 Sep 2013 20:35:44 +0800 Wanpeng Li <liwanp@xxxxxxxxxxxxxxxxxx> wrote: > Don't warning twice in __vmalloc_area_node and __vmalloc_node_range if > __vmalloc_area_node allocation failure. > > Signed-off-by: Wanpeng Li <liwanp@xxxxxxxxxxxxxxxxxx> > --- > mm/vmalloc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index ee41cc6..e324d38 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -1635,7 +1635,7 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align, > > addr = __vmalloc_area_node(area, gfp_mask, prot, node, caller); > if (!addr) > - goto fail; > + return NULL; > > /* > * In this function, newly allocated vm_struct has VM_UNINITIALIZED Putting a `return' in the middle of a function is often a bad thing - functions which have multiple return points often lead to resource and locking leaks. It's particularly bad to have that return *after* a bunch of "goto fail" statements - the result is utter spaghetti. Fix: --- a/mm/vmalloc.c~mm-vmalloc-dont-warn-about-vmalloc-allocation-failure-twice-fix +++ a/mm/vmalloc.c @@ -1626,16 +1626,16 @@ void *__vmalloc_node_range(unsigned long size = PAGE_ALIGN(size); if (!size || (size >> PAGE_SHIFT) > totalram_pages) - goto fail; + goto warn; area = __get_vm_area_node(size, align, VM_ALLOC | VM_UNINITIALIZED, start, end, node, gfp_mask, caller); if (!area) - goto fail; + goto warn; addr = __vmalloc_area_node(area, gfp_mask, prot, node, caller); if (!addr) - return NULL; + goto fail; /* * In this function, newly allocated vm_struct has VM_UNINITIALIZED @@ -1653,10 +1653,11 @@ void *__vmalloc_node_range(unsigned long return addr; -fail: +warn: warn_alloc_failed(gfp_mask, 0, "vmalloc: allocation failure: %lu bytes\n", real_size); +fail: return NULL; } _ -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>