All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hannes Reinecke <hare@suse.de>
To: colyli@suse.de, linux-bcache@vger.kernel.org
Cc: linux-block@vger.kernel.org
Subject: Re: [PATCH v3 12/16] bcache: handle btree node memory allocation properly for bucket size > 8MB
Date: Thu, 16 Jul 2020 08:08:55 +0200	[thread overview]
Message-ID: <9a66ca8e-c120-bdc3-ee76-8692bcdb07d8@suse.de> (raw)
In-Reply-To: <20200715143015.14957-13-colyli@suse.de>

On 7/15/20 4:30 PM, colyli@suse.de wrote:
> From: Coly Li <colyli@suse.de>
> 
> Currently the bcache internal btree node occupies a whole bucket. When
> loading the btree node from cache device into memory, mca_data_alloc()
> will call bch_btree_keys_alloc() to allocate memory for the whole bucket
> size, ilog2(b->c->btree_pages) is send to bch_btree_keys_alloc() as the
> parameter 'page_order'.
> 
> c->btree_pages is set as bucket_pages() in bch_cache_set_alloc(), for
> bucket size > 8MB, ilog2(b->c->btree_pages) is 12 for 4KB page size. By
> default the maximum page order __get_free_pages() accepts is MAX_ORDER
> (11), in this condition bch_btree_keys_alloc() will always fail.
> 
> Because of other over-page-order allocation failure fails the cache
> device registration, such btree node allocation failure wasn't observed
> during runtime. After other blocking page allocation failures for bucket
> size > 8MB, this btree node allocation issue may trigger potentical risk
> e.g. infinite dead-loop to retry btree node allocation after failure.
> 
> This patch fixes the potential problem by setting c->btree_pages to
> meta_bucket_pages() in bch_cache_set_alloc(). In the condition that
> bucket size > 8MB, meta_bucket_pages() will always return a number which
> won't exceed the maximum page order of the buddy allocator.
> 
> Signed-off-by: Coly Li <colyli@suse.de>
> ---
>   drivers/md/bcache/super.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
> index b1d8388ef57d..02901d0ae8e2 100644
> --- a/drivers/md/bcache/super.c
> +++ b/drivers/md/bcache/super.c
> @@ -1867,7 +1867,7 @@ struct cache_set *bch_cache_set_alloc(struct cache_sb *sb)
>   	c->nr_uuids		= meta_bucket_bytes(&c->sb) / sizeof(struct uuid_entry);
>   	c->devices_max_used	= 0;
>   	atomic_set(&c->attached_dev_nr, 0);
> -	c->btree_pages		= bucket_pages(c);
> +	c->btree_pages		= meta_bucket_pages(&c->sb);
>   	if (c->btree_pages > BTREE_MAX_PAGES)
>   		c->btree_pages = max_t(int, c->btree_pages / 4,
>   				       BTREE_MAX_PAGES);
> 
Reviewed-by: Hannes Reinecke <hare@suse.de>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke            Teamlead Storage & Networking
hare@suse.de                               +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer

  reply	other threads:[~2020-07-16  6:09 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-15 14:29 [PATCH v3 00/16] bcache: extend bucket size to 32bit width colyli
2020-07-15 14:30 ` [PATCH v3 01/16] bcache: add read_super_common() to read major part of super block colyli
2020-07-15 14:30 ` [PATCH v3 02/16] bcache: add more accurate error information in read_super_common() colyli
2020-07-15 14:30 ` [PATCH v3 03/16] bcache: disassemble the big if() checks in bch_cache_set_alloc() colyli
2020-07-15 14:30 ` [PATCH v3 04/16] bcache: fix super block seq numbers comparision in register_cache_set() colyli
2020-07-15 14:30 ` [PATCH v3 05/16] bcache: increase super block version for cache device and backing device colyli
2020-07-15 14:30 ` [PATCH v3 06/16] bcache: move bucket related code into read_super_common() colyli
2020-07-15 14:30 ` [PATCH v3 07/16] bcache: struct cache_sb is only for in-memory super block now colyli
2020-07-15 18:21   ` Christoph Hellwig
2020-07-16  3:31     ` Coly Li
2020-07-15 14:30 ` [PATCH v3 08/16] bcache: introduce meta_bucket_pages() related helper routines colyli
2020-07-15 15:36   ` Hannes Reinecke
2020-07-15 16:00     ` Coly Li
2020-07-15 14:30 ` [PATCH v3 09/16] bcache: handle c->uuids properly for bucket size > 8MB colyli
2020-07-15 15:37   ` Hannes Reinecke
2020-07-15 14:30 ` [PATCH v3 10/16] bcache: handle cache prio_buckets and disk_buckets " colyli
2020-07-15 15:38   ` Hannes Reinecke
2020-07-15 14:30 ` [PATCH v3 11/16] bcache: handle cache set verify_ondisk " colyli
2020-07-16  6:07   ` Hannes Reinecke
2020-07-15 14:30 ` [PATCH v3 12/16] bcache: handle btree node memory allocation " colyli
2020-07-16  6:08   ` Hannes Reinecke [this message]
2020-07-15 14:30 ` [PATCH v3 13/16] bcache: add bucket_size_hi into struct cache_sb_disk for large bucket colyli
2020-07-16  6:15   ` Hannes Reinecke
2020-07-16  6:41     ` Coly Li
2020-07-16  7:02       ` Hannes Reinecke
2020-07-16  7:08         ` Coly Li
2020-07-15 14:30 ` [PATCH v3 14/16] bcache: add sysfs file to display feature sets information of cache set colyli
2020-07-16  6:17   ` Hannes Reinecke
2020-07-16  6:20     ` Coly Li
2020-07-15 14:30 ` [PATCH v3 15/16] bcache: avoid extra memory allocation from mempool c->fill_iter colyli
2020-07-16  6:18   ` Hannes Reinecke
2020-07-15 14:30 ` [PATCH v3 16/16] bcache: avoid extra memory consumption in struct bbio for large bucket size colyli
2020-07-16  6:18   ` Hannes Reinecke

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=9a66ca8e-c120-bdc3-ee76-8692bcdb07d8@suse.de \
    --to=hare@suse.de \
    --cc=colyli@suse.de \
    --cc=linux-bcache@vger.kernel.org \
    --cc=linux-block@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.