* [PATCH] xfs/273: check thoroughness of the fsmappings [not found] <20241108173907.GB168069@frogsfrogsfrogs> @ 2024-11-08 17:41 ` Darrick J. Wong 2024-11-09 14:45 ` Zorro Lang 0 siblings, 1 reply; 3+ messages in thread From: Darrick J. Wong @ 2024-11-08 17:41 UTC (permalink / raw) To: Zizhi Wo; +Cc: linux-xfs, Carlos Maiolino, fstests From: Darrick J. Wong <djwong@kernel.org> Enhance this test to make sure that there are no gaps in the fsmap records, and (especially) that they we report all the way to the end of the device. Signed-off-by: Darrick J. Wong <djwong@kernel.org> --- tests/xfs/273 | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/tests/xfs/273 b/tests/xfs/273 index d7fb80c4033429..ecfe5e7760a092 100755 --- a/tests/xfs/273 +++ b/tests/xfs/273 @@ -24,6 +24,8 @@ _require_scratch _require_populate_commands _require_xfs_io_command "fsmap" +_fixed_by_git_commit kernel XXXXXXXXXXXXXX "xfs: fix off-by-one error in fsmap's end_daddr usage" + rm -f "$seqres.full" echo "Format and mount" @@ -37,6 +39,51 @@ cat $TEST_DIR/a $TEST_DIR/b >> $seqres.full diff -uw $TEST_DIR/a $TEST_DIR/b +# Do we have mappings for every sector on the device? +ddev_fsblocks=$(_xfs_statfs_field "$SCRATCH_MNT" geom.datablocks) +rtdev_fsblocks=$(_xfs_statfs_field "$SCRATCH_MNT" geom.rtblocks) +fsblock_bytes=$(_xfs_statfs_field "$SCRATCH_MNT" geom.bsize) + +ddev_daddrs=$((ddev_fsblocks * fsblock_bytes / 512)) +rtdev_daddrs=$((rtdev_fsblocks * fsblock_bytes / 512)) + +ddev_devno=$(stat -c '%t:%T' $SCRATCH_DEV) +if [ "$USE_EXTERNAL" = "yes" ] && [ -n "$SCRATCH_RTDEV" ]; then + rtdev_devno=$(stat -c '%t:%T' $SCRATCH_RTDEV) +fi + +$XFS_IO_PROG -c 'fsmap -m -n 65536' $SCRATCH_MNT | awk -F ',' \ + -v data_devno=$ddev_devno \ + -v rt_devno=$rtdev_devno \ + -v data_daddrs=$ddev_daddrs \ + -v rt_daddrs=$rtdev_daddrs \ +'BEGIN { + next_daddr[data_devno] = 0; + next_daddr[rt_devno] = 0; +} +{ + if ($1 == "EXT") + next + devno = sprintf("%x:%x", $2, $3); + if (devno != data_devno && devno != rt_devno) + next + + if (next_daddr[devno] < $4) + printf("%sh: expected daddr %d, saw \"%s\"\n", devno, + next_daddr[devno], $0); + next = $5 + 1; + if (next > next_daddr[devno]) + next_daddr[devno] = next; +} +END { + if (data_daddrs != next_daddr[data_devno]) + printf("%sh: fsmap stops at %d, expected %d\n", + data_devno, next_daddr[data_devno], data_daddrs); + if (rt_devno != "" && rt_daddrs != next_daddr[rt_devno]) + printf("%sh: fsmap stops at %d, expected %d\n", + rt_devno, next_daddr[rt_devno], rt_daddrs); +}' + # success, all done status=0 exit ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] xfs/273: check thoroughness of the fsmappings 2024-11-08 17:41 ` [PATCH] xfs/273: check thoroughness of the fsmappings Darrick J. Wong @ 2024-11-09 14:45 ` Zorro Lang 2024-11-09 16:19 ` Darrick J. Wong 0 siblings, 1 reply; 3+ messages in thread From: Zorro Lang @ 2024-11-09 14:45 UTC (permalink / raw) To: Darrick J. Wong; +Cc: Zizhi Wo, linux-xfs, Carlos Maiolino, fstests On Fri, Nov 08, 2024 at 09:41:46AM -0800, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@kernel.org> > > Enhance this test to make sure that there are no gaps in the fsmap > records, and (especially) that they we report all the way to the end of > the device. > > Signed-off-by: Darrick J. Wong <djwong@kernel.org> > --- > tests/xfs/273 | 47 +++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 47 insertions(+) > > diff --git a/tests/xfs/273 b/tests/xfs/273 > index d7fb80c4033429..ecfe5e7760a092 100755 > --- a/tests/xfs/273 > +++ b/tests/xfs/273 > @@ -24,6 +24,8 @@ _require_scratch > _require_populate_commands > _require_xfs_io_command "fsmap" > > +_fixed_by_git_commit kernel XXXXXXXXXXXXXX "xfs: fix off-by-one error in fsmap's end_daddr usage" The _fixed_by_kernel_commit can replace the "_fixed_by_git_commit kernel". > + > rm -f "$seqres.full" > > echo "Format and mount" > @@ -37,6 +39,51 @@ cat $TEST_DIR/a $TEST_DIR/b >> $seqres.full > > diff -uw $TEST_DIR/a $TEST_DIR/b > > +# Do we have mappings for every sector on the device? > +ddev_fsblocks=$(_xfs_statfs_field "$SCRATCH_MNT" geom.datablocks) > +rtdev_fsblocks=$(_xfs_statfs_field "$SCRATCH_MNT" geom.rtblocks) > +fsblock_bytes=$(_xfs_statfs_field "$SCRATCH_MNT" geom.bsize) > + > +ddev_daddrs=$((ddev_fsblocks * fsblock_bytes / 512)) > +rtdev_daddrs=$((rtdev_fsblocks * fsblock_bytes / 512)) > + > +ddev_devno=$(stat -c '%t:%T' $SCRATCH_DEV) > +if [ "$USE_EXTERNAL" = "yes" ] && [ -n "$SCRATCH_RTDEV" ]; then > + rtdev_devno=$(stat -c '%t:%T' $SCRATCH_RTDEV) > +fi > + > +$XFS_IO_PROG -c 'fsmap -m -n 65536' $SCRATCH_MNT | awk -F ',' \ > + -v data_devno=$ddev_devno \ > + -v rt_devno=$rtdev_devno \ > + -v data_daddrs=$ddev_daddrs \ > + -v rt_daddrs=$rtdev_daddrs \ > +'BEGIN { > + next_daddr[data_devno] = 0; > + next_daddr[rt_devno] = 0; > +} > +{ > + if ($1 == "EXT") > + next > + devno = sprintf("%x:%x", $2, $3); > + if (devno != data_devno && devno != rt_devno) > + next > + > + if (next_daddr[devno] < $4) > + printf("%sh: expected daddr %d, saw \"%s\"\n", devno, > + next_daddr[devno], $0); > + next = $5 + 1; Ahaha, awk expert Darrick :) I tried this patch, but got below error when I tried this patch: +awk: cmd. line:15: next = $5 + 1; +awk: cmd. line:15: ^ syntax error Thanks, Zorro > + if (next > next_daddr[devno]) > + next_daddr[devno] = next; > +} > +END { > + if (data_daddrs != next_daddr[data_devno]) > + printf("%sh: fsmap stops at %d, expected %d\n", > + data_devno, next_daddr[data_devno], data_daddrs); > + if (rt_devno != "" && rt_daddrs != next_daddr[rt_devno]) > + printf("%sh: fsmap stops at %d, expected %d\n", > + rt_devno, next_daddr[rt_devno], rt_daddrs); > +}' > + > # success, all done > status=0 > exit > ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] xfs/273: check thoroughness of the fsmappings 2024-11-09 14:45 ` Zorro Lang @ 2024-11-09 16:19 ` Darrick J. Wong 0 siblings, 0 replies; 3+ messages in thread From: Darrick J. Wong @ 2024-11-09 16:19 UTC (permalink / raw) To: Zorro Lang; +Cc: Zizhi Wo, linux-xfs, Carlos Maiolino, fstests On Sat, Nov 09, 2024 at 10:45:16PM +0800, Zorro Lang wrote: > On Fri, Nov 08, 2024 at 09:41:46AM -0800, Darrick J. Wong wrote: > > From: Darrick J. Wong <djwong@kernel.org> > > > > Enhance this test to make sure that there are no gaps in the fsmap > > records, and (especially) that they we report all the way to the end of > > the device. > > > > Signed-off-by: Darrick J. Wong <djwong@kernel.org> > > --- > > tests/xfs/273 | 47 +++++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 47 insertions(+) > > > > diff --git a/tests/xfs/273 b/tests/xfs/273 > > index d7fb80c4033429..ecfe5e7760a092 100755 > > --- a/tests/xfs/273 > > +++ b/tests/xfs/273 > > @@ -24,6 +24,8 @@ _require_scratch > > _require_populate_commands > > _require_xfs_io_command "fsmap" > > > > +_fixed_by_git_commit kernel XXXXXXXXXXXXXX "xfs: fix off-by-one error in fsmap's end_daddr usage" > > The _fixed_by_kernel_commit can replace the "_fixed_by_git_commit kernel". <nod> > > + > > rm -f "$seqres.full" > > > > echo "Format and mount" > > @@ -37,6 +39,51 @@ cat $TEST_DIR/a $TEST_DIR/b >> $seqres.full > > > > diff -uw $TEST_DIR/a $TEST_DIR/b > > > > +# Do we have mappings for every sector on the device? > > +ddev_fsblocks=$(_xfs_statfs_field "$SCRATCH_MNT" geom.datablocks) > > +rtdev_fsblocks=$(_xfs_statfs_field "$SCRATCH_MNT" geom.rtblocks) > > +fsblock_bytes=$(_xfs_statfs_field "$SCRATCH_MNT" geom.bsize) > > + > > +ddev_daddrs=$((ddev_fsblocks * fsblock_bytes / 512)) > > +rtdev_daddrs=$((rtdev_fsblocks * fsblock_bytes / 512)) > > + > > +ddev_devno=$(stat -c '%t:%T' $SCRATCH_DEV) > > +if [ "$USE_EXTERNAL" = "yes" ] && [ -n "$SCRATCH_RTDEV" ]; then > > + rtdev_devno=$(stat -c '%t:%T' $SCRATCH_RTDEV) > > +fi > > + > > +$XFS_IO_PROG -c 'fsmap -m -n 65536' $SCRATCH_MNT | awk -F ',' \ > > + -v data_devno=$ddev_devno \ > > + -v rt_devno=$rtdev_devno \ > > + -v data_daddrs=$ddev_daddrs \ > > + -v rt_daddrs=$rtdev_daddrs \ > > +'BEGIN { > > + next_daddr[data_devno] = 0; > > + next_daddr[rt_devno] = 0; > > +} > > +{ > > + if ($1 == "EXT") > > + next > > + devno = sprintf("%x:%x", $2, $3); > > + if (devno != data_devno && devno != rt_devno) > > + next > > + > > + if (next_daddr[devno] < $4) > > + printf("%sh: expected daddr %d, saw \"%s\"\n", devno, > > + next_daddr[devno], $0); > > + next = $5 + 1; > > Ahaha, awk expert Darrick :) I tried this patch, but got below error when > I tried this patch: > > +awk: cmd. line:15: next = $5 + 1; > +awk: cmd. line:15: ^ syntax error Aha, I forgot to commit the change renaming next to n before sending. :( --D > Thanks, > Zorro > > > + if (next > next_daddr[devno]) > > + next_daddr[devno] = next; > > +} > > +END { > > + if (data_daddrs != next_daddr[data_devno]) > > + printf("%sh: fsmap stops at %d, expected %d\n", > > + data_devno, next_daddr[data_devno], data_daddrs); > > + if (rt_devno != "" && rt_daddrs != next_daddr[rt_devno]) > > + printf("%sh: fsmap stops at %d, expected %d\n", > > + rt_devno, next_daddr[rt_devno], rt_daddrs); > > +}' > > + > > # success, all done > > status=0 > > exit > > > ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-11-09 16:19 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20241108173907.GB168069@frogsfrogsfrogs>
2024-11-08 17:41 ` [PATCH] xfs/273: check thoroughness of the fsmappings Darrick J. Wong
2024-11-09 14:45 ` Zorro Lang
2024-11-09 16:19 ` Darrick J. Wong
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox