linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree
@ 2017-11-22  9:03 Qu Wenruo
  2017-11-22  9:03 ` [PATCH 01/11] btrfs-progs: lowmem check: Fix regression which screws up extent allocator Qu Wenruo
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: Qu Wenruo @ 2017-11-22  9:03 UTC (permalink / raw)
  To: linux-btrfs; +Cc: dsterba

The patchset can be fetched from github:
https://github.com/adam900710/btrfs-progs/tree/lowmem_fix

The patchset is mostly rebased to v4.14, since there is some conflicts
with lowmem repair enhancement from Su Yue.

However the lowmem repair enhancement from Su Yue caused one regression,
and the original lowmem code also has some problem handling tree reloc
tree.

The first 2 patches are newly introduced to address this.
The rest are not touched at all (except the conflicts).

As always, the 9th patch may not reach mail list due to its size.
Please use github repo to fetch that file.

Qu Wenruo (11):
  btrfs-progs: lowmem check: Fix regression which screws up extent
    allocator
  btrfs-progs: lowmem check: Fix NULL pointer access caused by large
    tree reloc tree
  btrfs-progs: lowmem check: Fix inlined data extent ref lookup
  btrfs-progs: lowmem check: Fix false backref lost warning for keyed
    extent data ref
  btrfs-progs: fsck-test: Introduce test case for false data extent
    backref lost
  btrfs-progs: backref: Allow backref walk to handle direct parent ref
  btrfs-progs: lowmem check: Fix function call stack overflow caused by
    wrong tree reloc tree detection
  btrfs-progs: lowmem check: Fix false alerts for image with shared
    block ref only backref
  btrfs-progs: fsck-test: Add new image with shared block ref only
    metadata backref
  btrfs-progs: lowmem check: Fix false alerts of referencer count
    mismatch for snapshot
  btrfs-progs: fsck-tests: Introduce test case with keyed data backref
    with shared tree blocks

 backref.c                                          |   3 +
 cmds-check.c                                       |  79 +++++++++++++++------
 .../020-extent-ref-cases/keyed_data_ref_only.img   | Bin 0 -> 4096 bytes
 .../keyed_data_ref_with_shared_leaf.img            | Bin 0 -> 19456 bytes
 .../shared_block_ref_only.raw.xz                   | Bin 0 -> 217204 bytes
 5 files changed, 61 insertions(+), 21 deletions(-)
 create mode 100644 tests/fsck-tests/020-extent-ref-cases/keyed_data_ref_only.img
 create mode 100644 tests/fsck-tests/020-extent-ref-cases/keyed_data_ref_with_shared_leaf.img
 create mode 100644 tests/fsck-tests/020-extent-ref-cases/shared_block_ref_only.raw.xz

-- 
2.15.0


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

* [PATCH 01/11] btrfs-progs: lowmem check: Fix regression which screws up extent allocator
  2017-11-22  9:03 [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree Qu Wenruo
@ 2017-11-22  9:03 ` Qu Wenruo
  2017-11-22  9:03 ` [PATCH 02/11] btrfs-progs: lowmem check: Fix NULL pointer access caused by large tree reloc tree Qu Wenruo
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Qu Wenruo @ 2017-11-22  9:03 UTC (permalink / raw)
  To: linux-btrfs; +Cc: dsterba

[BUG]
Commit 723427d7e6b7 ("btrfs-progs: check: change the way lowmem mode traverses
metadata") introduces a regression which could make some fsck self test
case to fail.

For fsck test case 004-no-dir-item, btrfs check --mode=lowmem --repair
can cause BUG_ON() with ret = -17 (-EEXIST) when committing transaction.

The problem happens with the following backtrace:

./btrfs(+0x22045)[0x555d0dade045]
./btrfs(+0x2216f)[0x555d0dade16f]
./btrfs(+0x29df1)[0x555d0dae5df1]
./btrfs(+0x2a142)[0x555d0dae6142]
./btrfs(btrfs_alloc_free_block+0x78)[0x555d0dae6202]
./btrfs(__btrfs_cow_block+0x177)[0x555d0dad00a2]
./btrfs(btrfs_cow_block+0x116)[0x555d0dad05a8]
./btrfs(commit_tree_roots+0x91)[0x555d0db1fd4f]
./btrfs(btrfs_commit_transaction+0x18c)[0x555d0db20100]
./btrfs(btrfs_fix_super_size+0x190)[0x555d0db005a4]
./btrfs(btrfs_fix_device_and_super_size+0x177)[0x555d0db00771]
./btrfs(cmd_check+0x1757)[0x555d0db4f6ab]
./btrfs(main+0x138)[0x555d0dace5dd]
/usr/lib/libc.so.6(__libc_start_main+0xea)[0x7fa5e4613f6a]
./btrfs(_start+0x2a)[0x555d0dacddda]

The bug is triggered by that, extent allocator considers range [29360128,
29376512) is free and allocate it.
However when inserting EXTENT_ITEM, btrfs finds there is already one
tree block (fs tree root), returning -EEXIST and causing later BUG_ON().

[CAUSE]
The cause is in repair mode, lowmem check always pins all metadata
blocks.
However pinned metadata blocks will be unpin when transaction commits,
and will be marked as *FREE* space.

So later extent allocator will consider such range free and allocate
them wrongly.

[FIX]
Don't pin metadata blocks without valid reason or preparation (like
discard all free space cache to re-calculate free space on next write).

Fixes: 723427d7e6b7 ("btrfs-progs: check: change the way lowmem mode traverses metadata")
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 cmds-check.c | 10 ----------
 1 file changed, 10 deletions(-)

diff --git a/cmds-check.c b/cmds-check.c
index a93ac2c88a38..644ee084cb8e 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -6623,8 +6623,6 @@ out:
 	return ret;
 }
 
-static int pin_metadata_blocks(struct btrfs_fs_info *fs_info);
-
 /*
  * Iterate all items in the tree and call check_inode_item() to check.
  *
@@ -13306,8 +13304,6 @@ out:
 	return err;
 }
 
-static int pin_metadata_blocks(struct btrfs_fs_info *fs_info);
-
 /*
  * Low memory usage version check_chunks_and_extents.
  */
@@ -13326,12 +13322,6 @@ static int check_chunks_and_extents_v2(struct btrfs_fs_info *fs_info)
 	root = fs_info->fs_root;
 
 	if (repair) {
-		/* pin every tree block to avoid extent overwrite */
-		ret = pin_metadata_blocks(fs_info);
-		if (ret) {
-			error("failed to pin metadata blocks");
-			return ret;
-		}
 		trans = btrfs_start_transaction(fs_info->extent_root, 1);
 		if (IS_ERR(trans)) {
 			error("failed to start transaction before check");
-- 
2.15.0


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

* [PATCH 02/11] btrfs-progs: lowmem check: Fix NULL pointer access caused by large tree reloc tree
  2017-11-22  9:03 [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree Qu Wenruo
  2017-11-22  9:03 ` [PATCH 01/11] btrfs-progs: lowmem check: Fix regression which screws up extent allocator Qu Wenruo
