lkml.org 
[lkml]   [2020]   [Aug]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 059/204] bcache: allocate meta data pages as compound pages
    Date
    From: Coly Li <colyli@suse.de>

    commit 5fe48867856367142d91a82f2cbf7a57a24cbb70 upstream.

    There are some meta data of bcache are allocated by multiple pages,
    and they are used as bio bv_page for I/Os to the cache device. for
    example cache_set->uuids, cache->disk_buckets, journal_write->data,
    bset_tree->data.

    For such meta data memory, all the allocated pages should be treated
    as a single memory block. Then the memory management and underlying I/O
    code can treat them more clearly.

    This patch adds __GFP_COMP flag to all the location allocating >0 order
    pages for the above mentioned meta data. Then their pages are treated
    as compound pages now.

    Signed-off-by: Coly Li <colyli@suse.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/md/bcache/bset.c | 2 +-
    drivers/md/bcache/btree.c | 2 +-
    drivers/md/bcache/journal.c | 4 ++--
    drivers/md/bcache/super.c | 2 +-
    4 files changed, 5 insertions(+), 5 deletions(-)

    --- a/drivers/md/bcache/bset.c
    +++ b/drivers/md/bcache/bset.c
    @@ -322,7 +322,7 @@ int bch_btree_keys_alloc(struct btree_ke

    b->page_order = page_order;

    - t->data = (void *) __get_free_pages(gfp, b->page_order);
    + t->data = (void *) __get_free_pages(__GFP_COMP|gfp, b->page_order);
    if (!t->data)
    goto err;

    --- a/drivers/md/bcache/btree.c
    +++ b/drivers/md/bcache/btree.c
    @@ -785,7 +785,7 @@ int bch_btree_cache_alloc(struct cache_s
    mutex_init(&c->verify_lock);

    c->verify_ondisk = (void *)
    - __get_free_pages(GFP_KERNEL, ilog2(bucket_pages(c)));
    + __get_free_pages(GFP_KERNEL|__GFP_COMP, ilog2(bucket_pages(c)));

    c->verify_data = mca_bucket_alloc(c, &ZERO_KEY, GFP_KERNEL);

    --- a/drivers/md/bcache/journal.c
    +++ b/drivers/md/bcache/journal.c
    @@ -999,8 +999,8 @@ int bch_journal_alloc(struct cache_set *
    j->w[1].c = c;

    if (!(init_fifo(&j->pin, JOURNAL_PIN, GFP_KERNEL)) ||
    - !(j->w[0].data = (void *) __get_free_pages(GFP_KERNEL, JSET_BITS)) ||
    - !(j->w[1].data = (void *) __get_free_pages(GFP_KERNEL, JSET_BITS)))
    + !(j->w[0].data = (void *) __get_free_pages(GFP_KERNEL|__GFP_COMP, JSET_BITS)) ||
    + !(j->w[1].data = (void *) __get_free_pages(GFP_KERNEL|__GFP_COMP, JSET_BITS)))
    return -ENOMEM;

    return 0;
    --- a/drivers/md/bcache/super.c
    +++ b/drivers/md/bcache/super.c
    @@ -1775,7 +1775,7 @@ void bch_cache_set_unregister(struct cac
    }

    #define alloc_bucket_pages(gfp, c) \
    - ((void *) __get_free_pages(__GFP_ZERO|gfp, ilog2(bucket_pages(c))))
    + ((void *) __get_free_pages(__GFP_ZERO|__GFP_COMP|gfp, ilog2(bucket_pages(c))))

    struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
    {

    \
     
     \ /
      Last update: 2020-08-20 11:39    [W:4.084 / U:0.180 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site