[GIT PULL 08/23] xfs_scrub: track data dependencies for repairs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Carlos,

Please pull this branch with changes for xfsprogs 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.

The following changes since commit bf15d7766e3dd63eda56f6b2f7976e529cd07575:

xfs_scrub: enable users to bump information messages to warnings (2024-07-29 17:01:07 -0700)

are available in the Git repository at:

https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfsprogs-dev.git tags/scrub-repair-data-deps-6.10_2024-07-29

for you to fetch changes up to 81bfd0ad04a58892e2c153a22c361e7ff959f3fd:

xfs_scrub: remove unused action_list fields (2024-07-29 17:01:07 -0700)

----------------------------------------------------------------
xfs_scrub: track data dependencies for repairs [v30.9 08/28]

Certain kinds of XFS metadata depend on the correctness of lower level
metadata.  For example, directory indexes depends on the directory data
fork, which in turn depend on the directory inode to be correct.  The
current scrub code does not strictly preserve these dependencies if it
has to defer a repair until phase 4, because phase 4 prioritizes repairs
by type (corruption, then cross referencing, and then preening) and
loses the ordering of in the previous phases.  This leads to absurd
things like trying to repair a directory before repairing its corrupted
fork, which is absurd.

To solve this problem, introduce a repair ticket structure to track all
the repairs pending for a principal object (inode, AG, etc).  This
reduces memory requirements if an object requires more than one type of
repair and makes it very easy to track the data dependencies between
sub-objects of a principal object.  Repair dependencies between object
types (e.g.  bnobt before inodes) must still be encoded statically into
phase 4.

A secondary benefit of this new ticket structure is that we can decide
to attempt a repair of an object A that was flagged for a cross
referencing error during the scan if a different object B depends on A
but only B showed definitive signs of corruption.

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

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

----------------------------------------------------------------
Darrick J. Wong (9):
xfs_scrub: track repair items by principal, not by individual repairs
xfs_scrub: use repair_item to direct repair activities
xfs_scrub: remove action lists from phaseX code
xfs_scrub: remove scrub_metadata_file
xfs_scrub: boost the repair priority of dependencies of damaged items
xfs_scrub: clean up repair_item_difficulty a little
xfs_scrub: check dependencies of a scrub type before repairing
xfs_scrub: retry incomplete repairs
xfs_scrub: remove unused action_list fields

libfrog/scrub.c       |   1 +
scrub/phase1.c        |   9 +-
scrub/phase2.c        |  46 +++--
scrub/phase3.c        |  77 ++++----
scrub/phase4.c        |  17 +-
scrub/phase5.c        |   9 +-
scrub/phase7.c        |   9 +-
scrub/repair.c        | 530 ++++++++++++++++++++++++++++++++++----------------
scrub/repair.h        |  47 +++--
scrub/scrub.c         | 136 ++++++-------
scrub/scrub.h         | 108 ++++++++--
scrub/scrub_private.h |  37 ++++
12 files changed, 664 insertions(+), 362 deletions(-)





[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux