On Wed, Apr 09, 2025 at 09:55:47AM +0200, Christoph Hellwig wrote: > Calculate the size properly for internal RT devices and skip restoring > to the external one for this case. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Looks good, Reviewed-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --D > --- > mdrestore/xfs_mdrestore.c | 20 +++++++++++++++++--- > 1 file changed, 17 insertions(+), 3 deletions(-) > > diff --git a/mdrestore/xfs_mdrestore.c b/mdrestore/xfs_mdrestore.c > index d5014981b15a..95b01a99a154 100644 > --- a/mdrestore/xfs_mdrestore.c > +++ b/mdrestore/xfs_mdrestore.c > @@ -183,6 +183,20 @@ verify_device_size( > } > } > > +static void > +verify_main_device_size( > + const struct mdrestore_dev *dev, > + struct xfs_sb *sb) > +{ > + xfs_rfsblock_t nr_blocks = sb->sb_dblocks; > + > + /* internal RT device */ > + if (sb->sb_rtstart) > + nr_blocks = sb->sb_rtstart + sb->sb_rblocks; > + > + verify_device_size(dev, nr_blocks, sb->sb_blocksize); > +} > + > static void > read_header_v1( > union mdrestore_headers *h, > @@ -269,7 +283,7 @@ restore_v1( > > ((struct xfs_dsb*)block_buffer)->sb_inprogress = 1; > > - verify_device_size(ddev, sb.sb_dblocks, sb.sb_blocksize); > + verify_main_device_size(ddev, &sb); > > bytes_read = 0; > > @@ -432,14 +446,14 @@ restore_v2( > > ((struct xfs_dsb *)block_buffer)->sb_inprogress = 1; > > - verify_device_size(ddev, sb.sb_dblocks, sb.sb_blocksize); > + verify_main_device_size(ddev, &sb); > > if (sb.sb_logstart == 0) { > ASSERT(mdrestore.external_log == true); > verify_device_size(logdev, sb.sb_logblocks, sb.sb_blocksize); > } > > - if (sb.sb_rblocks > 0) { > + if (sb.sb_rblocks > 0 && !sb.sb_rtstart) { > ASSERT(mdrestore.realtime_data == true); > verify_device_size(rtdev, sb.sb_rblocks, sb.sb_blocksize); > } > -- > 2.47.2 > >