[PATCHSET v9r2d1 0/7] xfs: online repair of directories

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

 



Hi all,

With this patchset, we implement online reconstruction of directories by
scanning the entire filesystem looking for parent pointer data.  This
mostly works, except for the part where we need to resync the diroffset
field of the parent pointers to match the new directory structure.

Fixing that is left as an open research question, with a few possible
solutions:

1. As part of committing the new directory, queue a bunch of parent
pointer updates to make those changes.

2. Leave them inconsistent and let the parent pointer repair fix it.

3. Change the ondisk format of parent pointers (and xattrs) so that we
can encode the full dirent name in the xattr name.

4. Change the ondisk format of parent pointers to encode a sha256 hash
of the dirent name in the xattr name.  This will work as long as nobody
breaks sha256.

Thoughts?  Note that the atomic swapext and block reaping code is NOT
ported for this PoC, so we do not commit any repairs.

If you're going to start using this mess, you probably ought to just
pull from my git trees, which are linked below.

This is an extraordinary way to destroy everything.  Enjoy!
Comments and questions are, as always, welcome.
kernel git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfs-linux.git/log/?h=pptrs-online-dir-repair

xfsprogs git tree:
https://git.kernel.org/cgit/linux/kernel/git/djwong/xfsprogs-dev.git/log/?h=pptrs-online-dir-repair
---
 fs/xfs/Makefile               |    1 
 fs/xfs/libxfs/xfs_da_format.h |   11 
 fs/xfs/libxfs/xfs_dir2.c      |    2 
 fs/xfs/libxfs/xfs_dir2.h      |    2 
 fs/xfs/libxfs/xfs_parent.c    |   47 +-
 fs/xfs/libxfs/xfs_parent.h    |   24 -
 fs/xfs/scrub/common.c         |   15 +
 fs/xfs/scrub/common.h         |   28 +
 fs/xfs/scrub/dir.c            |   11 
 fs/xfs/scrub/dir_repair.c     | 1129 +++++++++++++++++++++++++++++++++++++++++
 fs/xfs/scrub/readdir.c        |   12 
 fs/xfs/scrub/readdir.h        |    3 
 fs/xfs/scrub/repair.h         |   16 +
 fs/xfs/scrub/scrub.c          |    2 
 fs/xfs/scrub/tempfile.c       |   42 ++
 fs/xfs/scrub/tempfile.h       |    2 
 fs/xfs/scrub/trace.c          |    1 
 fs/xfs/scrub/trace.h          |   69 +++
 fs/xfs/xfs_inode.c            |   56 +-
 fs/xfs/xfs_inode.h            |    5 
 fs/xfs/xfs_symlink.c          |    4 
 21 files changed, 1428 insertions(+), 54 deletions(-)
 create mode 100644 fs/xfs/scrub/dir_repair.c




[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