Re: [PATCH] xfs/030: link .out file according to reflink support status

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

 



On Wed, Mar 30, 2016 at 05:57:41PM +0800, Eryu Guan wrote:
> Commit 31f48569c353 ("xfs/030: fix output on newer filesystems") added
> more lines to .out file to match the output from XFS with reflink
> support, but it broke test on older XFS.
> 
> Fix it by introducing new .out file 030.out.reflink.linux to match the
> reflink case, so old XFS still compares .out file against 030.out.linux.
> 
> In order to do this, a new helper is introduced, _fs_has_reflink()
> accepts mount point as argument and returns if the underlying fs
> supports reflink or not.
> 
> Signed-off-by: Eryu Guan <eguan@xxxxxxxxxx>
> ---
> 
> I didn't test this patch on newer XFS, but it did pass for me on current
> 4.6-rc1 kernel.
> 
>  common/reflink                  |  18 +++
>  tests/xfs/030                   |  12 +-
>  tests/xfs/030.cfg               |   1 +
>  tests/xfs/030.out.linux         |   2 -
>  tests/xfs/030.out.reflink.linux | 252 ++++++++++++++++++++++++++++++++++++++++
>  5 files changed, 280 insertions(+), 5 deletions(-)
>  create mode 100644 tests/xfs/030.out.reflink.linux
> 
> diff --git a/common/reflink b/common/reflink
> index 4ec390d..bdfc01c 100644
> --- a/common/reflink
> +++ b/common/reflink
> @@ -156,6 +156,24 @@ _cp_reflink() {
>  	cp --reflink=always -p "$file1" "$file2"
>  }
>  
> +# given a mount point and test the underlying fs supports reflink or not
> +_fs_has_reflink()
> +{
> +	if [ -z $1 ] || [ ! -d $1 ]; then
> +		echo "Missing mount point argument for _fs_has_reflink()"
> +		exit 1
> +	fi
> +	local src=$1/_fs_has_reflink_testfile
> +	local tgt=$src.reflink
> +	local ret=0
> +
> +	echo "reflink test" > $src
> +	_cp_reflink $src $tgt >/dev/null 2>&1
> +	ret=$?
> +	rm -f $src $tgt >/dev/null 2>&1
> +	return $ret
> +}

Patch looks ok, though I wonder if _require_*_reflink ought to be
refactored to use this?

--D

