Re: [Q] get_ma_area() function

Hugh Dickins (hugh@veritas.com)
Tue, 7 May 2002 14:58:21 +0100 (BST)


On Tue, 7 May 2002, Andrey Panin wrote:
>
> looking at mm/vmalloc.c i found one strange (for me) line of code.
>
> From mm/vmalloc.c:
>
> struct vm_struct * get_vm_area(unsigned long size, unsigned long flags)
> {
> unsigned long addr;
> struct vm_struct **p, *tmp, *area;
>
> area = (struct vm_struct *) kmalloc(sizeof(*area), GFP_KERNEL);
> if (!area)
> return NULL;
> size += PAGE_SIZE;
> ^^^^^^^^^^^^^^^^^^
> Why ? Maybe size = PAGE_ALIGN(size); is more correct here ?

No, __vmalloc already did the size = PAGE_ALIGN(size).
Here it is intentionally adding one page to the virtual allocation size,
to leave one invalid guard or fence page between vmalloc'ed allocations,
to trap overruns from one area to the next. You're right, a comment
would be appropriate there.

Hugh

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/