diff options
author | 2024-11-20 16:21:01 -0800 | |
---|---|---|
committer | 2024-12-23 13:06:13 -0800 | |
commit | 51e232674975ff138d0e892272fdde9bc444c572 (patch) | |
tree | 35bd13d8158382fb92b53fb07bc1e47061821e54 /fs/xfs/xfs_reflink.c | |
parent | xfs: allow inodes to have the realtime and reflink flags (diff) | |
download | wireguard-linux-51e232674975ff138d0e892272fdde9bc444c572.tar.xz wireguard-linux-51e232674975ff138d0e892272fdde9bc444c572.zip |
xfs: recover CoW leftovers in the realtime volume
Scan the realtime refcount tree at mount time to get rid of leftover
CoW staging extents.
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to '')
-rw-r--r-- | fs/xfs/xfs_reflink.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 78b47b2ac124..d9b33e22c176 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -983,20 +983,29 @@ xfs_reflink_recover_cow( struct xfs_mount *mp) { struct xfs_perag *pag = NULL; + struct xfs_rtgroup *rtg = NULL; int error = 0; if (!xfs_has_reflink(mp)) return 0; while ((pag = xfs_perag_next(mp, pag))) { - error = xfs_refcount_recover_cow_leftovers(mp, pag); + error = xfs_refcount_recover_cow_leftovers(pag_group(pag)); if (error) { xfs_perag_rele(pag); - break; + return error; } } - return error; + while ((rtg = xfs_rtgroup_next(mp, rtg))) { + error = xfs_refcount_recover_cow_leftovers(rtg_group(rtg)); + if (error) { + xfs_rtgroup_rele(rtg); + return error; + } + } + + return 0; } /* |