tag name | repair-reap-fixes_2022-11-09 (e9f6a12327ab4ccff0a016eee5bf5327b41d4f07) |
tag date | 2022-11-09 19:09:52 -0800 |
tagged by | Darrick J. Wong <djwong@kernel.org> |
tagged object | commit 5f2897495a... |
xfs: fix online repair block reaping
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.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEUzaAxoMeQq6m2jMV+H93GTRKtOsFAmNsa4AACgkQ+H93GTRK
tOvS5w//WWhCiYCQ2SSJCh0iNxcl39+WwK5QaqY0olNOO1bsD0bJAtcWx2HUq0cq
gA7muS5evMAe/N0/GDM2BxejvWInrC2IGnuQDmXW2dBYfhiJEqYsh3egi80x86tr
FMtaCAiNmhcOmtu2APGUS0haD7BousFn5FZk881SCLrX6lC8FbE6B0uszUvfB5K7
C2DWYqy3v2snofzgIqHmNIchvyAxE3dMKdB32//MP6I2A3EZj8tr9Kfddmyuq5Tg
iVQbRqGUe3pRhKAJfJv1O6wPnaCGzCZf8Lchw+h2xgD4LxYCFTfqUgidmFwPMG8F
JIedB9UE4ekKlUZY+nxcbU+sLwE0Zo2QgBKUnh0epy+QhxsEN6ndZ6eeMWrOurxT
s7KRbZ8i+DA05Y94QWVaiVxszmE0k5slcBWNI/faFFgf3vnprsozUiAaxUnb/2Ky
I0SpvnNRabqcDupdi+JzuIeEPC8FmbNkd9WooyV3I3+80LEnNb7xnfyyLaBBJzgU
RElAXzTov9MwdsfRMabMF6kjUN10lv7u5TAdmXRakjILNaFPx8RBDPL1C4Tf/QFY
sg3lNIMFTtabMBisk2I2kJHys83Qk986ESUAdGDbaB3m7E3yDf/AHAvzc8m5zIUm
lSKpuu4c32LuCZxrsuA9zRRiE+bbLTOR2TAfPFPvIybgEI6Epww=
=Z4oW
-----END PGP SIGNATURE-----