* [PATCH 0/2] btrfs-progs: check: report deprecated inode cache as errors @ 2024-09-12 8:39 Qu Wenruo 2024-09-12 8:39 ` [PATCH 1/2] btrfs-progs: check: detect deprecated inode cache Qu Wenruo 2024-09-12 8:39 ` [PATCH 2/2] btrfs-progs: fsck-tests: add a test case with " Qu Wenruo 0 siblings, 2 replies; 3+ messages in thread From: Qu Wenruo @ 2024-09-12 8:39 UTC (permalink / raw) To: linux-btrfs There are two reports that inode cache is causing kernel to reject those data backrefs. It turns out the long to be deprecated inode cache is biting us unexpectedly. (And the design of those special inodes has no intention to properly fill its members like mode and transid correctly). However the original mode btrfs check is not updated to detect them, in fact there are special hacks to not report them as errors. Meanwhile the lowmem mode immediately picks them as errors from day one. The first patch fixes the original mode to report inode cache as error, and add extra messages on how to properly fix the problem using 'btrfs rescue clear-ino-cache'. The second patch is a new test case for both modes of btrfs check. Qu Wenruo (2): btrfs-progs: check: detect deprecated inode cache btrfs-progs: fsck-tests: add a test case with deprecated inode cache check/main.c | 12 +++++++++--- check/mode-lowmem.c | 9 +++++++++ check/mode-original.h | 1 + .../4k_nodesize.img.xz | Bin 0 -> 17320 bytes .../064-deprecated-inode-cache/test.sh | 14 ++++++++++++++ 5 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 tests/fsck-tests/064-deprecated-inode-cache/4k_nodesize.img.xz create mode 100755 tests/fsck-tests/064-deprecated-inode-cache/test.sh -- 2.46.0 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 1/2] btrfs-progs: check: detect deprecated inode cache 2024-09-12 8:39 [PATCH 0/2] btrfs-progs: check: report deprecated inode cache as errors Qu Wenruo @ 2024-09-12 8:39 ` Qu Wenruo 2024-09-12 8:39 ` [PATCH 2/2] btrfs-progs: fsck-tests: add a test case with " Qu Wenruo 1 sibling, 0 replies; 3+ messages in thread From: Qu Wenruo @ 2024-09-12 8:39 UTC (permalink / raw) To: linux-btrfs [BUG] There are reports about deprecated inode cache causing newer kernels to rejecting them. Such inode cache is rarely utilized and already fully deprecated since v5.11, and newer kernel will reject data extents of inode cache since v6.11. But original mode btrfs check won't detect nor report them as error. Meanwhile lowmem mode can properly detect and report them: ERROR: root 5 INODE[18446744073709551604] nlink(1) not equal to inode_refs(0) ERROR: invalid imode mode bits: 00 ERROR: invalid inode generation 18446744073709551604 or transid 1 for ino 18446744073709551605, expect [0, 72) ERROR: root 5 INODE[18446744073709551605] is orphan item Since those inode cache paid no attention to properly maintain all the numbers, they are easy targets for more recent lowmem mode. [CAUSE] For original mode, it has extra hardcoded hacks to avoid nlink checks for inode cache inode. Furthermore original mode doesn't check the mode bits nor its generation. [FIX] For original mode, remove the hack for inode cache so that the deprecated inode cache can be reported as an error. For both modes, add extra global message to direct the affected users to use 'btrfs rescue clear-ino-cache' to clear the deprecated cache. Signed-off-by: Qu Wenruo <wqu@suse.com> --- check/main.c | 12 +++++++++--- check/mode-lowmem.c | 9 +++++++++ check/mode-original.h | 1 + 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/check/main.c b/check/main.c index d4108b7315e0..4f5bce15521e 100644 --- a/check/main.c +++ b/check/main.c @@ -86,6 +86,7 @@ bool no_holes = false; bool is_free_space_tree = false; bool init_extent_tree = false; bool check_data_csum = false; +static bool found_free_ino_cache = false; struct cache_tree *roots_info_cache = NULL; enum btrfs_check_mode { @@ -606,6 +607,8 @@ static void print_inode_error(struct btrfs_root *root, struct inode_record *rec) fprintf(stderr, "root %llu inode %llu errors %x", root_objectid, rec->ino, rec->errors); + if (errors & I_ERR_DEPRECATED_FREE_INO) + fprintf(stderr, ", deprecated free inode cache"); if (errors & I_ERR_NO_INODE_ITEM) fprintf(stderr, ", no inode item"); if (errors & I_ERR_NO_ORPHAN_ITEM) @@ -773,9 +776,6 @@ static struct inode_record *get_inode_rec(struct cache_tree *inode_cache, node->cache.size = 1; node->data = rec; - if (ino == BTRFS_FREE_INO_OBJECTID) - rec->found_link = 1; - ret = insert_cache_extent(inode_cache, &node->cache); if (ret) { free(rec); @@ -3224,6 +3224,10 @@ static int check_inode_recs(struct btrfs_root *root, } } + if (rec->ino == BTRFS_FREE_INO_OBJECTID) { + rec->errors |= I_ERR_DEPRECATED_FREE_INO; + found_free_ino_cache = true; + } if (!rec->found_inode_item) rec->errors |= I_ERR_NO_INODE_ITEM; if (rec->found_link != rec->nlink) @@ -10834,6 +10838,8 @@ static int cmd_check(const struct cmd_struct *cmd, int argc, char **argv) ret = do_check_fs_roots(&root_cache); task_stop(g_task_ctx.info); + if (found_free_ino_cache) + printf("deprecated inode cache can be removed by 'btrfs rescue clear-ino-cache'\n"); err |= !!ret; if (ret) { error("errors found in fs roots"); diff --git a/check/mode-lowmem.c b/check/mode-lowmem.c index 4b6faccacbbc..4eb0b5b64223 100644 --- a/check/mode-lowmem.c +++ b/check/mode-lowmem.c @@ -44,6 +44,7 @@ static u64 last_allocated_chunk; static u64 total_used = 0; +static bool found_free_ino_cache = false; static int calc_extent_flag(struct btrfs_root *root, struct extent_buffer *eb, u64 *flags_ret) @@ -2629,6 +2630,12 @@ static int check_inode_item(struct btrfs_root *root, struct btrfs_path *path) return err; } + if (inode_id == BTRFS_FREE_INO_OBJECTID) { + error("subvolume %lld has deprecated inode cache", + root->root_key.objectid); + found_free_ino_cache = true; + } + is_orphan = has_orphan_item(root, inode_id); ii = btrfs_item_ptr(node, slot, struct btrfs_inode_item); isize = btrfs_inode_size(node, ii); @@ -5616,6 +5623,8 @@ next: out: btrfs_release_path(&path); + if (found_free_ino_cache) + printf("deprecated inode cache can be removed by 'btrfs rescue clear-ino-cache'\n"); return err; } diff --git a/check/mode-original.h b/check/mode-original.h index ac8de57cc5d4..949d75513f9b 100644 --- a/check/mode-original.h +++ b/check/mode-original.h @@ -189,6 +189,7 @@ struct unaligned_extent_rec_t { #define I_ERR_INVALID_GEN (1U << 20) #define I_ERR_INVALID_NLINK (1U << 21) #define I_ERR_INVALID_XATTR (1U << 22) +#define I_ERR_DEPRECATED_FREE_INO (1U << 23) struct inode_record { struct list_head backrefs; -- 2.46.0 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH 2/2] btrfs-progs: fsck-tests: add a test case with deprecated inode cache 2024-09-12 8:39 [PATCH 0/2] btrfs-progs: check: report deprecated inode cache as errors Qu Wenruo 2024-09-12 8:39 ` [PATCH 1/2] btrfs-progs: check: detect deprecated inode cache Qu Wenruo @ 2024-09-12 8:39 ` Qu Wenruo 1 sibling, 0 replies; 3+ messages in thread From: Qu Wenruo @ 2024-09-12 8:39 UTC (permalink / raw) To: linux-btrfs The inode_cache and involved on-disk formats are deprecated and will have no effect since v5.11 kernel. And in v6.11 kernel, new tree-checker will even reject data extents belonging to those deprecated inode cache. Lowmem check can detect such deprecated inode cache from the beginning. This images are generated by 5.10 LTS kernels with inode cache. Signed-off-by: Qu Wenruo <wqu@suse.com> --- .../4k_nodesize.img.xz | Bin 0 -> 17320 bytes .../064-deprecated-inode-cache/test.sh | 14 ++++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 tests/fsck-tests/064-deprecated-inode-cache/4k_nodesize.img.xz create mode 100755 tests/fsck-tests/064-deprecated-inode-cache/test.sh diff --git a/tests/fsck-tests/064-deprecated-inode-cache/4k_nodesize.img.xz b/tests/fsck-tests/064-deprecated-inode-cache/4k_nodesize.img.xz new file mode 100644 index 0000000000000000000000000000000000000000..da8314bbe3ee4c44b40f8d6cf3efd79b98c30e5a GIT binary patch literal 17320 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	(P?nj)7Zsr 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 Tt6Q_wvBYQl0ssI200dcDWKGqt literal 0 HcmV?d00001 diff --git a/tests/fsck-tests/064-deprecated-inode-cache/test.sh b/tests/fsck-tests/064-deprecated-inode-cache/test.sh new file mode 100755 index 000000000000..ca3bfa7182a2 --- /dev/null +++ b/tests/fsck-tests/064-deprecated-inode-cache/test.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# +# Verify that check can report deprecated inode cache as an error + +source "$TEST_TOP/common" || exit + +check_prereq btrfs + +check_image() { + run_mustfail "deprecated inode cache not reported as an error" \ + "$TOP/btrfs" check "$1" +} + +check_all_images -- 2.46.0 ^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-09-12 8:39 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-09-12 8:39 [PATCH 0/2] btrfs-progs: check: report deprecated inode cache as errors Qu Wenruo 2024-09-12 8:39 ` [PATCH 1/2] btrfs-progs: check: detect deprecated inode cache Qu Wenruo 2024-09-12 8:39 ` [PATCH 2/2] btrfs-progs: fsck-tests: add a test case with " Qu Wenruo
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).