* [PATCH 0/2] btrfs: minor bs != ps cases fixes for free space tree enforcing
@ 2025-12-18 4:45 Qu Wenruo
2025-12-18 4:45 ` [PATCH 1/2] btrfs: only enforce free space tree if v1 cache is required for bs < ps cases Qu Wenruo
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Qu Wenruo @ 2025-12-18 4:45 UTC (permalink / raw)
To: linux-btrfs
I'm update btrfs/131 to remove the v1 cache usage since v1 cache is
already marked deprecated.
With that update, I can run the test on bs < ps and bs > ps cases, the
formal failed due to the following reason:
- Free space cache is always enforced for bs < ps case
Even if 'nospace_cache' mount option is provided.
This is fixed by the first patch
And during tests I also exposed a minor problem for bs > ps cases:
- v1 cache mount is rejected for bs > ps cases
That's because we lack the automatic free space tree enforcing for
bs > ps cases.
This is fixed by the second patch.
Qu Wenruo (2):
btrfs: only enforce free space tree if v1 cache is required for bs <
ps cases
btrfs: forcing free space tree for bs > ps cases
fs/btrfs/super.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
--
2.52.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] btrfs: only enforce free space tree if v1 cache is required for bs < ps cases
2025-12-18 4:45 [PATCH 0/2] btrfs: minor bs != ps cases fixes for free space tree enforcing Qu Wenruo
@ 2025-12-18 4:45 ` Qu Wenruo
2025-12-18 4:45 ` [PATCH 2/2] btrfs: forcing free space tree for bs > " Qu Wenruo
2025-12-18 9:36 ` [PATCH 0/2] btrfs: minor bs != ps cases fixes for free space tree enforcing Filipe Manana
2 siblings, 0 replies; 4+ messages in thread
From: Qu Wenruo @ 2025-12-18 4:45 UTC (permalink / raw)
To: linux-btrfs
[BUG]
Since the introduction of btrfs bs < ps support, v1 cache is never on
the plan due to its hard coded PAGE_SIZE usage, and the future plan to
properly deprecate it.
However for bs < ps cases, even if 'nospace_cache,clear_cache' mount
option is specified, it's never respected and free space tree is always
enabled:
mkfs.btrfs -f -O ^bgt,fst $dev
mount $dev $mnt -o clear_cache,nospace_cache
umount $mnt
btrfs ins dump-super $dev
...
compat_ro_flags 0x3
( FREE_SPACE_TREE |
FREE_SPACE_TREE_VALID )
...
This means a different behavior compared to bs >= ps cases.
[CAUSE]
The forcing usage of v2 space cache is done inside
btrfs_set_free_space_cache_settings(), however it never checks if we're
even using space cache but always enabling v2 cache.
[FIX]
Instead unconditionally enable v2 cache, only forcing v2 cache if the
old v1 cache is required.
Now v2 space cache can be properly disabled on bs < ps cases:
mkfs.btrfs -f -O ^bgt,fst $dev
mount $dev $mnt -o clear_cache,nospace_cache
umount $mnt
btrfs ins dump-super $dev
...
compat_ro_flags 0x0
...
Fixes: 9f73f1aef98b ("btrfs: force v2 space cache usage for subpage mount")
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
fs/btrfs/super.c | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index a37b71091014..09c38becf20b 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -736,14 +736,12 @@ bool btrfs_check_options(const struct btrfs_fs_info *info,
*/
void btrfs_set_free_space_cache_settings(struct btrfs_fs_info *fs_info)
{
- if (fs_info->sectorsize < PAGE_SIZE) {
+ if (fs_info->sectorsize < PAGE_SIZE && btrfs_test_opt(fs_info, SPACE_CACHE)) {
+ btrfs_info(fs_info,
+ "forcing free space tree for sector size %u with page size %lu",
+ fs_info->sectorsize, PAGE_SIZE);
btrfs_clear_opt(fs_info->mount_opt, SPACE_CACHE);
- if (!btrfs_test_opt(fs_info, FREE_SPACE_TREE)) {
- btrfs_info(fs_info,
- "forcing free space tree for sector size %u with page size %lu",
- fs_info->sectorsize, PAGE_SIZE);
- btrfs_set_opt(fs_info->mount_opt, FREE_SPACE_TREE);
- }
+ btrfs_set_opt(fs_info->mount_opt, FREE_SPACE_TREE);
}
/*
--
2.52.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] btrfs: forcing free space tree for bs > ps cases
2025-12-18 4:45 [PATCH 0/2] btrfs: minor bs != ps cases fixes for free space tree enforcing Qu Wenruo
2025-12-18 4:45 ` [PATCH 1/2] btrfs: only enforce free space tree if v1 cache is required for bs < ps cases Qu Wenruo
@ 2025-12-18 4:45 ` Qu Wenruo
2025-12-18 9:36 ` [PATCH 0/2] btrfs: minor bs != ps cases fixes for free space tree enforcing Filipe Manana
2 siblings, 0 replies; 4+ messages in thread
From: Qu Wenruo @ 2025-12-18 4:45 UTC (permalink / raw)
To: linux-btrfs
[BUG]
Currently we only enforcing free space tree for bs < ps cases, but with
the recently added bs > ps support, we lack the free space tree
enforcing, causing explicit v1 cache mount option to fail on bs > ps
cases:
# mount -o space_cache=v1 /dev/test/scratch1 /mnt/btrfs/
mount: /mnt/btrfs: wrong fs type, bad option, bad superblock on /dev/mapper/test-scratch1, missing codepage or helper program, or other error.
dmesg(1) may have more information after failed mount system call.
# dmesg -t | tail -n7
BTRFS: device fsid ac14a6fa-4ec9-449e-aec9-7d1777bfdc06 devid 1 transid 11 /dev/mapper/test-scratch1 (253:3) scanned by mount (2849)
BTRFS info (device dm-3): first mount of filesystem ac14a6fa-4ec9-449e-aec9-7d1777bfdc06
BTRFS info (device dm-3): using crc32c checksum algorithm
BTRFS warning (device dm-3): support for block size 8192 with page size 4096 is experimental, some features may be missing
BTRFS warning (device dm-3): space cache v1 is being deprecated and will be removed in a future release, please use -o space_cache=v2
BTRFS warning (device dm-3): v1 space cache is not supported for page size 4096 with sectorsize 8192
BTRFS error (device dm-3): open_ctree failed: -22
[FIX]
Just enable the same free space tree for bs > ps cases, aligning the
behavior to bs < ps cases.
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
fs/btrfs/super.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index 09c38becf20b..0a931555e6dc 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -736,7 +736,7 @@ bool btrfs_check_options(const struct btrfs_fs_info *info,
*/
void btrfs_set_free_space_cache_settings(struct btrfs_fs_info *fs_info)
{
- if (fs_info->sectorsize < PAGE_SIZE && btrfs_test_opt(fs_info, SPACE_CACHE)) {
+ if (fs_info->sectorsize != PAGE_SIZE && btrfs_test_opt(fs_info, SPACE_CACHE)) {
btrfs_info(fs_info,
"forcing free space tree for sector size %u with page size %lu",
fs_info->sectorsize, PAGE_SIZE);
--
2.52.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 0/2] btrfs: minor bs != ps cases fixes for free space tree enforcing
2025-12-18 4:45 [PATCH 0/2] btrfs: minor bs != ps cases fixes for free space tree enforcing Qu Wenruo
2025-12-18 4:45 ` [PATCH 1/2] btrfs: only enforce free space tree if v1 cache is required for bs < ps cases Qu Wenruo
2025-12-18 4:45 ` [PATCH 2/2] btrfs: forcing free space tree for bs > " Qu Wenruo
@ 2025-12-18 9:36 ` Filipe Manana
2 siblings, 0 replies; 4+ messages in thread
From: Filipe Manana @ 2025-12-18 9:36 UTC (permalink / raw)
To: Qu Wenruo; +Cc: linux-btrfs
On Thu, Dec 18, 2025 at 4:46 AM Qu Wenruo <wqu@suse.com> wrote:
>
> I'm update btrfs/131 to remove the v1 cache usage since v1 cache is
> already marked deprecated.
>
> With that update, I can run the test on bs < ps and bs > ps cases, the
> formal failed due to the following reason:
>
> - Free space cache is always enforced for bs < ps case
> Even if 'nospace_cache' mount option is provided.
> This is fixed by the first patch
>
> And during tests I also exposed a minor problem for bs > ps cases:
>
> - v1 cache mount is rejected for bs > ps cases
> That's because we lack the automatic free space tree enforcing for
> bs > ps cases.
> This is fixed by the second patch.
>
> Qu Wenruo (2):
> btrfs: only enforce free space tree if v1 cache is required for bs <
> ps cases
> btrfs: forcing free space tree for bs > ps cases
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Looks good, thanks.
>
> fs/btrfs/super.c | 12 +++++-------
> 1 file changed, 5 insertions(+), 7 deletions(-)
>
> --
> 2.52.0
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-12-18 9:36 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-18 4:45 [PATCH 0/2] btrfs: minor bs != ps cases fixes for free space tree enforcing Qu Wenruo
2025-12-18 4:45 ` [PATCH 1/2] btrfs: only enforce free space tree if v1 cache is required for bs < ps cases Qu Wenruo
2025-12-18 4:45 ` [PATCH 2/2] btrfs: forcing free space tree for bs > " Qu Wenruo
2025-12-18 9:36 ` [PATCH 0/2] btrfs: minor bs != ps cases fixes for free space tree enforcing Filipe Manana
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.