linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] btrfs: dump extra info if one free space cache has more bitmaps than it should
@ 2022-08-01  1:35 Qu Wenruo
  2022-08-01  2:28 ` Anand Jain
  2022-08-02 17:14 ` David Sterba
  0 siblings, 2 replies; 3+ messages in thread
From: Qu Wenruo @ 2022-08-01  1:35 UTC (permalink / raw)
  To: linux-btrfs

There is an internal report on hitting the following ASSERT() in
recalculate_thresholds():

 	ASSERT(ctl->total_bitmaps <= max_bitmaps);

Above @max_bitmaps is calculated using the following variables:

- bytes_per_bg
  8 * 4096 * 4096 (128M) for x86_64/x86.

- block_group->length
  The length of the block group.

@max_bitmaps is the rounded up value of block_group->length / 128M.

Normally one free space cache should not have more bitmaps than above
value, but when it happens the ASSERT() can be triggered if
CONFIG_BTRFS_ASSERT is also enabled.

But the ASSERT() itself won't provide enough info to know which is going
wrong.
Is the bg too small thus it only allows one bitmap?
Or is there something else wrong?

So although I haven't found extra reports or crash dump to do further
investigation, add the extra info to make it more helpful to debug.

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 fs/btrfs/free-space-cache.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
index 996da650ecdc..4ebfd9b7bc53 100644
--- a/fs/btrfs/free-space-cache.c
+++ b/fs/btrfs/free-space-cache.c
@@ -693,6 +693,12 @@ static void recalculate_thresholds(struct btrfs_free_space_ctl *ctl)
 
 	max_bitmaps = max_t(u64, max_bitmaps, 1);
 
+	if (ctl->total_bitmaps > max_bitmaps)
+		btrfs_err(block_group->fs_info,
+	"invalid free space control: bg start=%llu len=%llu total_bitmaps=%u unit=%u max_bitmaps=%llu bytes_per_bg=%llu",
+			  block_group->start, block_group->length,
+			  ctl->total_bitmaps, ctl->unit, max_bitmaps,
+			  bytes_per_bg);
 	ASSERT(ctl->total_bitmaps <= max_bitmaps);
 
 	/*
-- 
2.37.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] btrfs: dump extra info if one free space cache has more bitmaps than it should
  2022-08-01  1:35 [PATCH] btrfs: dump extra info if one free space cache has more bitmaps than it should Qu Wenruo
@ 2022-08-01  2:28 ` Anand Jain
  2022-08-02 17:14 ` David Sterba
  1 sibling, 0 replies; 3+ messages in thread
From: Anand Jain @ 2022-08-01  2:28 UTC (permalink / raw)
  To: Qu Wenruo, linux-btrfs

On 01/08/2022 09:35, Qu Wenruo wrote:
> There is an internal report on hitting the following ASSERT() in
> recalculate_thresholds():
> 
>   	ASSERT(ctl->total_bitmaps <= max_bitmaps);
> 
> Above @max_bitmaps is calculated using the following variables:
> 
> - bytes_per_bg
>    8 * 4096 * 4096 (128M) for x86_64/x86.
> 
> - block_group->length
>    The length of the block group.
> 
> @max_bitmaps is the rounded up value of block_group->length / 128M.
> 
> Normally one free space cache should not have more bitmaps than above
> value, but when it happens the ASSERT() can be triggered if
> CONFIG_BTRFS_ASSERT is also enabled.
> 
> But the ASSERT() itself won't provide enough info to know which is going
> wrong.
> Is the bg too small thus it only allows one bitmap?
> Or is there something else wrong?
> 
> So although I haven't found extra reports or crash dump to do further
> investigation, add the extra info to make it more helpful to debug.
> 
  I guess there is no reproducer. If there is any other related may be 
added such as configs etc.

> Signed-off-by: Qu Wenruo <wqu@suse.com>

Reviewed-by: Anand Jain <anand.jain@oracle.com>


> ---
>   fs/btrfs/free-space-cache.c | 6 ++++++
>   1 file changed, 6 insertions(+)
> 
> diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c
> index 996da650ecdc..4ebfd9b7bc53 100644
> --- a/fs/btrfs/free-space-cache.c
> +++ b/fs/btrfs/free-space-cache.c
> @@ -693,6 +693,12 @@ static void recalculate_thresholds(struct btrfs_free_space_ctl *ctl)
>   
>   	max_bitmaps = max_t(u64, max_bitmaps, 1);
>   
> +	if (ctl->total_bitmaps > max_bitmaps)
> +		btrfs_err(block_group->fs_info,
> +	"invalid free space control: bg start=%llu len=%llu total_bitmaps=%u unit=%u max_bitmaps=%llu bytes_per_bg=%llu",
> +			  block_group->start, block_group->length,
> +			  ctl->total_bitmaps, ctl->unit, max_bitmaps,
> +			  bytes_per_bg);
>   	ASSERT(ctl->total_bitmaps <= max_bitmaps);
>   
>   	/*


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] btrfs: dump extra info if one free space cache has more bitmaps than it should
  2022-08-01  1:35 [PATCH] btrfs: dump extra info if one free space cache has more bitmaps than it should Qu Wenruo
  2022-08-01  2:28 ` Anand Jain
@ 2022-08-02 17:14 ` David Sterba
  1 sibling, 0 replies; 3+ messages in thread
From: David Sterba @ 2022-08-02 17:14 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: linux-btrfs

On Mon, Aug 01, 2022 at 09:35:57AM +0800, Qu Wenruo wrote:
> There is an internal report on hitting the following ASSERT() in
> recalculate_thresholds():
> 
>  	ASSERT(ctl->total_bitmaps <= max_bitmaps);
> 
> Above @max_bitmaps is calculated using the following variables:
> 
> - bytes_per_bg
>   8 * 4096 * 4096 (128M) for x86_64/x86.
> 
> - block_group->length
>   The length of the block group.
> 
> @max_bitmaps is the rounded up value of block_group->length / 128M.
> 
> Normally one free space cache should not have more bitmaps than above
> value, but when it happens the ASSERT() can be triggered if
> CONFIG_BTRFS_ASSERT is also enabled.
> 
> But the ASSERT() itself won't provide enough info to know which is going
> wrong.
> Is the bg too small thus it only allows one bitmap?
> Or is there something else wrong?
> 
> So although I haven't found extra reports or crash dump to do further
> investigation, add the extra info to make it more helpful to debug.
> 
> Signed-off-by: Qu Wenruo <wqu@suse.com>

Added to misc-next, thanks.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-08-02 17:19 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-01  1:35 [PATCH] btrfs: dump extra info if one free space cache has more bitmaps than it should Qu Wenruo
2022-08-01  2:28 ` Anand Jain
2022-08-02 17:14 ` David Sterba

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).