All of lore.kernel.org
 help / color / mirror / Atom feed
From: damenly.su@gmail.com
To: linux-btrfs@vger.kernel.org
Cc: suy.fnst@cn.fujitsu.com
Subject: [PATCH 5/6] btrfs-progs: lowmem: continue to check item in last slot while checking inodes
Date: Wed, 12 Sep 2018 19:20:42 +0000	[thread overview]
Message-ID: <20180912192046.5861-6-suy.fnst@cn.fujitsu.com> (raw)
In-Reply-To: <20180912192046.5861-1-suy.fnst@cn.fujitsu.com>

From: Su Yue <suy.fnst@cn.fujitsu.com>

After call of check_inode_item(), path may point to the last unchecked
slot of the leaf. The outer walk_up_tree() always treats the position
as checked item then skips to next item.

If the last item was an inode item, yes, it was unchecked.
Then walk_up_tree() will think the leaf is checked and walk up to
upper node, process_one_leaf() in walk_down_tree() would skip to
check next inode item. Which means, the inode item won't be checked.

Solution:
After check_inode_item returns, if found path point to the last item
of a leaf, decrease path slot manually, so walk_up_tree() will stay
on the leaf.

Fixes: 5e2dc770471b ("btrfs-progs: check: skip shared node or leaf check for low_memory mode")
Signed-off-by: Su Yue <suy.fnst@cn.fujitsu.com>
---
 check/mode-lowmem.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/check/mode-lowmem.c b/check/mode-lowmem.c
index 8fc9edab1d66..b6b33786d02b 100644
--- a/check/mode-lowmem.c
+++ b/check/mode-lowmem.c
@@ -2612,6 +2612,18 @@ again:
 	if (cur->start == cur_bytenr)
 		goto again;
 
+	/*
+	 * path may point at the last item(a inode item maybe) in a leaf.
+	 * Without below lines, walk_up_tree() will skip the item which
+	 * means all items related to the inode will never be checked.
+	 * Decrease the slot manually, walk_up_tree won't skip to next node
+	 * if it occurs.
+	 */
+	if (path->slots[0] + 1 >= btrfs_header_nritems(path->nodes[0])) {
+		if (path->slots[0])
+			path->slots[0]--;
+	}
+
 	/*
 	 * we have switched to another leaf, above nodes may
 	 * have changed, here walk down the path, if a node
-- 
2.18.0

  parent reply	other threads:[~2018-09-12 16:25 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-12 19:20 [PATCH 0/6] btrfs-progs: lowmem: bug fixes and inode_extref repair damenly.su
2018-09-12 12:35 ` Su Yue
2018-09-12 19:20 ` [PATCH 1/6] btrfs-progs: adjust arguments of btrfs_lookup_inode_extref() damenly.su
2018-09-12 19:20 ` [PATCH 2/6] btrfs-progs: make btrfs_unlink() lookup inode_extref damenly.su
2018-09-12 19:20 ` [PATCH 3/6] btrfs-progs: lowmem check: find dir_item by di_key in check_dir_item() damenly.su
2018-09-12 19:20 ` [PATCH 4/6] btrfs-progs: lowmem: search key of root again after check_fs_root() under repair damenly.su
2018-09-12 19:20 ` damenly.su [this message]
2018-09-12 19:20 ` [PATCH 5/7] btrfs-progs: lowmem: improve check_inode_extref() damenly.su
2018-09-12 19:20 ` [PATCH 6/7] btrfs-progs: lowmem: continue to check item in last slot while checking inodes damenly.su
2018-09-12 19:20 ` [PATCH 6/6] btrfs-progs: lowmem: optimization and repair for check_inode_extref() damenly.su
2018-09-12 19:20 ` [PATCH 7/7] btrfs-progs: fsck-tests: add test case inode_extref without dir_item and dir_index damenly.su

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=20180912192046.5861-6-suy.fnst@cn.fujitsu.com \
    --to=damenly.su@gmail.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=suy.fnst@cn.fujitsu.com \
    /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.