@ 2017-11-22  9:03 ` Qu Wenruo
  2017-11-22  9:03 ` [PATCH 03/11] btrfs-progs: lowmem check: Fix inlined data extent ref lookup Qu Wenruo
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Qu Wenruo @ 2017-11-22  9:03 UTC (permalink / raw)
  To: linux-btrfs; +Cc: dsterba

[BUG]
v4.14 btrfs-progs can't pass new self test image with large tree reloc
trees.
It will fail with later "shared_block_ref_only.raw.xz" test image with
NULL pointer access.

[CAUSE]
For image with higher (level >= 2) tree reloc tree, for function
need_check() its ulist will be empty as tree reloc tree won't be
accounted in btrfs_find_all_roots().
Then accessing ulist->roots with rb_first() will return NULL pointer.

[FIX]
For need_check() function, if @roots is empty, meaning it's a tree reloc
tree, always check them.
Although this can be slow, but at least it's safe that we won't skip any
possible wrong tree block.

Fixes: 5e2dc770471b ("btrfs-progs: check: skip shared node or leaf check for low_memory mode")
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 cmds-check.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/cmds-check.c b/cmds-check.c
index 644ee084cb8e..03ff89a4221c 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -2149,7 +2149,12 @@ static int need_check(struct btrfs_root *root, struct ulist *roots)
 	struct rb_node *node;
 	struct ulist_node *u;
 
-	if (roots->nnodes == 1)
+	/*
+	 * @roots can be empty if it belongs to tree reloc tree
+	 * In that case, we should always check the leaf, as we can't use
+	 * the tree owner to ensure some other root will check it.
+	 */
+	if (roots->nnodes == 1 || roots->nnodes == 0)
 		return 1;
 
 	node = rb_first(&roots->root);
-- 
2.15.0


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

