Re: [PATCH 4/4] xfs/432: fix metadump loop device blocksize problems

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

 



On Thu, May 22, 2025 at 11:08:14AM +1000, Dave Chinner wrote:
> On Wed, May 21, 2025 at 03:41:51PM -0700, Darrick J. Wong wrote:
> > From: Darrick J. Wong <djwong@xxxxxxxxxx>
> > 
> > Make sure the lba size of the loop devices created for the metadump
> > tests actually match that of the real SCRATCH_ devices or else the tests
> > will fail.
> > 
> > Signed-off-by: "Darrick J. Wong" <djwong@xxxxxxxxxx>
> > ---
> >  common/metadump |   12 ++++++++++--
> >  common/rc       |    7 +++++++
> >  2 files changed, 17 insertions(+), 2 deletions(-)
> > 
> > 
> > diff --git a/common/metadump b/common/metadump
> > index 61ba3cbb91647c..4ae03c605563fc 100644
> > --- a/common/metadump
> > +++ b/common/metadump
> > @@ -76,6 +76,7 @@ _xfs_verify_metadump_v1()
> >  
> >  	# Create loopdev for data device so we can mount the fs
> >  	METADUMP_DATA_LOOP_DEV=$(_create_loop_device $data_img)
> > +	_force_loop_device_blocksize $METADUMP_DATA_LOOP_DEV $SCRATCH_DEV
> 
> That doesn't look right. You're passing the scratch device as a
> block size parameter. 
> 
> >  
> >  	# Mount fs, run an extra test, fsck, and unmount
> >  	SCRATCH_DEV=$METADUMP_DATA_LOOP_DEV _scratch_mount
> > @@ -123,12 +124,19 @@ _xfs_verify_metadump_v2()
> >  
> >  	# Create loopdev for data device so we can mount the fs
> >  	METADUMP_DATA_LOOP_DEV=$(_create_loop_device $data_img)
> > +	_force_loop_device_blocksize $METADUMP_DATA_LOOP_DEV $SCRATCH_DEV
> >  
> >  	# Create loopdev for log device if we recovered anything
> > -	test -s "$log_img" && METADUMP_LOG_LOOP_DEV=$(_create_loop_device $log_img)
> > +	if [ -s "$log_img" ]; then
> > +		METADUMP_LOG_LOOP_DEV=$(_create_loop_device $log_img)
> > +		_force_loop_device_blocksize $METADUMP_LOG_LOOP_DEV $SCRATCH_LOGDEV
> > +	fi
> >  
> >  	# Create loopdev for rt device if we recovered anything
> > -	test -s "$rt_img" && METADUMP_RT_LOOP_DEV=$(_create_loop_device $rt_img)
> > +	if [ -s "$rt_img" ]; then
> > +		METADUMP_RT_LOOP_DEV=$(_create_loop_device $rt_img)
> > +		_force_loop_device_blocksize $METADUMP_RT_LOOP_DEV $SCRATCH_RTDEV
> > +	fi
> >  
> >  	# Mount fs, run an extra test, fsck, and unmount
> >  	SCRATCH_DEV=$METADUMP_DATA_LOOP_DEV SCRATCH_LOGDEV=$METADUMP_LOG_LOOP_DEV SCRATCH_RTDEV=$METADUMP_RT_LOOP_DEV _scratch_mount
> > diff --git a/common/rc b/common/rc
> > index 4e3917a298e072..9e27f7a4afba44 100644
> > --- a/common/rc
> > +++ b/common/rc
> > @@ -4527,6 +4527,8 @@ _create_loop_device()
> >  }
> >  
> >  # Configure the loop device however needed to support the given block size.
> > +# The first argument is the loop device; the second is either an integer block
> > +# size, or a different block device whose blocksize we want to match.
> >  _force_loop_device_blocksize()
> >  {
> >  	local loopdev="$1"
> > @@ -4539,6 +4541,11 @@ _force_loop_device_blocksize()
> >  		return 1
> >  	fi
> >  
> > +	# second argument is really a bdev; copy its lba size
> > +	if [ -b "$blksize" ]; then
> > +		blksize="$(blockdev --getss "${blksize}")"
> > +	fi
> 
> Oh, you're overloading the second parameter with different types -
> that's pretty nasty.  It would be much cleaner to write a wrapper
> function that extracts the block size from the device before calling
> _force_loop_device_blocksize()....

Or my preferred solution: a special purpose wrapper with a different
name that takes only a bdev path and has a comment that says it requires
a bdev path.

--D

> 
> -Dave.
> 
> -- 
> Dave Chinner
> david@xxxxxxxxxxxxx
> 




[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