All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: chandanbabu@kernel.org, djwong@kernel.org
Cc: hch@lst.de, linux-xfs@vger.kernel.org
Subject: [GIT PULL 09/16] xfs: online repair of directories
Date: Mon, 15 Apr 2024 17:29:43 -0700	[thread overview]
Message-ID: <171322717675.141687.2316228706475122308.stg-ugh@frogsfrogsfrogs> (raw)
In-Reply-To: <20240416002427.GB11972@frogsfrogsfrogs>

Hi Chandan,

Please pull this branch with changes for xfs for 6.10-rc1.

As usual, I did a test-merge with the main upstream branch as of a few
minutes ago, and didn't see any conflicts.  Please let me know if you
encounter any problems.

--D

The following changes since commit 669dfe883c8e20231495f80a28ec7cc0b8fdddc4:

xfs: update the unlinked list when repairing link counts (2024-04-15 14:58:55 -0700)

are available in the Git repository at:

https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git tags/repair-dirs-6.10_2024-04-15

for you to fetch changes up to 34c9382c128270d0f4c8b36783b30f3c8085b2dd:

xfs: ask the dentry cache if it knows the parent of a directory (2024-04-15 14:58:56 -0700)

----------------------------------------------------------------
xfs: online repair of directories [v30.3 09/16]

This series employs atomic extent swapping to enable safe reconstruction
of directory data.  For now, XFS does not support reverse directory
links (aka parent pointers), so we can only salvage the dirents of a
directory and construct a new structure.

Directory repair therefore consists of five main parts:

First, we walk the existing directory to salvage as many entries as we
can, by adding them as new directory entries to the repair temp dir.

Second, we validate the parent pointer found in the directory.  If one
was not found, we scan the entire filesystem looking for a potential
parent.

Third, we use atomic extent swaps to exchange the entire data fork
between the two directories.

Fourth, we reap the old directory blocks as carefully as we can.

To wrap up the directory repair code, we need to add to the regular
filesystem the ability to free all the data fork blocks in a directory.
This does not change anything with normal directories, since they must
still unlink and shrink one entry at a time.  However, this will
facilitate freeing of partially-inactivated temporary directories during
log recovery.

The second half of this patchset implements repairs for the dotdot
entries of directories.  For now there is only rudimentary support for
this, because there are no directory parent pointers, so the best we can
do is scanning the filesystem and the VFS dcache for answers.

This has been running on the djcloud for months with no problems.  Enjoy!

Signed-off-by: Darrick J. Wong <djwong@kernel.org>

----------------------------------------------------------------
Darrick J. Wong (5):
xfs: inactivate directory data blocks
xfs: online repair of directories
xfs: scan the filesystem to repair a directory dotdot entry
xfs: online repair of parent pointers
xfs: ask the dentry cache if it knows the parent of a directory

fs/xfs/Makefile              |    3 +
fs/xfs/scrub/dir.c           |    9 +
fs/xfs/scrub/dir_repair.c    | 1402 ++++++++++++++++++++++++++++++++++++++++++
fs/xfs/scrub/findparent.c    |  448 ++++++++++++++
fs/xfs/scrub/findparent.h    |   50 ++
fs/xfs/scrub/inode_repair.c  |    5 +
fs/xfs/scrub/iscan.c         |   18 +-
fs/xfs/scrub/iscan.h         |    1 +
fs/xfs/scrub/nlinks.c        |   23 +
fs/xfs/scrub/nlinks_repair.c |    9 +
fs/xfs/scrub/parent.c        |   14 +-
fs/xfs/scrub/parent_repair.c |  234 +++++++
fs/xfs/scrub/readdir.c       |    7 +
fs/xfs/scrub/repair.c        |    1 +
fs/xfs/scrub/repair.h        |    8 +
fs/xfs/scrub/scrub.c         |    4 +-
fs/xfs/scrub/tempfile.c      |   13 +
fs/xfs/scrub/tempfile.h      |    2 +
fs/xfs/scrub/trace.h         |  115 ++++
fs/xfs/scrub/xfblob.h        |   24 +
fs/xfs/xfs_inode.c           |   51 ++
21 files changed, 2437 insertions(+), 4 deletions(-)
create mode 100644 fs/xfs/scrub/dir_repair.c
create mode 100644 fs/xfs/scrub/findparent.c
create mode 100644 fs/xfs/scrub/findparent.h
create mode 100644 fs/xfs/scrub/parent_repair.c


  parent reply	other threads:[~2024-04-16  0:29 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-16  0:24 [GIT PULLBOMB v30.3] xfs: online repair, part 1 is done Darrick J. Wong
2024-04-16  0:27 ` [GIT PULL 01/16] xfs: improve log incompat feature handling Darrick J. Wong
2024-04-16  0:27 ` [GIT PULL 02/16] xfs: refactorings for atomic file content exchanges Darrick J. Wong
2024-04-16  0:28 ` [GIT PULL 03/16] xfs: " Darrick J. Wong
2024-04-16  0:28 ` [GIT PULL 04/16] xfs: create temporary files for online repair Darrick J. Wong
2024-04-16  0:28 ` [GIT PULL 05/16] xfs: online repair of realtime summaries Darrick J. Wong
2024-04-16  0:28 ` [GIT PULL 06/16] xfs: set and validate dir/attr block owners Darrick J. Wong
2024-04-16  0:29 ` [GIT PULL 07/16] xfs: online repair of extended attributes Darrick J. Wong
2024-04-16  0:29 ` [GIT PULL 08/16] xfs: online repair of inode unlinked state Darrick J. Wong
2024-04-16  0:29 ` Darrick J. Wong [this message]
2024-04-16  0:29 ` [GIT PULL 10/16] xfs: move orphan files to lost and found Darrick J. Wong
2024-04-16  0:30 ` [GIT PULL 11/16] xfs: online repair of symbolic links Darrick J. Wong
2024-04-16  0:30 ` [GIT PULL 12/16] xfs: online fsck of iunlink buckets Darrick J. Wong
2024-04-16  0:30 ` [GIT PULL 13/16] xfs: inode-related repair fixes Darrick J. Wong
2024-04-16  0:33 ` [GIT PULL 14/16] xfs: less heavy locks during fstrim Darrick J. Wong
2024-04-16  0:33 ` [GIT PULL 15/16] xfs: design documentation for online fsck, part 2 Darrick J. Wong
2024-04-16  0:33 ` [GIT PULL 16/16] xfs: retain ILOCK during directory updates Darrick J. Wong

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=171322717675.141687.2316228706475122308.stg-ugh@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=chandanbabu@kernel.org \
    --cc=hch@lst.de \
    --cc=linux-xfs@vger.kernel.org \
    /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.