linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Qu Wenruo <wqu@suse.com>
To: linux-btrfs@vger.kernel.org
Cc: nborisov@suse.com
Subject: [PATCH v2 0/3] Lowmem fsck repair to fix filetype mismatch
Date: Fri, 19 Jan 2018 15:25:33 +0800	[thread overview]
Message-ID: <20180119072536.22286-1-wqu@suse.com> (raw)

Sebastian reported a filesystem corruption where DIR_INDEX has wrong
filetype against INODE_ITEM.

Lowmem mode normally handles such problem by checking DIR_INDEX,
DIR_ITEM and INODE_REF/INODE_ITEM to determine the correct file type.
In such case, lowmem mode fsck can get the correct filetype.

When fixing the problem, lowmem mode will try to re-insert correct
(DIR_INDEX, DIR_ITEM, INODE_REF) tuple, and if existing correct
DIR_ITEM and INODE_REF is found, btrfs_link() will just skip and only
insert correct DIR_INDEX.

However, when inserting correct DIR_INDEX, due to extra DIR_INDEX
validation, incorrect one will be skiped and correct one will be
inserted after invalid one.

This leads to lowmem mode repair to create duplicated DIR_INDEX.

This patch will fix it by removing the whole (DIR_INDEX, DIR_ITEM,
INODE_REF) tuple before inserting correct tuple.
And the removing part, btrfs_unlink(), will be enhanced to handle
incorrect tuple member more robust.

Please note that, due a bug in lowmem mode repair, btrfs check will
still show "error(s) found in fs tree" even repair is done successfully.

And test case for this repair still needs extra work for original mode
to support such repair, or test case won't pass original mode test.

Changelog:
v2:
  No longer play tricks to add new parameters to let btrfs_unlink() to
  locate invalid dir_index, but remove the unnecessary filetype check in
  verify_dir_item().
  Since user of functions in dir-items.c are all btrfs check, either
  repairing or checking, and both original mode and lowmem mode can
  handle it well.

Qu Wenruo (3):
  btrfs-progs: lowmem fsck: Remove corupted link before re-add correct
    link
  btrfs-progs: dir-item: Don't do extra filetype validaction check for
    btrfs_match_dir_item_name
  btrfs-progs: dir-item: Make btrfs_delete_one_dir_name more robust to
    handle corrupted name len

 cmds-check.c |  4 ++++
 dir-item.c   | 17 +++++++++--------
 2 files changed, 13 insertions(+), 8 deletions(-)

-- 
2.15.1


             reply	other threads:[~2018-01-19  7:25 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-19  7:25 Qu Wenruo [this message]
2018-01-19  7:25 ` [PATCH v2 1/3] btrfs-progs: lowmem fsck: Remove corupted link before re-add correct link Qu Wenruo
2018-01-19  7:40   ` Su Yue
2018-01-19  7:25 ` [PATCH v2 2/3] btrfs-progs: dir-item: Don't do extra filetype validaction check for btrfs_match_dir_item_name Qu Wenruo
2018-01-19  7:39   ` Su Yue
2018-01-19  7:38     ` Qu Wenruo
2018-01-19  8:07       ` Su Yue
2018-01-19  9:40   ` Nikolay Borisov
2018-01-19 10:03     ` Qu Wenruo
2018-01-19 10:21       ` Nikolay Borisov
2018-01-19 10:39         ` Qu Wenruo
2018-01-19 12:34           ` Nikolay Borisov
2018-01-22  5:45   ` [PATCH v2.1 " Qu Wenruo
2018-01-22  8:09     ` Nikolay Borisov
2018-01-19  7:25 ` [PATCH v2 3/3] btrfs-progs: dir-item: Make btrfs_delete_one_dir_name more robust to handle corrupted name len Qu Wenruo
2018-01-19  7:40   ` Su Yue
2018-01-19  9:43   ` Nikolay Borisov

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=20180119072536.22286-1-wqu@suse.com \
    --to=wqu@suse.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=nborisov@suse.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 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).