* [PATCH 03/11] btrfs-progs: lowmem check: Fix inlined data extent ref lookup
  2017-11-22  9:03 [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree Qu Wenruo
  2017-11-22  9:03 ` [PATCH 01/11] btrfs-progs: lowmem check: Fix regression which screws up extent allocator Qu Wenruo
  2017-11-22  9:03 ` [PATCH 02/11] btrfs-progs: lowmem check: Fix NULL pointer access caused by large tree reloc tree Qu Wenruo
@ 2017-11-22  9:03 ` Qu Wenruo
  2017-11-22  9:03 ` [PATCH 04/11] btrfs-progs: lowmem check: Fix false backref lost warning for keyed extent data ref Qu Wenruo
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Qu Wenruo @ 2017-11-22  9:03 UTC (permalink / raw)
  To: linux-btrfs; +Cc: dsterba

When lowmem fsck tries to find backref of a specified file extent, it
searches inlined data ref first.

However, extent data ref contains both owner root objectid, inode number
and calculated offset (file offset - extent offset).

The code only checks owner root objectid, not checking inode number nor
calculated offset.

This makes lowmem mode fails to detect any backref mismatch if there is
a inlined data ref with the same owner objectid.

Fix it by also checking extent data ref's objectid and offset.

Fixes: b0d360b541f0 ("btrfs-progs: check: introduce function to check data backref in extent tree")
Reported-by: Chris Murphy <chris@colorremedies.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 cmds-check.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/cmds-check.c b/cmds-check.c
index 03ff89a4221c..9f9eb504ae8e 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -12005,11 +12005,11 @@ static int check_extent_data_item(struct btrfs_root *root,
 	u64 disk_num_bytes;
 	u64 extent_num_bytes;
 	u64 extent_flags;
+	u64 offset;
 	u32 item_size;
 	unsigned long end;
 	unsigned long ptr;
 	int type;
-	u64 ref_root;
 	int found_dbackref = 0;
 	int slot = pathp->slots[0];
 	int err = 0;
@@ -12027,6 +12027,7 @@ static int check_extent_data_item(struct btrfs_root *root,
 	disk_bytenr = btrfs_file_extent_disk_bytenr(eb, fi);
 	disk_num_bytes = btrfs_file_extent_disk_num_bytes(eb, fi);
 	extent_num_bytes = btrfs_file_extent_num_bytes(eb, fi);
+	offset = btrfs_file_extent_offset(eb, fi);
 
 	/* Check unaligned disk_num_bytes and num_bytes */
 	if (!IS_ALIGNED(disk_num_bytes, root->fs_info->sectorsize)) {
@@ -12081,6 +12082,11 @@ static int check_extent_data_item(struct btrfs_root *root,
 	strict = should_check_extent_strictly(root, nrefs, -1);
 
 	while (ptr < end) {
+		u64 ref_root;
+		u64 ref_objectid;
+		u64 ref_offset;
+		bool match = false;
+
 		iref = (struct btrfs_extent_inline_ref *)ptr;
 		type = btrfs_extent_inline_ref_type(leaf, iref);
 		dref = (struct btrfs_extent_data_ref *)(&iref->offset);
@@ -12092,9 +12098,15 @@ static int check_extent_data_item(struct btrfs_root *root,
 		}
 		if (type == BTRFS_EXTENT_DATA_REF_KEY) {
 			ref_root = btrfs_extent_data_ref_root(leaf, dref);
-			if (ref_root == root->objectid)
+			ref_objectid = btrfs_extent_data_ref_objectid(leaf, dref);
+			ref_offset = btrfs_extent_data_ref_offset(leaf, dref);
+
+			if (ref_objectid == fi_key.objectid &&
+			    ref_offset == fi_key.offset - offset)
+				match = true;
+			if (ref_root == root->objectid && match)
 				found_dbackref = 1;
-			else if (!strict && owner == ref_root)
+			else if (!strict && owner == ref_root && match)
 				found_dbackref = 1;
 		} else if (type == BTRFS_SHARED_DATA_REF_KEY) {
 			found_dbackref = !check_tree_block_ref(root, NULL,
-- 
2.15.0


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

* [PATCH 04/11] btrfs-progs: lowmem check: Fix false backref lost warning for keyed extent data ref
  2017-11-22  9:03 [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree Qu Wenruo
                   ` (2 preceding siblings ...)
  2017-11-22  9:03 ` [PATCH 03/11] btrfs-progs: lowmem check: Fix inlined data extent ref lookup Qu Wenruo
@ 2017-11-22  9:03 ` Qu Wenruo
  2017-11-22  9:03 ` [PATCH 05/11] btrfs-progs: fsck-test: Introduce test case for false data extent backref lost Qu Wenruo
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Qu Wenruo @ 2017-11-22  9:03 UTC (permalink / raw)
  To: linux-btrfs; +Cc: dsterba

For keyed extent ref, its offset is calculated offset (file offset -
file extent offset), just like inlined extent data ref.

However the code is using file offset to hash extent data ref offset,
causing false backref lost warning like:
------
ERROR: data extent[16913485824 7577600] backref lost
------

Fixes: b0d360b541f0 ("btrfs-progs: check: introduce function to check data backref in extent tree")
Reported-by: Chris Murphy <chris@colorremedies.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 cmds-check.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cmds-check.c b/cmds-check.c
index 9f9eb504ae8e..452e715bf245 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -12126,7 +12126,7 @@ static int check_extent_data_item(struct btrfs_root *root,
 		dbref_key.objectid = btrfs_file_extent_disk_bytenr(eb, fi);
 		dbref_key.type = BTRFS_EXTENT_DATA_REF_KEY;
 		dbref_key.offset = hash_extent_data_ref(root->objectid,
-				fi_key.objectid, fi_key.offset);
+				fi_key.objectid, fi_key.offset - offset);
 
 		ret = btrfs_search_slot(NULL, root->fs_info->extent_root,
 					&dbref_key, &path, 0, 0);
-- 
2.15.0


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

* [PATCH 05/11] btrfs-progs: fsck-test: Introduce test case for false data extent backref lost
  2017-11-22  9:03 [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree Qu Wenruo
                   ` (3 preceding siblings ...)
  2017-11-22  9:03 ` [PATCH 04/11] btrfs-progs: lowmem check: Fix false backref lost warning for keyed extent data ref Qu Wenruo
@ 2017-11-22  9:03 ` Qu Wenruo
  2017-11-22  9:03 ` [PATCH 06/11] btrfs-progs: backref: Allow backref walk to handle direct parent ref Qu Wenruo
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Qu Wenruo @ 2017-11-22  9:03 UTC (permalink / raw)
  To: linux-btrfs; +Cc: dsterba

Introduce a new test image, which has an extent item with no inlined
extent data ref, but all keyed extent data ref.

Only in this case we can trigger fase data extent backref lost bug in
lowmem mode.

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 .../020-extent-ref-cases/keyed_data_ref_only.img         | Bin 0 -> 4096 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 tests/fsck-tests/020-extent-ref-cases/keyed_data_ref_only.img

diff --git a/tests/fsck-tests/020-extent-ref-cases/keyed_data_ref_only.img b/tests/fsck-tests/020-extent-ref-cases/keyed_data_ref_only.img
new file mode 100644
index 0000000000000000000000000000000000000000..668589f46d330cb5d6ff10b108e62585875548ca
GIT binary patch
literal 4096
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
PIdseYuX)P<UsnDL3U>9z

literal 0
HcmV?d00001

-- 
2.15.0


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

* [PATCH 06/11] btrfs-progs: backref: Allow backref walk to handle direct parent ref
  2017-11-22  9:03 [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree Qu Wenruo
                   ` (4 preceding siblings ...)
  2017-11-22  9:03 ` [PATCH 05/11] btrfs-progs: fsck-test: Introduce test case for false data extent backref lost Qu Wenruo
@ 2017-11-22  9:03 ` Qu Wenruo
  2017-11-22  9:03 ` [PATCH 07/11] btrfs-progs: lowmem check: Fix function call stack overflow caused by wrong tree reloc tree detection Qu Wenruo
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Qu Wenruo @ 2017-11-22  9:03 UTC (permalink / raw)
  To: linux-btrfs; +Cc: dsterba

[BUG]
Btrfs lowmem mode fails with the following ASSERT() on certain valid
image.
------
backref.c:466: __add_missing_keys: Assertion `ref->root_id` failed, value 0
------

[REASON]
Lowmem mode uses btrfs_find_all_roots() when walking down fs trees.

However if a tree block with only shared parent backref like below,
backref code from btrfs-progs doesn't handle it correct.
------
        item 72 key (604653731840 METADATA_ITEM 0) itemoff 13379 itemsize 60
                refs 4 gen 7198 flags TREE_BLOCK|FULL_BACKREF
                tree block skinny level 0
                shared block backref parent 604498477056
                shared block backref parent 604498460672
                shared block backref parent 604498444288
                shared block backref parent 604498411520
------

Such shared block ref is *direct* ref, which means we don't need to
solve its key, nor its rootid.

As the objective of backref walk is to find all direct parents until it
reaches tree root.
So for such direct ref, it should be pended to pref_stat->pending, other
than pending it to pref_stat->pending_missing_key.

[FIX]
For direct ref, pending it to pref_state->pending directly to solve the
problem.

Reported-by: Chris Murphy <chris@colorremedies.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 backref.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/backref.c b/backref.c
index 8615f6b8677a..27309e07a1e9 100644
--- a/backref.c
+++ b/backref.c
@@ -206,6 +206,9 @@ static int __add_prelim_ref(struct pref_state *prefstate, u64 root_id,
 	if (key) {
 		ref->key_for_search = *key;
 		head = &prefstate->pending;
+	} else if (parent) {
+		memset(&ref->key_for_search, 0, sizeof(ref->key_for_search));
+		head = &prefstate->pending;
 	} else {
 		memset(&ref->key_for_search, 0, sizeof(ref->key_for_search));
 		head = &prefstate->pending_missing_keys;
-- 
2.15.0


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

* [PATCH 07/11] btrfs-progs: lowmem check: Fix function call stack overflow caused by wrong tree reloc tree detection
  2017-11-22  9:03 [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree Qu Wenruo
                   ` (5 preceding siblings ...)
  2017-11-22  9:03 ` [PATCH 06/11] btrfs-progs: backref: Allow backref walk to handle direct parent ref Qu Wenruo
@ 2017-11-22  9:03 ` Qu Wenruo
  2017-11-22  9:03 ` [PATCH 08/11] btrfs-progs: lowmem check: Fix false alerts for image with shared block ref only backref Qu Wenruo
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Qu Wenruo @ 2017-11-22  9:03 UTC (permalink / raw)
  To: linux-btrfs; +Cc: dsterba

For tree reloc tree root, its backref points to it self.
So for such case, we should finish the lookup.

Previous end condition is to ensure it's tree reloc tree *and* needs its
root bytenr to match the bytenr passed in.

However the @root passed in can be other tree, e.g. other tree reloc
tree which shares the node/leaf.
This makes any check based on @root passed in invalid.

The patch removes the unreliable root objectid detection, and only use
root->bytenr check.
For the possibility of invalid self-pointing backref, extent tree
checker should have already handled it, so we don't need to bother in
fs tree checker.

Fixes: 54c8f9152fd9 ("btrfs-progs: check: Fix lowmem mode stack overflow caused by fsck/023")
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 cmds-check.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/cmds-check.c b/cmds-check.c
index 452e715bf245..7eb08b6cb962 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -11700,16 +11700,12 @@ static int check_tree_block_ref(struct btrfs_root *root,
 	u32 nodesize = root->fs_info->nodesize;
 	u32 item_size;
 	u64 offset;
-	int tree_reloc_root = 0;
 	int found_ref = 0;
 	int err = 0;
 	int ret;
 	int strict = 1;
 	int parent = 0;
 
-	if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID &&
-	    btrfs_header_bytenr(root->node) == bytenr)
-		tree_reloc_root = 1;
 	btrfs_init_path(&path);
 	key.objectid = bytenr;
 	if (btrfs_fs_incompat(root->fs_info, SKINNY_METADATA))
@@ -11817,8 +11813,12 @@ static int check_tree_block_ref(struct btrfs_root *root,
 			/*
 			 * Backref of tree reloc root points to itself, no need
 			 * to check backref any more.
+			 *
+			 * This may be an error of loop backref, but extent tree
+			 * checker should have already handled it.
+			 * Here we only need to avoid infinite iteration.
 			 */
-			if (tree_reloc_root) {
+			if (offset == bytenr) {
 				found_ref = 1;
 			} else {
 				/*
-- 
2.15.0


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

* [PATCH 08/11] btrfs-progs: lowmem check: Fix false alerts for image with shared block ref only backref
  2017-11-22  9:03 [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree Qu Wenruo
                   ` (6 preceding siblings ...)
  2017-11-22  9:03 ` [PATCH 07/11] btrfs-progs: lowmem check: Fix function call stack overflow caused by wrong tree reloc tree detection Qu Wenruo
@ 2017-11-22  9:03 ` Qu Wenruo
  2017-11-22  9:03 ` [PATCH 10/11] btrfs-progs: lowmem check: Fix false alerts of referencer count mismatch for snapshot Qu Wenruo
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Qu Wenruo @ 2017-11-22  9:03 UTC (permalink / raw)
  To: linux-btrfs; +Cc: dsterba

[BUG]
For image with shared block ref only metadata item like:
------
        item 66 key (21573632 METADATA_ITEM 0) itemoff 3971 itemsize 24
                refs 66 gen 9 flags TREE_BLOCK|FULL_BACKREF
                tree block skinny level 0
        item 0 key (21573632 SHARED_BLOCK_REF 21676032) itemoff 3995 itemsize 0
                shared block backref
        item 1 key (21573632 SHARED_BLOCK_REF 21921792) itemoff 3995 itemsize 0
                shared block backref
        item 2 key (21573632 SHARED_BLOCK_REF 21995520) itemoff 3995 itemsize 0
                shared block backref
        item 3 key (21573632 SHARED_BLOCK_REF 22077440) itemoff 3995 itemsize 0
                shared block backref
...
------

Lowmem mode check will report false alerts like:
------
ERROR: extent[21573632 4096] backref lost (owner: 256, level: 0)
------

[CAUSE]
In fact, the false alerts is not even from extent tree verfication,  but
a fs tree helper which is designed to make sure there is some tree block
referring to the fs tree block.

The idea is to find inlined tree backref then keyed TREE_BLOCK_REF_KEY.
However it missed SHARED_BLOCK_REF_KEY, and caused such false alert.

[FIX]
Add SHARED_BLOCK_REF_KEY to make the warning shut up.

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 cmds-check.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/cmds-check.c b/cmds-check.c
index 7eb08b6cb962..791fab6b3e6a 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -11850,6 +11850,30 @@ static int check_tree_block_ref(struct btrfs_root *root,
 		if (!ret)
 			found_ref = 1;
 	}
+	/*
+	 * Finally check SHARED BLOCK REF, any found will be good
+	 * Here we're not doing comprehensive extent backref checking,
+	 * only need to ensure there is some extent referring to this
+	 * tree block.
+	 */
+	if (!found_ref) {
+		btrfs_release_path(&path);
+		key.objectid = bytenr;
+		key.type = BTRFS_SHARED_BLOCK_REF_KEY;
+		key.offset = (u64)-1;
+
+		ret = btrfs_search_slot(NULL, extent_root, &key, &path, 0, 0);
+		if (ret < 0) {
+			err |= BACKREF_MISSING;
+			goto out;
+		}
+		ret = btrfs_previous_extent_item(extent_root, &path, bytenr);
+		if (ret) {
+			err |= BACKREF_MISSING;
+			goto out;
+		}
+		found_ref = 1;
+	}
 	if (!found_ref)
 		err |= BACKREF_MISSING;
 out:
-- 
2.15.0


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

* [PATCH 10/11] btrfs-progs: lowmem check: Fix false alerts of referencer count mismatch for snapshot
  2017-11-22  9:03 [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree Qu Wenruo
                   ` (7 preceding siblings ...)
  2017-11-22  9:03 ` [PATCH 08/11] btrfs-progs: lowmem check: Fix false alerts for image with shared block ref only backref Qu Wenruo
@ 2017-11-22  9:03 ` Qu Wenruo
  2017-11-22  9:03 ` [PATCH 11/11] btrfs-progs: fsck-tests: Introduce test case with keyed data backref with shared tree blocks Qu Wenruo
  2017-11-24 14:46 ` [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree David Sterba
  10 siblings, 0 replies; 12+ messages in thread
From: Qu Wenruo @ 2017-11-22  9:03 UTC (permalink / raw)
  To: linux-btrfs; +Cc: dsterba

Btrfs lowmem check reports such false alerts:
------
ERROR: extent[366498091008, 134217728] referencer count mismatch (root: 827, owner: 73782, offset: 134217728) wanted: 4, have: 26
ERROR: extent[366498091008, 134217728] referencer count mismatch (root: 818, owner: 73782, offset: 134217728) wanted: 4, have: 26
ERROR: extent[366498091008, 134217728] referencer count mismatch (root: 870, owner: 73782, offset: 134217728) wanted: 4, have: 26
------

While in extent tree, the extent has:
------
        item 81 key (366498091008 EXTENT_ITEM 134217728) itemoff 9008 itemsize 169
                refs 39 gen 224 flags DATA
                extent data backref root 827 objectid 73782 offset 134217728 count 4
                extent data backref root 818 objectid 73782 offset 134217728 count 4
                extent data backref root 259 objectid 73482 offset 134217728 count 1
                extent data backref root 644 objectid 73782 offset 134217728 count 26
                extent data backref root 870 objectid 73782 offset 134217728 count 4
------

And in root 827, there is one leaf with 4 references to that extent
which is owned by 827:
------
leaf 714964992 items 68 free space 10019 generation 641 owner 827
leaf 714964992 flags 0x1(WRITTEN) backref revision 1
......
        item 64 key (73782 EXTENT_DATA 134217728) itemoff 11878 itemsize 53
                generation 224 type 1 (regular)
                extent data disk byte 366498091008 nr 134217728
                extent data offset 0 nr 6410240 ram 134217728
                extent compression 0 (none)
        item 65 key (73782 EXTENT_DATA 140627968) itemoff 11825 itemsize 53
                generation 224 type 1 (regular)
                extent data disk byte 366498091008 nr 134217728
                extent data offset 6410240 nr 5120000 ram 134217728
                extent compression 0 (none)
        item 66 key (73782 EXTENT_DATA 145747968) itemoff 11772 itemsize 53
                generation 224 type 1 (regular)
                extent data disk byte 366498091008 nr 134217728
                extent data offset 11530240 nr 7675904 ram 134217728
                extent compression 0 (none)
        item 67 key (73782 EXTENT_DATA 153423872) itemoff 11719 itemsize 53
                generation 224 type 1 (regular)
                extent data disk byte 366498091008 nr 134217728
                extent data offset 19206144 nr 6397952 ram 134217728
                extent compression 0 (none)
------

And starts from next leaf, there are 22 references to the data extent:
------
leaf 894861312 items 208 free space 59 generation 261 owner 644
leaf 894861312 flags 0x1(WRITTEN) backref revision 1
        item 0 key (73782 EXTENT_DATA 159821824) itemoff 16230 itemsize 53
                generation 224 type 1 (regular)
                extent data disk byte 366498091008 nr 134217728
                extent data offset 25604096 nr 8192 ram 134217728
                extent compression 0 (none)
        item 1 key (73782 EXTENT_DATA 159830016) itemoff 16177 itemsize 53
                generation 224 type 1 (regular)
                extent data disk byte 366498091008 nr 134217728
                extent data offset 25612288 nr 7675904 ram 134217728
                extent compression 0 (none)
......
------

However the next leaf is owned by other subvolume, normally owned by (part of)
the snapshot source.

Fix it by also checking the leaf's owner before increasing the reference
counter.

Reported-by: Chris Murphy <chris@colorremedies.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 cmds-check.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/cmds-check.c b/cmds-check.c
index 791fab6b3e6a..e746ee7b281d 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -12518,11 +12518,17 @@ static int check_extent_data_backref(struct btrfs_fs_info *fs_info,
 		 * Except normal disk bytenr and disk num bytes, we still
 		 * need to do extra check on dbackref offset as
 		 * dbackref offset = file_offset - file_extent_offset
+		 *
+		 * Also, we must check the leaf owner.
+		 * In case of shared tree blocks (snapshots) we can inherit
+		 * leaves from source snapshot.
+		 * In that case, reference from source snapshot should not
+		 * count.
 		 */
 		if (btrfs_file_extent_disk_bytenr(leaf, fi) == bytenr &&
 		    btrfs_file_extent_disk_num_bytes(leaf, fi) == len &&
 		    (u64)(key.offset - btrfs_file_extent_offset(leaf, fi)) ==
-		    offset)
+		    offset && btrfs_header_owner(leaf) == root_id)
 			found_count++;
 
 next:
-- 
2.15.0


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

* [PATCH 11/11] btrfs-progs: fsck-tests: Introduce test case with keyed data backref with shared tree blocks
  2017-11-22  9:03 [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree Qu Wenruo
                   ` (8 preceding siblings ...)
  2017-11-22  9:03 ` [PATCH 10/11] btrfs-progs: lowmem check: Fix false alerts of referencer count mismatch for snapshot Qu Wenruo
@ 2017-11-22  9:03 ` Qu Wenruo
  2017-11-24 14:46 ` [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree David Sterba
  10 siblings, 0 replies; 12+ messages in thread
From: Qu Wenruo @ 2017-11-22  9:03 UTC (permalink / raw)
  To: linux-btrfs; +Cc: dsterba

For snapshot shared tree blocks with source subvolume, the keyed backref
counter only counts the exclusive owned references.

In the following case, 258 is a snapshot of 257, which inherits all the
reference to this data extent.
------
        item 4 key (12582912 EXTENT_ITEM 524288) itemoff 3741 itemsize 140
                refs 179 gen 9 flags DATA
                extent data backref root 257 objectid 258 offset 0 count 49
                extent data backref root 257 objectid 257 offset 0 count 1
                extent data backref root 256 objectid 258 offset 0 count 128
                extent data backref root 256 objectid 257 offset 0 count 1
------

However lowmem mode used to iterate the whole inode to find all
reference, and doesn't care if the reference is already counted by the
shared tree block.

And the test case to check it.

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 .../keyed_data_ref_with_shared_leaf.img                 | Bin 0 -> 19456 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 tests/fsck-tests/020-extent-ref-cases/keyed_data_ref_with_shared_leaf.img

diff --git a/tests/fsck-tests/020-extent-ref-cases/keyed_data_ref_with_shared_leaf.img b/tests/fsck-tests/020-extent-ref-cases/keyed_data_ref_with_shared_leaf.img
new file mode 100644
index 0000000000000000000000000000000000000000..2ce5068f01c693e577de8b9a536fdeb360029e5f
GIT binary patch
literal 19456
zcmeIZby!qi_c%IqrzoHxp-8usbaw~{2q>i>jevj>LkLJHC?E*Z-5?;%01|@IAkra7
zNq5Zbdj|Zx@AuyOzR&&seV^YvGv}<?XYF;?UbWZS`<w{tIM;a=(?;0e4>fegIR8Qb
z65U9Si9W){(1$b`^bz(FeIS>C@L;e^^r86zc0t3l7qBfZ1k1>t<G}DCxL^JpR>X#2
zK817m9UcUiDV@VlArQu=d=3Ym!z$;nJsLJwJ%^dltZZGt=QuiQ=j~%uP<y}TIqZnW
zm(e<hrO-$J3)l$Vx9kEQM7Pggz=(59?ek+07P{{R9D!~zzkrL-JpZ51|B=A||0Liw
z9?^UF#<CgfrPKPc`{H}U7Wa<h&)5I>wG$IZnm<*_^J$1t)-iTz;3d<L50q9=^CyUZ
zOK1K`24ACG7RTZ@KYrT0!cC#&W{Q$9iY{0J4l$_)4emV7Nz$#XqhL|iKX7Y0tMwW|
zoT0TF*UmyQQ{G;M_1`?eW}1iH`p~b>XQBEnl9)}E%0AGF1}D>;Dl+gcAE8o98WwJJ
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
a<ptx1ajMl8PZUr%pJqv*M<@T+pZ^P)Oh4@a

literal 0
HcmV?d00001

-- 
2.15.0


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

* Re: [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree
  2017-11-22  9:03 [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree Qu Wenruo
                   ` (9 preceding siblings ...)
  2017-11-22  9:03 ` [PATCH 11/11] btrfs-progs: fsck-tests: Introduce test case with keyed data backref with shared tree blocks Qu Wenruo
@ 2017-11-24 14:46 ` David Sterba
  10 siblings, 0 replies; 12+ messages in thread
From: David Sterba @ 2017-11-24 14:46 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: linux-btrfs

On Wed, Nov 22, 2017 at 05:03:14PM +0800, Qu Wenruo wrote:
> The patchset can be fetched from github:
> https://github.com/adam900710/btrfs-progs/tree/lowmem_fix
> 
> The patchset is mostly rebased to v4.14, since there is some conflicts
> with lowmem repair enhancement from Su Yue.
> 
> However the lowmem repair enhancement from Su Yue caused one regression,
> and the original lowmem code also has some problem handling tree reloc
> tree.

Thanks for the fixes, patchset added to devel. I've also enabled the
lowmem mode in the CI build tests.

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

end of thread, other threads:[~2017-11-24 14:48 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-22  9:03 [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree Qu Wenruo
2017-11-22  9:03 ` [PATCH 01/11] btrfs-progs: lowmem check: Fix regression which screws up extent allocator Qu Wenruo
2017-11-22  9:03 ` [PATCH 02/11] btrfs-progs: lowmem check: Fix NULL pointer access caused by large tree reloc tree Qu Wenruo
2017-11-22  9:03 ` [PATCH 03/11] btrfs-progs: lowmem check: Fix inlined data extent ref lookup Qu Wenruo
2017-11-22  9:03 ` [PATCH 04/11] btrfs-progs: lowmem check: Fix false backref lost warning for keyed extent data ref Qu Wenruo
2017-11-22  9:03 ` [PATCH 05/11] btrfs-progs: fsck-test: Introduce test case for false data extent backref lost Qu Wenruo
2017-11-22  9:03 ` [PATCH 06/11] btrfs-progs: backref: Allow backref walk to handle direct parent ref Qu Wenruo
2017-11-22  9:03 ` [PATCH 07/11] btrfs-progs: lowmem check: Fix function call stack overflow caused by wrong tree reloc tree detection Qu Wenruo
2017-11-22  9:03 ` [PATCH 08/11] btrfs-progs: lowmem check: Fix false alerts for image with shared block ref only backref Qu Wenruo
2017-11-22  9:03 ` [PATCH 10/11] btrfs-progs: lowmem check: Fix false alerts of referencer count mismatch for snapshot Qu Wenruo
2017-11-22  9:03 ` [PATCH 11/11] btrfs-progs: fsck-tests: Introduce test case with keyed data backref with shared tree blocks Qu Wenruo
2017-11-24 14:46 ` [PATCH 00/11] Lowmem mode btrfs fixes exposed by complex tree 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).