> +
>  # Reflink some file1 into file2
>  _reflink() {
>  	file1="$1"
> diff --git a/tests/xfs/030 b/tests/xfs/030
> index 33c906c..d171a39 100755
> --- a/tests/xfs/030
> +++ b/tests/xfs/030
> @@ -44,9 +44,7 @@ trap "_cleanup; exit \$status" 0 1 2 3 15
>  . ./common/rc
>  . ./common/filter
>  . ./common/repair
> -
> -# link correct .out file
> -_link_out_file
> +. ./common/reflink
>  
>  # nuke the superblock, AGI, AGF, AGFL; then try repair the damage
>  #
> @@ -90,6 +88,14 @@ else
>  		_notrun "GQuota are enabled, test needs controlled sb recovery"
>  	src/feature -P $SCRATCH_DEV && \
>  		_notrun "PQuota are enabled, test needs controlled sb recovery"
> +
> +	# link correct .out file
> +	features=`_get_os_name`
> +	if _fs_has_reflink $SCRATCH_MNT; then
> +		features=$feature,reflink
> +	fi
> +	_link_out_file_named $seqfull.out "$features"
> +
>  	_scratch_unmount
>  fi
>  clear=""
> diff --git a/tests/xfs/030.cfg b/tests/xfs/030.cfg
> index 7ffdfc0..1eacdc1 100644
> --- a/tests/xfs/030.cfg
> +++ b/tests/xfs/030.cfg
> @@ -1,2 +1,3 @@
>  irix: irix
> +linux,reflink: reflink.linux
>  linux: linux
> diff --git a/tests/xfs/030.out.linux b/tests/xfs/030.out.linux
> index 14b9b35..cf3259f 100644
> --- a/tests/xfs/030.out.linux
> +++ b/tests/xfs/030.out.linux
> @@ -231,8 +231,6 @@ bad agbno AGBNO in agfl, agno 0
>  bad agbno AGBNO in agfl, agno 0
>  bad agbno AGBNO in agfl, agno 0
>  bad agbno AGBNO in agfl, agno 0
> -bad agbno AGBNO in agfl, agno 0
> -bad agbno AGBNO in agfl, agno 0
>          - found root inode chunk
>  Phase 3 - for each AG...
>          - scan and clear agi unlinked lists...
> diff --git a/tests/xfs/030.out.reflink.linux b/tests/xfs/030.out.reflink.linux
> new file mode 100644
> index 0000000..14b9b35
> --- /dev/null
> +++ b/tests/xfs/030.out.reflink.linux
> @@ -0,0 +1,252 @@
> +QA output created by 030
> +meta-data=DDEV isize=XXX agcount=N, agsize=XXX blks
> +data     = bsize=XXX blocks=XXX, imaxpct=PCT
> +         = sunit=XXX swidth=XXX, unwritten=X
> +naming   =VERN bsize=XXX
> +log      =LDEV bsize=XXX blocks=XXX
> +realtime =RDEV extsz=XXX blocks=XXX, rtextents=XXX
> +Corrupting sb 0 - setting bits to 0
> +Wrote X.XXKb (value 0x0)
> +Phase 1 - find and verify superblock...
> +bad primary superblock - bad magic number !!!
> +
> +attempting to find secondary superblock...
> +found candidate secondary superblock...
> +verified secondary superblock...
> +writing modified primary superblock
> +sb root inode value INO inconsistent with calculated value INO
> +resetting superblock root inode pointer to INO
> +sb realtime bitmap inode INO inconsistent with calculated value INO
> +resetting superblock realtime bitmap ino pointer to INO
> +sb realtime summary inode INO inconsistent with calculated value INO
> +resetting superblock realtime summary ino pointer to INO
> +Phase 2 - using <TYPEOF> log
> +        - zero log...
> +        - scan filesystem freespace and inode maps...
> +        - found root inode chunk
> +Phase 3 - for each AG...
> +        - scan and clear agi unlinked lists...
> +        - process known inodes and perform inode discovery...
> +        - process newly discovered inodes...
> +Phase 4 - check for duplicate blocks...
> +        - setting up duplicate extent list...
> +        - check for inodes claiming duplicate blocks...
> +Phase 5 - rebuild AG headers and trees...
> +        - reset superblock...
> +Phase 6 - check inode connectivity...
> +        - resetting contents of realtime bitmap and summary inodes
> +        - traversing filesystem ...
> +        - traversal finished ...
> +        - moving disconnected inodes to lost+found ...
> +Phase 7 - verify and correct link counts...
> +Note - stripe unit (0) and width (0) fields have been reset.
> +Please set with mount -o sunit=<value>,swidth=<value>
> +done
> +Corrupting agf 0 - setting bits to 0
> +Wrote X.XXKb (value 0x0)
> +Phase 1 - find and verify superblock...
> +Phase 2 - using <TYPEOF> log
> +        - zero log...
> +        - scan filesystem freespace and inode maps...
> +bad magic # 0x0 for agf 0
> +bad version # 0 for agf 0
> +bad length 0 for agf 0, should be LENGTH
> +reset bad agf for ag 0
> +bad agbno AGBNO for btbno root, agno 0
> +bad agbno AGBNO for btbcnt root, agno 0
> +        - found root inode chunk
> +Phase 3 - for each AG...
> +        - scan and clear agi unlinked lists...
> +        - process known inodes and perform inode discovery...
> +        - process newly discovered inodes...
> +Phase 4 - check for duplicate blocks...
> +        - setting up duplicate extent list...
> +        - check for inodes claiming duplicate blocks...
> +Phase 5 - rebuild AG headers and trees...
> +        - reset superblock...
> +Phase 6 - check inode connectivity...
> +        - resetting contents of realtime bitmap and summary inodes
> +        - traversing filesystem ...
> +        - traversal finished ...
> +        - moving disconnected inodes to lost+found ...
> +Phase 7 - verify and correct link counts...
> +done
> +Corrupting agi 0 - setting bits to 0
> +Wrote X.XXKb (value 0x0)
> +Phase 1 - find and verify superblock...
> +Phase 2 - using <TYPEOF> log
> +        - zero log...
> +        - scan filesystem freespace and inode maps...
> +bad magic # 0x0 for agi 0
> +bad version # 0 for agi 0
> +bad length # 0 for agi 0, should be LENGTH
> +reset bad agi for ag 0
> +bad agbno AGBNO for inobt root, agno 0
> +root inode chunk not found
> +Phase 3 - for each AG...
> +        - scan and clear agi unlinked lists...
> +        - process known inodes and perform inode discovery...
> +        - process newly discovered inodes...
> +Phase 4 - check for duplicate blocks...
> +        - setting up duplicate extent list...
> +        - check for inodes claiming duplicate blocks...
> +Phase 5 - rebuild AG headers and trees...
> +        - reset superblock...
> +Phase 6 - check inode connectivity...
> +        - resetting contents of realtime bitmap and summary inodes
> +        - traversing filesystem ...
> +        - traversal finished ...
> +        - moving disconnected inodes to lost+found ...
> +Phase 7 - verify and correct link counts...
> +done
> +Corrupting agfl 0 - setting bits to 0
> +Wrote X.XXKb (value 0x0)
> +Phase 1 - find and verify superblock...
> +Phase 2 - using <TYPEOF> log
> +        - zero log...
> +        - scan filesystem freespace and inode maps...
> +        - found root inode chunk
> +Phase 3 - for each AG...
> +        - scan and clear agi unlinked lists...
> +        - process known inodes and perform inode discovery...
> +        - process newly discovered inodes...
> +Phase 4 - check for duplicate blocks...
> +        - setting up duplicate extent list...
> +        - check for inodes claiming duplicate blocks...
> +Phase 5 - rebuild AG headers and trees...
> +        - reset superblock...
> +Phase 6 - check inode connectivity...
> +        - resetting contents of realtime bitmap and summary inodes
> +        - traversing filesystem ...
> +        - traversal finished ...
> +        - moving disconnected inodes to lost+found ...
> +Phase 7 - verify and correct link counts...
> +done
> +Corrupting sb 0 - setting bits to -1
> +Wrote X.XXKb (value 0xffffffff)
> +Phase 1 - find and verify superblock...
> +bad primary superblock - bad magic number !!!
> +
> +attempting to find secondary superblock...
> +found candidate secondary superblock...
> +verified secondary superblock...
> +writing modified primary superblock
> +sb root inode value INO inconsistent with calculated value INO
> +resetting superblock root inode pointer to INO
> +sb realtime bitmap inode INO inconsistent with calculated value INO
> +resetting superblock realtime bitmap ino pointer to INO
> +sb realtime summary inode INO inconsistent with calculated value INO
> +resetting superblock realtime summary ino pointer to INO
> +Phase 2 - using <TYPEOF> log
> +        - zero log...
> +        - scan filesystem freespace and inode maps...
> +        - found root inode chunk
> +Phase 3 - for each AG...
> +        - scan and clear agi unlinked lists...
> +        - process known inodes and perform inode discovery...
> +        - process newly discovered inodes...
> +Phase 4 - check for duplicate blocks...
> +        - setting up duplicate extent list...
> +        - check for inodes claiming duplicate blocks...
> +Phase 5 - rebuild AG headers and trees...
> +        - reset superblock...
> +Phase 6 - check inode connectivity...
> +        - resetting contents of realtime bitmap and summary inodes
> +        - traversing filesystem ...
> +        - traversal finished ...
> +        - moving disconnected inodes to lost+found ...
> +Phase 7 - verify and correct link counts...
> +Note - stripe unit (0) and width (0) fields have been reset.
> +Please set with mount -o sunit=<value>,swidth=<value>
> +done
> +Corrupting agf 0 - setting bits to -1
> +Wrote X.XXKb (value 0xffffffff)
> +Phase 1 - find and verify superblock...
> +Phase 2 - using <TYPEOF> log
> +        - zero log...
> +        - scan filesystem freespace and inode maps...
> +bad magic # 0xffffffff for agf 0
> +bad version # -1 for agf 0
> +bad sequence # -1 for agf 0
> +bad length -1 for agf 0, should be LENGTH
> +flfirst -1 in agf 0 too large (max = MAX)
> +fllast -1 in agf 0 too large (max = MAX)
> +reset bad agf for ag 0
> +freeblk count 1 != flcount -1 in ag 0
> +bad agbno AGBNO for btbno root, agno 0
> +bad agbno AGBNO for btbcnt root, agno 0
> +        - found root inode chunk
> +Phase 3 - for each AG...
> +        - scan and clear agi unlinked lists...
> +        - process known inodes and perform inode discovery...
> +        - process newly discovered inodes...
> +Phase 4 - check for duplicate blocks...
> +        - setting up duplicate extent list...
> +        - check for inodes claiming duplicate blocks...
> +Phase 5 - rebuild AG headers and trees...
> +        - reset superblock...
> +Phase 6 - check inode connectivity...
> +        - resetting contents of realtime bitmap and summary inodes
> +        - traversing filesystem ...
> +        - traversal finished ...
> +        - moving disconnected inodes to lost+found ...
> +Phase 7 - verify and correct link counts...
> +done
> +Corrupting agi 0 - setting bits to -1
> +Wrote X.XXKb (value 0xffffffff)
> +Phase 1 - find and verify superblock...
> +Phase 2 - using <TYPEOF> log
> +        - zero log...
> +        - scan filesystem freespace and inode maps...
> +bad magic # 0xffffffff for agi 0
> +bad version # -1 for agi 0
> +bad sequence # -1 for agi 0
> +bad length # -1 for agi 0, should be LENGTH
> +reset bad agi for ag 0
> +bad agbno AGBNO for inobt root, agno 0
> +root inode chunk not found
> +Phase 3 - for each AG...
> +        - scan and clear agi unlinked lists...
> +        - process known inodes and perform inode discovery...
> +        - process newly discovered inodes...
> +Phase 4 - check for duplicate blocks...
> +        - setting up duplicate extent list...
> +        - check for inodes claiming duplicate blocks...
> +Phase 5 - rebuild AG headers and trees...
> +        - reset superblock...
> +Phase 6 - check inode connectivity...
> +        - resetting contents of realtime bitmap and summary inodes
> +        - traversing filesystem ...
> +        - traversal finished ...
> +        - moving disconnected inodes to lost+found ...
> +Phase 7 - verify and correct link counts...
> +done
> +Corrupting agfl 0 - setting bits to -1
> +Wrote X.XXKb (value 0xffffffff)
> +Phase 1 - find and verify superblock...
> +Phase 2 - using <TYPEOF> log
> +        - zero log...
> +        - scan filesystem freespace and inode maps...
> +bad agbno AGBNO in agfl, agno 0
> +bad agbno AGBNO in agfl, agno 0
> +bad agbno AGBNO in agfl, agno 0
> +bad agbno AGBNO in agfl, agno 0
> +bad agbno AGBNO in agfl, agno 0
> +bad agbno AGBNO in agfl, agno 0
> +        - found root inode chunk
> +Phase 3 - for each AG...
> +        - scan and clear agi unlinked lists...
> +        - process known inodes and perform inode discovery...
> +        - process newly discovered inodes...
> +Phase 4 - check for duplicate blocks...
> +        - setting up duplicate extent list...
> +        - check for inodes claiming duplicate blocks...
> +Phase 5 - rebuild AG headers and trees...
> +        - reset superblock...
> +Phase 6 - check inode connectivity...
> +        - resetting contents of realtime bitmap and summary inodes
> +        - traversing filesystem ...
> +        - traversal finished ...
> +        - moving disconnected inodes to lost+found ...
> +Phase 7 - verify and correct link counts...
> +done
> -- 
> 2.5.5
> 
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs



[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux