Re: [PATCH 2/3] mm/vmalloc: don't warning vmalloc allocation failure twice
On Mon, 2 Sep 2013 20:35:44 +0800 Wanpeng Li wrote: > Don't warning twice in __vmalloc_area_node and __vmalloc_node_range if > __vmalloc_area_node allocation failure. > > Signed-off-by: Wanpeng Li > --- > 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 from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 2/3] mm/vmalloc: don't warning vmalloc allocation failure twice
On Mon, 2 Sep 2013 20:35:44 +0800 Wanpeng Li liw...@linux.vnet.ibm.com wrote: Don't warning twice in __vmalloc_area_node and __vmalloc_node_range if __vmalloc_area_node allocation failure. Signed-off-by: Wanpeng Li liw...@linux.vnet.ibm.com --- 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 from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 2/3] mm/vmalloc: don't warning vmalloc allocation failure twice
Don't warning twice in __vmalloc_area_node and __vmalloc_node_range if __vmalloc_area_node allocation failure. Signed-off-by: Wanpeng Li --- 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 -- 1.8.1.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 2/3] mm/vmalloc: don't warning vmalloc allocation failure twice
Don't warning twice in __vmalloc_area_node and __vmalloc_node_range if __vmalloc_area_node allocation failure. Signed-off-by: Wanpeng Li liw...@linux.vnet.ibm.com --- 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 -- 1.8.1.2 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/