xfs: support recovering bmap intent items targetting realtime extents
authorDarrick J. Wong <djwong@kernel.org>
Thu, 22 Feb 2024 20:44:24 +0000 (12:44 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Thu, 22 Feb 2024 20:44:24 +0000 (12:44 -0800)
Now that we have reflink on the realtime device, bmap intent items have
to support remapping extents on the realtime volume.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/xfs_bmap_item.c

index 701166da7f8a3f0bee3e1e7b627396998216bdd8..d27859a684aa699c2d509fdecc8f9ece344195e2 100644 (file)
@@ -435,6 +435,9 @@ xfs_bui_validate(
        if (!xfs_verify_fileext(mp, map->me_startoff, map->me_len))
                return false;
 
+       if (map->me_flags & XFS_BMAP_EXTENT_REALTIME)
+               return xfs_verify_rtbext(mp, map->me_startblock, map->me_len);
+
        return xfs_verify_fsbext(mp, map->me_startblock, map->me_len);
 }
 
@@ -510,6 +513,12 @@ xfs_bmap_recover_work(
        xfs_ilock(ip, XFS_ILOCK_EXCL);
        xfs_trans_ijoin(tp, ip, 0);
 
+       if (!!(map->me_flags & XFS_BMAP_EXTENT_REALTIME) !=
+           xfs_ifork_is_realtime(ip, work->bi_whichfork)) {
+               error = -EFSCORRUPTED;
+               goto err_cancel;
+       }
+
        if (work->bi_type == XFS_BMAP_MAP)
                iext_delta = XFS_IEXT_ADD_NOSPLIT_CNT;
        else