Message ID | 1330421640-5137-1-git-send-email-dmitry.antipov@linaro.org |
---|---|
State | New |
Headers | show |
On Tue, Feb 28, 2012 at 01:33:59PM +0400, Dmitry Antipov wrote: > - Fix vmap() to return ZERO_SIZE_PTR if 0 pages are requested; > - fix __vmalloc_node_range() to return ZERO_SIZE_PTR if 0 bytes > are requested; > - fix __vunmap() to check passed pointer with ZERO_OR_NULL_PTR. > Why? Also patch 2/2 should go in before patch 1/2 or it breaks things. regards, dan carpenter
On 02/28/2012 01:44 PM, Dan Carpenter wrote: > On Tue, Feb 28, 2012 at 01:33:59PM +0400, Dmitry Antipov wrote: >> - Fix vmap() to return ZERO_SIZE_PTR if 0 pages are requested; >> - fix __vmalloc_node_range() to return ZERO_SIZE_PTR if 0 bytes >> are requested; >> - fix __vunmap() to check passed pointer with ZERO_OR_NULL_PTR. >> > > Why? 1) it was requested by the subsystem (co?)maintainer, see http://lkml.org/lkml/2012/1/27/475; 2) this looks to be a convenient way to trace/debug zero-size allocation errors (although I don't advocate it as a best way). Dmitry
On Tue, Feb 28, 2012 at 03:59:25PM +0400, Dmitry Antipov wrote: > On 02/28/2012 01:44 PM, Dan Carpenter wrote: > >On Tue, Feb 28, 2012 at 01:33:59PM +0400, Dmitry Antipov wrote: > >> - Fix vmap() to return ZERO_SIZE_PTR if 0 pages are requested; > >> - fix __vmalloc_node_range() to return ZERO_SIZE_PTR if 0 bytes > >> are requested; > >> - fix __vunmap() to check passed pointer with ZERO_OR_NULL_PTR. > >> > > > >Why? > > 1) it was requested by the subsystem (co?)maintainer, see http://lkml.org/lkml/2012/1/27/475; > 2) this looks to be a convenient way to trace/debug zero-size allocation errors (although > I don't advocate it as a best way). Could you include that in the changelog when the final version is ready? regards, dan carpenter
On 02/28/2012 05:30 PM, Dan Carpenter wrote: > Could you include that in the changelog when the final version is > ready? What changelog you're saying about? Dmitry
On Wed, Feb 29, 2012 at 10:53:13AM +0400, Dmitry Antipov wrote: > On 02/28/2012 05:30 PM, Dan Carpenter wrote: > > >Could you include that in the changelog when the final version is > >ready? > > What changelog you're saying about? > The commit message to this patch. Right now it just says "fix vmalloc" but it doesn't say what the bug is or why the new version is better. You and Rusty know the reasons already but we should write them down in the changelog so other people can follow along as well. regards, dan carpenter
On Wed, Feb 29, 2012 at 8:53 AM, Dmitry Antipov <dmitry.antipov@linaro.org> wrote: > On 02/28/2012 05:30 PM, Dan Carpenter wrote: > >> Could you include that in the changelog when the final version is >> ready? > > > What changelog you're saying about? Dmitry, he means your commit log message.
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 86ce9a5..040a9cd 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -1456,7 +1456,7 @@ static void __vunmap(const void *addr, int deallocate_pages) { struct vm_struct *area; - if (!addr) + if (unlikely(ZERO_OR_NULL_PTR(addr))) return; if ((PAGE_SIZE-1) & (unsigned long)addr) { @@ -1548,7 +1548,9 @@ void *vmap(struct page **pages, unsigned int count, might_sleep(); - if (count > totalram_pages) + if (unlikely(!count)) + return ZERO_SIZE_PTR; + if (unlikely(count > totalram_pages)) return NULL; area = get_vm_area_caller((count << PAGE_SHIFT), flags, @@ -1648,8 +1650,10 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align, void *addr; unsigned long real_size = size; + if (unlikely(!size)) + return ZERO_SIZE_PTR; size = PAGE_ALIGN(size); - if (!size || (size >> PAGE_SHIFT) > totalram_pages) + if (unlikely((size >> PAGE_SHIFT) > totalram_pages)) goto fail; area = __get_vm_area_node(size, align, VM_ALLOC | VM_UNLIST,
- Fix vmap() to return ZERO_SIZE_PTR if 0 pages are requested; - fix __vmalloc_node_range() to return ZERO_SIZE_PTR if 0 bytes are requested; - fix __vunmap() to check passed pointer with ZERO_OR_NULL_PTR. Signed-off-by: Dmitry Antipov <dmitry.antipov@linaro.org> --- mm/vmalloc.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-)