lkml.org 
[lkml]   [2022]   [Jan]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/3] mm/vmalloc: Eliminate an extra orig_gfp_mask
    Date
    That extra variable has been introduced just for keeping an original
    passed gfp_mask because it is updated with __GFP_NOWARN on entry, thus
    error handling messages were broken.

    Instead we can keep an original gfp_mask without modifying it and add
    an extra __GFP_NOWARN flag together with gfp_mask as a parameter to
    the vm_area_alloc_pages() function. It will make it less confused.

    Cc: Vasily Averin <vvs@virtuozzo.com>
    Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
    ---
    mm/vmalloc.c | 12 +++++-------
    1 file changed, 5 insertions(+), 7 deletions(-)

    diff --git a/mm/vmalloc.c b/mm/vmalloc.c
    index 52ee67107046..04edd32ba6bc 100644
    --- a/mm/vmalloc.c
    +++ b/mm/vmalloc.c
    @@ -2953,7 +2953,6 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
    int node)
    {
    const gfp_t nested_gfp = (gfp_mask & GFP_RECLAIM_MASK) | __GFP_ZERO;
    - const gfp_t orig_gfp_mask = gfp_mask;
    bool nofail = gfp_mask & __GFP_NOFAIL;
    unsigned long addr = (unsigned long)area->addr;
    unsigned long size = get_vm_area_size(area);
    @@ -2967,7 +2966,6 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
    max_small_pages = ALIGN(size, 1UL << page_shift) >> PAGE_SHIFT;

    array_size = (unsigned long)max_small_pages * sizeof(struct page *);
    - gfp_mask |= __GFP_NOWARN;
    if (!(gfp_mask & (GFP_DMA | GFP_DMA32)))
    gfp_mask |= __GFP_HIGHMEM;

    @@ -2980,7 +2978,7 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
    }

    if (!area->pages) {
    - warn_alloc(orig_gfp_mask, NULL,
    + warn_alloc(gfp_mask, NULL,
    "vmalloc error: size %lu, failed to allocated page array size %lu",
    nr_small_pages * PAGE_SIZE, array_size);
    free_vm_area(area);
    @@ -2990,8 +2988,8 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
    set_vm_area_page_order(area, page_shift - PAGE_SHIFT);
    page_order = vm_area_page_order(area);

    - area->nr_pages = vm_area_alloc_pages(gfp_mask, node,
    - page_order, nr_small_pages, area->pages);
    + area->nr_pages = vm_area_alloc_pages(gfp_mask | __GFP_NOWARN,
    + node, page_order, nr_small_pages, area->pages);

    atomic_long_add(area->nr_pages, &nr_vmalloc_pages);
    if (gfp_mask & __GFP_ACCOUNT) {
    @@ -3007,7 +3005,7 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
    * allocation request, free them via __vfree() if any.
    */
    if (area->nr_pages != nr_small_pages) {
    - warn_alloc(orig_gfp_mask, NULL,
    + warn_alloc(gfp_mask, NULL,
    "vmalloc error: size %lu, page order %u, failed to allocate pages",
    area->nr_pages * PAGE_SIZE, page_order);
    goto fail;
    @@ -3035,7 +3033,7 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
    memalloc_noio_restore(flags);

    if (ret < 0) {
    - warn_alloc(orig_gfp_mask, NULL,
    + warn_alloc(gfp_mask, NULL,
    "vmalloc error: size %lu, failed to map pages",
    area->nr_pages * PAGE_SIZE);
    goto fail;
    --
    2.30.2
    \
     
     \ /
      Last update: 2022-01-19 15:37    [W:3.203 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site