bcache: allocate meta data pages as compound pages
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>
This commit is contained in:
Родитель
6acd193b26
Коммит
5fe4886785
|
@ -322,7 +322,7 @@ int bch_btree_keys_alloc(struct btree_keys *b,
|
|||
|
||||
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;
|
||||
|
||||
|
|
|
@ -785,7 +785,7 @@ int bch_btree_cache_alloc(struct cache_set *c)
|
|||
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);
|
||||
|
||||
|
|
|
@ -999,8 +999,8 @@ int bch_journal_alloc(struct cache_set *c)
|
|||
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;
|
||||
|
|
|
@ -1784,7 +1784,7 @@ void bch_cache_set_unregister(struct cache_set *c)
|
|||
}
|
||||
|
||||
#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)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче