On Sun, 1 Feb 2015, green@xxxxxxxxxxxxxx wrote: > From: Oleg Drokin <green@xxxxxxxxxxxxxx> > > vzalloc_node helpfully suggests to use __vmalloc_node if a more tight > control over allocation flags is needed, but in fact __vmalloc_node > is not only not exported, it's also static, so could not be used > outside of mm/vmalloc.c > Make it to be available as it was apparently intended. > __vmalloc_node() is for the generalized functionality that is needed for the vmalloc API and not part of the API itself. I think what you want to do is add a vmalloc_node_gfp(), or more specifically a vzalloc_node_gfp(), to do GFP_NOFS when needed. > Signed-off-by: Oleg Drokin <green@xxxxxxxxxxxxxx> > --- > include/linux/vmalloc.h | 3 +++ > mm/vmalloc.c | 10 ++++------ > 2 files changed, 7 insertions(+), 6 deletions(-) > > diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h > index b87696f..7eb2c46 100644 > --- a/include/linux/vmalloc.h > +++ b/include/linux/vmalloc.h > @@ -73,6 +73,9 @@ extern void *vmalloc_exec(unsigned long size); > extern void *vmalloc_32(unsigned long size); > extern void *vmalloc_32_user(unsigned long size); > extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot); > +extern void *__vmalloc_node(unsigned long size, unsigned long align, > + gfp_t gfp_mask, pgprot_t prot, int node, > + const void *caller); > extern void *__vmalloc_node_range(unsigned long size, unsigned long align, > unsigned long start, unsigned long end, gfp_t gfp_mask, > pgprot_t prot, int node, const void *caller); > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index 39c3388..b882d95 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -1552,9 +1552,6 @@ void *vmap(struct page **pages, unsigned int count, > } > EXPORT_SYMBOL(vmap); > > -static void *__vmalloc_node(unsigned long size, unsigned long align, > - gfp_t gfp_mask, pgprot_t prot, > - int node, const void *caller); > static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask, > pgprot_t prot, int node) > { > @@ -1685,13 +1682,14 @@ fail: > * allocator with @gfp_mask flags. Map them into contiguous > * kernel virtual space, using a pagetable protection of @prot. > */ > -static void *__vmalloc_node(unsigned long size, unsigned long align, > - gfp_t gfp_mask, pgprot_t prot, > - int node, const void *caller) > +void *__vmalloc_node(unsigned long size, unsigned long align, > + gfp_t gfp_mask, pgprot_t prot, int node, > + const void *caller) > { > return __vmalloc_node_range(size, align, VMALLOC_START, VMALLOC_END, > gfp_mask, prot, node, caller); > } > +EXPORT_SYMBOL(__vmalloc_node); > > void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot) > { -- 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>