[GIT PULL 2/9] xfs: fix online repair block reaping

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

 



Hi Chandan,

Please pull this branch with changes for xfs for 6.6-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 d6532904a10290b94d2375ff438313e0fb9fc9f8:

MAINTAINERS: add Chandan Babu as XFS release manager (2023-08-10 07:47:54 -0700)

are available in the Git repository at:

https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git tags/repair-reap-fixes-6.6_2023-08-10

for you to fetch changes up to 014ad53732d2bac34d21a251f3622a4da516e21b:

xfs: use per-AG bitmaps to reap unused AG metadata blocks during repair (2023-08-10 07:48:04 -0700)

----------------------------------------------------------------
xfs: fix online repair block reaping [v26.1]

These patches fix a few problems that I noticed in the code that deals
with old btree blocks after a successful repair.

First, I observed that it is possible for repair to incorrectly
invalidate and delete old btree blocks if they were crosslinked.  The
solution here is to consult the reverse mappings for each block in the
extent -- singly owned blocks are invalidated and freed, whereas for
crosslinked blocks, we merely drop the incorrect reverse mapping.

A largeish change in this patchset is moving the reaping code to a
separate file, because the code are mostly interrelated static
functions.  For now this also drops the ability to reap file blocks,
which will return when we add the bmbt repair functions.

Second, we convert the reap function to use EFIs so that we can commit
to freeing as many blocks in as few transactions as we dare.  We would
like to free as many old blocks as we can in the same transaction that
commits the new structure to the ondisk filesystem to minimize the
number of blocks that leak if the system crashes before the repair fully
completes.

The third change made in this series is to avoid tripping buffer cache
assertions if we're merely scanning the buffer cache for buffers to
invalidate, and find a non-stale buffer of the wrong length.  This is
primarily cosmetic, but makes my life easier.

The fourth change restructures the reaping code to try to process as many
blocks in one go as possible, to reduce logging traffic.

The last change switches the reaping mechanism to use per-AG bitmaps
defined in a previous patchset.  This should reduce type confusion when
reading the source code.

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

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

----------------------------------------------------------------
Darrick J. Wong (9):
xfs: cull repair code that will never get used
xfs: move the post-repair block reaping code to a separate file
xfs: only invalidate blocks if we're going to free them
xfs: only allow reaping of per-AG blocks in xrep_reap_extents
xfs: use deferred frees to reap old btree blocks
xfs: rearrange xrep_reap_block to make future code flow easier
xfs: allow scanning ranges of the buffer cache for live buffers
xfs: reap large AG metadata extents when possible
xfs: use per-AG bitmaps to reap unused AG metadata blocks during repair

fs/xfs/Makefile                |   1 +
fs/xfs/scrub/agheader_repair.c |  75 +++----
fs/xfs/scrub/bitmap.c          |  78 +------
fs/xfs/scrub/bitmap.h          |  10 +-
fs/xfs/scrub/reap.c            | 498 +++++++++++++++++++++++++++++++++++++++++
fs/xfs/scrub/reap.h            |  12 +
fs/xfs/scrub/repair.c          | 366 +++++-------------------------
fs/xfs/scrub/repair.h          |  18 +-
fs/xfs/scrub/trace.h           |  72 +++---
fs/xfs/xfs_buf.c               |   9 +-
fs/xfs/xfs_buf.h               |  13 ++
11 files changed, 673 insertions(+), 479 deletions(-)
create mode 100644 fs/xfs/scrub/reap.c
create mode 100644 fs/xfs/scrub/reap.h



[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