* [PATCH 0/5] Add support for testing XFS metadump v2
@ 2024-01-02 8:43 Chandan Babu R
2024-01-02 8:43 ` [PATCH 1/5] common/xfs: Do not append -a and -o options to metadump Chandan Babu R
` (4 more replies)
0 siblings, 5 replies; 16+ messages in thread
From: Chandan Babu R @ 2024-01-02 8:43 UTC (permalink / raw)
To: fstests; +Cc: Chandan Babu R, linux-xfs, djwong, zlang
Hi,
This patchset modifies existing tests to add support for testing
Metadump v2 feature. Metadump v2 feature is already part of Xfsprogs'
for-next branch.
Chandan Babu R (5):
common/xfs: Do not append -a and -o options to metadump
common/xfs: Add function to detect support for metadump v2
_scratch_xfs_mdrestore: Pass scratch log device when applicable
xfs: Add support for testing metadump v2
xfs: Check correctness of metadump/mdrestore's ability to work with
dirty log
common/populate | 2 +-
common/xfs | 34 ++++++--
tests/xfs/129 | 63 ++++++++++++---
tests/xfs/129.out | 4 +-
tests/xfs/234 | 63 ++++++++++++---
tests/xfs/234.out | 4 +-
tests/xfs/253 | 195 ++++++++++++++++++++++++++--------------------
tests/xfs/291 | 25 +++++-
tests/xfs/336 | 2 +-
tests/xfs/432 | 29 +++++--
tests/xfs/432.out | 3 +-
tests/xfs/503 | 94 +++++++++++++---------
tests/xfs/503.out | 12 +--
tests/xfs/801 | 115 +++++++++++++++++++++++++++
tests/xfs/801.out | 14 ++++
15 files changed, 485 insertions(+), 174 deletions(-)
create mode 100755 tests/xfs/801
create mode 100644 tests/xfs/801.out
--
2.43.0
^ permalink raw reply [flat|nested] 16+ messages in thread* [PATCH 1/5] common/xfs: Do not append -a and -o options to metadump 2024-01-02 8:43 [PATCH 0/5] Add support for testing XFS metadump v2 Chandan Babu R @ 2024-01-02 8:43 ` Chandan Babu R 2024-01-02 18:10 ` Darrick J. Wong 2024-01-02 8:43 ` [PATCH 2/5] common/xfs: Add function to detect support for metadump v2 Chandan Babu R ` (3 subsequent siblings) 4 siblings, 1 reply; 16+ messages in thread From: Chandan Babu R @ 2024-01-02 8:43 UTC (permalink / raw) To: fstests; +Cc: Chandan Babu R, linux-xfs, djwong, zlang xfs/253 requires the metadump to be obfuscated. However _xfs_metadump() would append the '-o' option causing the metadump to be unobfuscated. This commit fixes the bug by modifying _xfs_metadump() to no longer append any metadump options. The direct/indirect callers of this function now pass the required options explicitly. Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> --- common/populate | 2 +- common/xfs | 7 +++---- tests/xfs/291 | 2 +- tests/xfs/336 | 2 +- tests/xfs/432 | 2 +- tests/xfs/503 | 2 +- 6 files changed, 8 insertions(+), 9 deletions(-) diff --git a/common/populate b/common/populate index 3d233073..cfbfd88a 100644 --- a/common/populate +++ b/common/populate @@ -55,7 +55,7 @@ __populate_fail() { case "$FSTYP" in xfs) _scratch_unmount - _scratch_xfs_metadump "$metadump" + _scratch_xfs_metadump "$metadump" -a -o ;; ext4) _scratch_unmount diff --git a/common/xfs b/common/xfs index f53b33fc..38094828 100644 --- a/common/xfs +++ b/common/xfs @@ -667,7 +667,6 @@ _xfs_metadump() { local compressopt="$4" shift; shift; shift; shift local options="$@" - test -z "$options" && options="-a -o" if [ "$logdev" != "none" ]; then options="$options -l $logdev" @@ -855,7 +854,7 @@ _check_xfs_filesystem() if [ "$ok" -ne 1 ] && [ "$DUMP_CORRUPT_FS" = "1" ]; then local flatdev="$(basename "$device")" _xfs_metadump "$seqres.$flatdev.check.md" "$device" "$logdev" \ - compress >> $seqres.full + compress -a -o >> $seqres.full fi # Optionally test the index rebuilding behavior. @@ -888,7 +887,7 @@ _check_xfs_filesystem() if [ "$rebuild_ok" -ne 1 ] && [ "$DUMP_CORRUPT_FS" = "1" ]; then local flatdev="$(basename "$device")" _xfs_metadump "$seqres.$flatdev.rebuild.md" "$device" \ - "$logdev" compress >> $seqres.full + "$logdev" compress -a -o >> $seqres.full fi fi @@ -972,7 +971,7 @@ _check_xfs_filesystem() if [ "$orebuild_ok" -ne 1 ] && [ "$DUMP_CORRUPT_FS" = "1" ]; then local flatdev="$(basename "$device")" _xfs_metadump "$seqres.$flatdev.orebuild.md" "$device" \ - "$logdev" compress >> $seqres.full + "$logdev" compress -a -o >> $seqres.full fi fi diff --git a/tests/xfs/291 b/tests/xfs/291 index 600dcb2e..54448497 100755 --- a/tests/xfs/291 +++ b/tests/xfs/291 @@ -92,7 +92,7 @@ _scratch_xfs_check >> $seqres.full 2>&1 || _fail "xfs_check failed" # Yes they can! Now... # Can xfs_metadump cope with this monster? -_scratch_xfs_metadump $tmp.metadump || _fail "xfs_metadump failed" +_scratch_xfs_metadump $tmp.metadump -a -o || _fail "xfs_metadump failed" SCRATCH_DEV=$tmp.img _scratch_xfs_mdrestore $tmp.metadump || _fail "xfs_mdrestore failed" SCRATCH_DEV=$tmp.img _scratch_xfs_repair -f &>> $seqres.full || \ _fail "xfs_repair of metadump failed" diff --git a/tests/xfs/336 b/tests/xfs/336 index d7a074d9..43b3790c 100755 --- a/tests/xfs/336 +++ b/tests/xfs/336 @@ -62,7 +62,7 @@ _scratch_cycle_mount echo "Create metadump file" _scratch_unmount -_scratch_xfs_metadump $metadump_file +_scratch_xfs_metadump $metadump_file -a # Now restore the obfuscated one back and take a look around echo "Restore metadump" diff --git a/tests/xfs/432 b/tests/xfs/432 index 66315b03..dae68fb2 100755 --- a/tests/xfs/432 +++ b/tests/xfs/432 @@ -86,7 +86,7 @@ echo "qualifying extent: $extlen blocks" >> $seqres.full test -n "$extlen" || _notrun "could not create dir extent > 1000 blocks" echo "Try to metadump" -_scratch_xfs_metadump $metadump_file -w +_scratch_xfs_metadump $metadump_file -a -o -w SCRATCH_DEV=$metadump_img _scratch_xfs_mdrestore $metadump_file echo "Check restored metadump image" diff --git a/tests/xfs/503 b/tests/xfs/503 index f5710ece..8805632d 100755 --- a/tests/xfs/503 +++ b/tests/xfs/503 @@ -46,7 +46,7 @@ metadump_file_ag=${metadump_file}.ag copy_file=$testdir/copy.img echo metadump -_scratch_xfs_metadump $metadump_file >> $seqres.full +_scratch_xfs_metadump $metadump_file -a -o >> $seqres.full echo metadump a _scratch_xfs_metadump $metadump_file_a -a >> $seqres.full -- 2.43.0 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 1/5] common/xfs: Do not append -a and -o options to metadump 2024-01-02 8:43 ` [PATCH 1/5] common/xfs: Do not append -a and -o options to metadump Chandan Babu R @ 2024-01-02 18:10 ` Darrick J. Wong 2024-01-05 6:54 ` Chandan Babu R 0 siblings, 1 reply; 16+ messages in thread From: Darrick J. Wong @ 2024-01-02 18:10 UTC (permalink / raw) To: Chandan Babu R; +Cc: fstests, linux-xfs, zlang On Tue, Jan 02, 2024 at 02:13:48PM +0530, Chandan Babu R wrote: > xfs/253 requires the metadump to be obfuscated. However _xfs_metadump() would > append the '-o' option causing the metadump to be unobfuscated. > > This commit fixes the bug by modifying _xfs_metadump() to no longer append any > metadump options. The direct/indirect callers of this function now pass the > required options explicitly. > > Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> > --- > common/populate | 2 +- > common/xfs | 7 +++---- > tests/xfs/291 | 2 +- > tests/xfs/336 | 2 +- > tests/xfs/432 | 2 +- > tests/xfs/503 | 2 +- Hmm. Shouldn't "-a -o" be lowered into xfs/168? It generates a metadump if a post-shrinkfs repair fails and someone needs to debug the resulting breakage. I think that in general, tests should be using -a (copy entire fs blocks) and -o (do not obfuscate) to reduce the amount of processing that fstests has to do; and to make it easy for developers to examine the fs metadata. (Also given the number of bugs that we keep finding in the "zero unused parts of blocks" code, I almost always use -a to reduce the number of pieces that can fail.) Obviously that does not apply to tests that are exercising metadump itself. --D > 6 files changed, 8 insertions(+), 9 deletions(-) > > diff --git a/common/populate b/common/populate > index 3d233073..cfbfd88a 100644 > --- a/common/populate > +++ b/common/populate > @@ -55,7 +55,7 @@ __populate_fail() { > case "$FSTYP" in > xfs) > _scratch_unmount > - _scratch_xfs_metadump "$metadump" > + _scratch_xfs_metadump "$metadump" -a -o > ;; > ext4) > _scratch_unmount > diff --git a/common/xfs b/common/xfs > index f53b33fc..38094828 100644 > --- a/common/xfs > +++ b/common/xfs > @@ -667,7 +667,6 @@ _xfs_metadump() { > local compressopt="$4" > shift; shift; shift; shift > local options="$@" > - test -z "$options" && options="-a -o" > > if [ "$logdev" != "none" ]; then > options="$options -l $logdev" > @@ -855,7 +854,7 @@ _check_xfs_filesystem() > if [ "$ok" -ne 1 ] && [ "$DUMP_CORRUPT_FS" = "1" ]; then > local flatdev="$(basename "$device")" > _xfs_metadump "$seqres.$flatdev.check.md" "$device" "$logdev" \ > - compress >> $seqres.full > + compress -a -o >> $seqres.full > fi > > # Optionally test the index rebuilding behavior. > @@ -888,7 +887,7 @@ _check_xfs_filesystem() > if [ "$rebuild_ok" -ne 1 ] && [ "$DUMP_CORRUPT_FS" = "1" ]; then > local flatdev="$(basename "$device")" > _xfs_metadump "$seqres.$flatdev.rebuild.md" "$device" \ > - "$logdev" compress >> $seqres.full > + "$logdev" compress -a -o >> $seqres.full > fi > fi > > @@ -972,7 +971,7 @@ _check_xfs_filesystem() > if [ "$orebuild_ok" -ne 1 ] && [ "$DUMP_CORRUPT_FS" = "1" ]; then > local flatdev="$(basename "$device")" > _xfs_metadump "$seqres.$flatdev.orebuild.md" "$device" \ > - "$logdev" compress >> $seqres.full > + "$logdev" compress -a -o >> $seqres.full > fi > fi > > diff --git a/tests/xfs/291 b/tests/xfs/291 > index 600dcb2e..54448497 100755 > --- a/tests/xfs/291 > +++ b/tests/xfs/291 > @@ -92,7 +92,7 @@ _scratch_xfs_check >> $seqres.full 2>&1 || _fail "xfs_check failed" > > # Yes they can! Now... > # Can xfs_metadump cope with this monster? > -_scratch_xfs_metadump $tmp.metadump || _fail "xfs_metadump failed" > +_scratch_xfs_metadump $tmp.metadump -a -o || _fail "xfs_metadump failed" > SCRATCH_DEV=$tmp.img _scratch_xfs_mdrestore $tmp.metadump || _fail "xfs_mdrestore failed" > SCRATCH_DEV=$tmp.img _scratch_xfs_repair -f &>> $seqres.full || \ > _fail "xfs_repair of metadump failed" > diff --git a/tests/xfs/336 b/tests/xfs/336 > index d7a074d9..43b3790c 100755 > --- a/tests/xfs/336 > +++ b/tests/xfs/336 > @@ -62,7 +62,7 @@ _scratch_cycle_mount > > echo "Create metadump file" > _scratch_unmount > -_scratch_xfs_metadump $metadump_file > +_scratch_xfs_metadump $metadump_file -a > > # Now restore the obfuscated one back and take a look around > echo "Restore metadump" > diff --git a/tests/xfs/432 b/tests/xfs/432 > index 66315b03..dae68fb2 100755 > --- a/tests/xfs/432 > +++ b/tests/xfs/432 > @@ -86,7 +86,7 @@ echo "qualifying extent: $extlen blocks" >> $seqres.full > test -n "$extlen" || _notrun "could not create dir extent > 1000 blocks" > > echo "Try to metadump" > -_scratch_xfs_metadump $metadump_file -w > +_scratch_xfs_metadump $metadump_file -a -o -w > SCRATCH_DEV=$metadump_img _scratch_xfs_mdrestore $metadump_file > > echo "Check restored metadump image" > diff --git a/tests/xfs/503 b/tests/xfs/503 > index f5710ece..8805632d 100755 > --- a/tests/xfs/503 > +++ b/tests/xfs/503 > @@ -46,7 +46,7 @@ metadump_file_ag=${metadump_file}.ag > copy_file=$testdir/copy.img > > echo metadump > -_scratch_xfs_metadump $metadump_file >> $seqres.full > +_scratch_xfs_metadump $metadump_file -a -o >> $seqres.full > > echo metadump a > _scratch_xfs_metadump $metadump_file_a -a >> $seqres.full > -- > 2.43.0 > > ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/5] common/xfs: Do not append -a and -o options to metadump 2024-01-02 18:10 ` Darrick J. Wong @ 2024-01-05 6:54 ` Chandan Babu R 2024-01-06 17:10 ` Darrick J. Wong 0 siblings, 1 reply; 16+ messages in thread From: Chandan Babu R @ 2024-01-05 6:54 UTC (permalink / raw) To: Darrick J. Wong; +Cc: fstests, linux-xfs, zlang On Tue, Jan 02, 2024 at 10:10:29 AM -0800, Darrick J. Wong wrote: > On Tue, Jan 02, 2024 at 02:13:48PM +0530, Chandan Babu R wrote: >> xfs/253 requires the metadump to be obfuscated. However _xfs_metadump() would >> append the '-o' option causing the metadump to be unobfuscated. >> >> This commit fixes the bug by modifying _xfs_metadump() to no longer append any >> metadump options. The direct/indirect callers of this function now pass the >> required options explicitly. >> >> Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> >> --- >> common/populate | 2 +- >> common/xfs | 7 +++---- >> tests/xfs/291 | 2 +- >> tests/xfs/336 | 2 +- >> tests/xfs/432 | 2 +- >> tests/xfs/503 | 2 +- > > Hmm. Shouldn't "-a -o" be lowered into xfs/168? It generates a > metadump if a post-shrinkfs repair fails and someone needs to debug the > resulting breakage. Sorry, I can't find xfs_metadump being directly/indirectly executed by xfs/168. The test invokes _scratch_xfs_repair() and that in turn executes xfs_repair on the scratch filesystem. On failure, _fail() is invoked which causes the script to exit after printing some messages on the terminal. However, _check_xfs_filesystem() can generate a metadump and this patch appends both '-a' and '-o' options to all instances of _xfs_metadump() command lines inside _check_xfs_filesystem(). > > I think that in general, tests should be using -a (copy entire fs > blocks) and -o (do not obfuscate) to reduce the amount of processing > that fstests has to do; and to make it easy for developers to examine > the fs metadata. > > (Also given the number of bugs that we keep finding in the "zero unused > parts of blocks" code, I almost always use -a to reduce the number of > pieces that can fail.) > > Obviously that does not apply to tests that are exercising metadump > itself. > > --D > >> 6 files changed, 8 insertions(+), 9 deletions(-) >> >> diff --git a/common/populate b/common/populate >> index 3d233073..cfbfd88a 100644 >> --- a/common/populate >> +++ b/common/populate >> @@ -55,7 +55,7 @@ __populate_fail() { >> case "$FSTYP" in >> xfs) >> _scratch_unmount >> - _scratch_xfs_metadump "$metadump" >> + _scratch_xfs_metadump "$metadump" -a -o >> ;; >> ext4) >> _scratch_unmount >> diff --git a/common/xfs b/common/xfs >> index f53b33fc..38094828 100644 >> --- a/common/xfs >> +++ b/common/xfs >> @@ -667,7 +667,6 @@ _xfs_metadump() { >> local compressopt="$4" >> shift; shift; shift; shift >> local options="$@" >> - test -z "$options" && options="-a -o" >> >> if [ "$logdev" != "none" ]; then >> options="$options -l $logdev" >> @@ -855,7 +854,7 @@ _check_xfs_filesystem() >> if [ "$ok" -ne 1 ] && [ "$DUMP_CORRUPT_FS" = "1" ]; then >> local flatdev="$(basename "$device")" >> _xfs_metadump "$seqres.$flatdev.check.md" "$device" "$logdev" \ >> - compress >> $seqres.full >> + compress -a -o >> $seqres.full >> fi >> >> # Optionally test the index rebuilding behavior. >> @@ -888,7 +887,7 @@ _check_xfs_filesystem() >> if [ "$rebuild_ok" -ne 1 ] && [ "$DUMP_CORRUPT_FS" = "1" ]; then >> local flatdev="$(basename "$device")" >> _xfs_metadump "$seqres.$flatdev.rebuild.md" "$device" \ >> - "$logdev" compress >> $seqres.full >> + "$logdev" compress -a -o >> $seqres.full >> fi >> fi >> >> @@ -972,7 +971,7 @@ _check_xfs_filesystem() >> if [ "$orebuild_ok" -ne 1 ] && [ "$DUMP_CORRUPT_FS" = "1" ]; then >> local flatdev="$(basename "$device")" >> _xfs_metadump "$seqres.$flatdev.orebuild.md" "$device" \ >> - "$logdev" compress >> $seqres.full >> + "$logdev" compress -a -o >> $seqres.full >> fi >> fi >> >> diff --git a/tests/xfs/291 b/tests/xfs/291 >> index 600dcb2e..54448497 100755 >> --- a/tests/xfs/291 >> +++ b/tests/xfs/291 >> @@ -92,7 +92,7 @@ _scratch_xfs_check >> $seqres.full 2>&1 || _fail "xfs_check failed" >> >> # Yes they can! Now... >> # Can xfs_metadump cope with this monster? >> -_scratch_xfs_metadump $tmp.metadump || _fail "xfs_metadump failed" >> +_scratch_xfs_metadump $tmp.metadump -a -o || _fail "xfs_metadump failed" >> SCRATCH_DEV=$tmp.img _scratch_xfs_mdrestore $tmp.metadump || _fail "xfs_mdrestore failed" >> SCRATCH_DEV=$tmp.img _scratch_xfs_repair -f &>> $seqres.full || \ >> _fail "xfs_repair of metadump failed" >> diff --git a/tests/xfs/336 b/tests/xfs/336 >> index d7a074d9..43b3790c 100755 >> --- a/tests/xfs/336 >> +++ b/tests/xfs/336 >> @@ -62,7 +62,7 @@ _scratch_cycle_mount >> >> echo "Create metadump file" >> _scratch_unmount >> -_scratch_xfs_metadump $metadump_file >> +_scratch_xfs_metadump $metadump_file -a >> >> # Now restore the obfuscated one back and take a look around >> echo "Restore metadump" >> diff --git a/tests/xfs/432 b/tests/xfs/432 >> index 66315b03..dae68fb2 100755 >> --- a/tests/xfs/432 >> +++ b/tests/xfs/432 >> @@ -86,7 +86,7 @@ echo "qualifying extent: $extlen blocks" >> $seqres.full >> test -n "$extlen" || _notrun "could not create dir extent > 1000 blocks" >> >> echo "Try to metadump" >> -_scratch_xfs_metadump $metadump_file -w >> +_scratch_xfs_metadump $metadump_file -a -o -w >> SCRATCH_DEV=$metadump_img _scratch_xfs_mdrestore $metadump_file >> >> echo "Check restored metadump image" >> diff --git a/tests/xfs/503 b/tests/xfs/503 >> index f5710ece..8805632d 100755 >> --- a/tests/xfs/503 >> +++ b/tests/xfs/503 >> @@ -46,7 +46,7 @@ metadump_file_ag=${metadump_file}.ag >> copy_file=$testdir/copy.img >> >> echo metadump >> -_scratch_xfs_metadump $metadump_file >> $seqres.full >> +_scratch_xfs_metadump $metadump_file -a -o >> $seqres.full >> >> echo metadump a >> _scratch_xfs_metadump $metadump_file_a -a >> $seqres.full >> -- >> 2.43.0 >> >> -- Chandan ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/5] common/xfs: Do not append -a and -o options to metadump 2024-01-05 6:54 ` Chandan Babu R @ 2024-01-06 17:10 ` Darrick J. Wong 0 siblings, 0 replies; 16+ messages in thread From: Darrick J. Wong @ 2024-01-06 17:10 UTC (permalink / raw) To: Chandan Babu R; +Cc: fstests, linux-xfs, zlang On Fri, Jan 05, 2024 at 12:24:41PM +0530, Chandan Babu R wrote: > On Tue, Jan 02, 2024 at 10:10:29 AM -0800, Darrick J. Wong wrote: > > On Tue, Jan 02, 2024 at 02:13:48PM +0530, Chandan Babu R wrote: > >> xfs/253 requires the metadump to be obfuscated. However _xfs_metadump() would > >> append the '-o' option causing the metadump to be unobfuscated. > >> > >> This commit fixes the bug by modifying _xfs_metadump() to no longer append any > >> metadump options. The direct/indirect callers of this function now pass the > >> required options explicitly. > >> > >> Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> > >> --- > >> common/populate | 2 +- > >> common/xfs | 7 +++---- > >> tests/xfs/291 | 2 +- > >> tests/xfs/336 | 2 +- > >> tests/xfs/432 | 2 +- > >> tests/xfs/503 | 2 +- > > > > Hmm. Shouldn't "-a -o" be lowered into xfs/168? It generates a > > metadump if a post-shrinkfs repair fails and someone needs to debug the > > resulting breakage. > > Sorry, I can't find xfs_metadump being directly/indirectly executed by > xfs/168. The test invokes _scratch_xfs_repair() and that in turn executes > xfs_repair on the scratch filesystem. On failure, _fail() is invoked which > causes the script to exit after printing some messages on the terminal. Oops, heh, I forgot that I had a debugging patch that adds metadumping on failure in that test. Please ignore my stupid message. :( > However, _check_xfs_filesystem() can generate a metadump and this patch > appends both '-a' and '-o' options to all instances of _xfs_metadump() command > lines inside _check_xfs_filesystem(). Ok, good. :) Reviewed-by: Darrick J. Wong <djwong@kernel.org> --D > > > > I think that in general, tests should be using -a (copy entire fs > > blocks) and -o (do not obfuscate) to reduce the amount of processing > > that fstests has to do; and to make it easy for developers to examine > > the fs metadata. > > > > (Also given the number of bugs that we keep finding in the "zero unused > > parts of blocks" code, I almost always use -a to reduce the number of > > pieces that can fail.) > > > > Obviously that does not apply to tests that are exercising metadump > > itself. > > > > --D > > > >> 6 files changed, 8 insertions(+), 9 deletions(-) > >> > >> diff --git a/common/populate b/common/populate > >> index 3d233073..cfbfd88a 100644 > >> --- a/common/populate > >> +++ b/common/populate > >> @@ -55,7 +55,7 @@ __populate_fail() { > >> case "$FSTYP" in > >> xfs) > >> _scratch_unmount > >> - _scratch_xfs_metadump "$metadump" > >> + _scratch_xfs_metadump "$metadump" -a -o > >> ;; > >> ext4) > >> _scratch_unmount > >> diff --git a/common/xfs b/common/xfs > >> index f53b33fc..38094828 100644 > >> --- a/common/xfs > >> +++ b/common/xfs > >> @@ -667,7 +667,6 @@ _xfs_metadump() { > >> local compressopt="$4" > >> shift; shift; shift; shift > >> local options="$@" > >> - test -z "$options" && options="-a -o" > >> > >> if [ "$logdev" != "none" ]; then > >> options="$options -l $logdev" > >> @@ -855,7 +854,7 @@ _check_xfs_filesystem() > >> if [ "$ok" -ne 1 ] && [ "$DUMP_CORRUPT_FS" = "1" ]; then > >> local flatdev="$(basename "$device")" > >> _xfs_metadump "$seqres.$flatdev.check.md" "$device" "$logdev" \ > >> - compress >> $seqres.full > >> + compress -a -o >> $seqres.full > >> fi > >> > >> # Optionally test the index rebuilding behavior. > >> @@ -888,7 +887,7 @@ _check_xfs_filesystem() > >> if [ "$rebuild_ok" -ne 1 ] && [ "$DUMP_CORRUPT_FS" = "1" ]; then > >> local flatdev="$(basename "$device")" > >> _xfs_metadump "$seqres.$flatdev.rebuild.md" "$device" \ > >> - "$logdev" compress >> $seqres.full > >> + "$logdev" compress -a -o >> $seqres.full > >> fi > >> fi > >> > >> @@ -972,7 +971,7 @@ _check_xfs_filesystem() > >> if [ "$orebuild_ok" -ne 1 ] && [ "$DUMP_CORRUPT_FS" = "1" ]; then > >> local flatdev="$(basename "$device")" > >> _xfs_metadump "$seqres.$flatdev.orebuild.md" "$device" \ > >> - "$logdev" compress >> $seqres.full > >> + "$logdev" compress -a -o >> $seqres.full > >> fi > >> fi > >> > >> diff --git a/tests/xfs/291 b/tests/xfs/291 > >> index 600dcb2e..54448497 100755 > >> --- a/tests/xfs/291 > >> +++ b/tests/xfs/291 > >> @@ -92,7 +92,7 @@ _scratch_xfs_check >> $seqres.full 2>&1 || _fail "xfs_check failed" > >> > >> # Yes they can! Now... > >> # Can xfs_metadump cope with this monster? > >> -_scratch_xfs_metadump $tmp.metadump || _fail "xfs_metadump failed" > >> +_scratch_xfs_metadump $tmp.metadump -a -o || _fail "xfs_metadump failed" > >> SCRATCH_DEV=$tmp.img _scratch_xfs_mdrestore $tmp.metadump || _fail "xfs_mdrestore failed" > >> SCRATCH_DEV=$tmp.img _scratch_xfs_repair -f &>> $seqres.full || \ > >> _fail "xfs_repair of metadump failed" > >> diff --git a/tests/xfs/336 b/tests/xfs/336 > >> index d7a074d9..43b3790c 100755 > >> --- a/tests/xfs/336 > >> +++ b/tests/xfs/336 > >> @@ -62,7 +62,7 @@ _scratch_cycle_mount > >> > >> echo "Create metadump file" > >> _scratch_unmount > >> -_scratch_xfs_metadump $metadump_file > >> +_scratch_xfs_metadump $metadump_file -a > >> > >> # Now restore the obfuscated one back and take a look around > >> echo "Restore metadump" > >> diff --git a/tests/xfs/432 b/tests/xfs/432 > >> index 66315b03..dae68fb2 100755 > >> --- a/tests/xfs/432 > >> +++ b/tests/xfs/432 > >> @@ -86,7 +86,7 @@ echo "qualifying extent: $extlen blocks" >> $seqres.full > >> test -n "$extlen" || _notrun "could not create dir extent > 1000 blocks" > >> > >> echo "Try to metadump" > >> -_scratch_xfs_metadump $metadump_file -w > >> +_scratch_xfs_metadump $metadump_file -a -o -w > >> SCRATCH_DEV=$metadump_img _scratch_xfs_mdrestore $metadump_file > >> > >> echo "Check restored metadump image" > >> diff --git a/tests/xfs/503 b/tests/xfs/503 > >> index f5710ece..8805632d 100755 > >> --- a/tests/xfs/503 > >> +++ b/tests/xfs/503 > >> @@ -46,7 +46,7 @@ metadump_file_ag=${metadump_file}.ag > >> copy_file=$testdir/copy.img > >> > >> echo metadump > >> -_scratch_xfs_metadump $metadump_file >> $seqres.full > >> +_scratch_xfs_metadump $metadump_file -a -o >> $seqres.full > >> > >> echo metadump a > >> _scratch_xfs_metadump $metadump_file_a -a >> $seqres.full > >> -- > >> 2.43.0 > >> > >> > > > -- > Chandan > ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 2/5] common/xfs: Add function to detect support for metadump v2 2024-01-02 8:43 [PATCH 0/5] Add support for testing XFS metadump v2 Chandan Babu R 2024-01-02 8:43 ` [PATCH 1/5] common/xfs: Do not append -a and -o options to metadump Chandan Babu R @ 2024-01-02 8:43 ` Chandan Babu R 2024-01-02 18:27 ` Darrick J. Wong 2024-01-02 8:43 ` [PATCH 3/5] _scratch_xfs_mdrestore: Pass scratch log device when applicable Chandan Babu R ` (2 subsequent siblings) 4 siblings, 1 reply; 16+ messages in thread From: Chandan Babu R @ 2024-01-02 8:43 UTC (permalink / raw) To: fstests; +Cc: Chandan Babu R, linux-xfs, djwong, zlang This commit defines a new function to help detect support for metadump v2. Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> --- common/xfs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/common/xfs b/common/xfs index 38094828..558a6bb5 100644 --- a/common/xfs +++ b/common/xfs @@ -698,6 +698,14 @@ _xfs_mdrestore() { $XFS_MDRESTORE_PROG $options "${metadump}" "${device}" } +_scratch_metadump_v2_supported() +{ + $XFS_DB_PROG -c "help metadump" $SCRATCH_DEV | \ + grep -q "Metadump version to be used" + + return $? +} + # Snapshot the metadata on the scratch device _scratch_xfs_metadump() { -- 2.43.0 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 2/5] common/xfs: Add function to detect support for metadump v2 2024-01-02 8:43 ` [PATCH 2/5] common/xfs: Add function to detect support for metadump v2 Chandan Babu R @ 2024-01-02 18:27 ` Darrick J. Wong 2024-01-05 7:03 ` Chandan Babu R 0 siblings, 1 reply; 16+ messages in thread From: Darrick J. Wong @ 2024-01-02 18:27 UTC (permalink / raw) To: Chandan Babu R; +Cc: fstests, linux-xfs, zlang On Tue, Jan 02, 2024 at 02:13:49PM +0530, Chandan Babu R wrote: > This commit defines a new function to help detect support for metadump v2. > > Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> > --- > common/xfs | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/common/xfs b/common/xfs > index 38094828..558a6bb5 100644 > --- a/common/xfs > +++ b/common/xfs > @@ -698,6 +698,14 @@ _xfs_mdrestore() { > $XFS_MDRESTORE_PROG $options "${metadump}" "${device}" > } > > +_scratch_metadump_v2_supported() > +{ > + $XFS_DB_PROG -c "help metadump" $SCRATCH_DEV | \ > + grep -q "Metadump version to be used" > + > + return $? You don't need this; bash will retain the status code of the last process in the pipe as the result value. (Looks good to me otherwise.) --D > +} > + > # Snapshot the metadata on the scratch device > _scratch_xfs_metadump() > { > -- > 2.43.0 > > ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 2/5] common/xfs: Add function to detect support for metadump v2 2024-01-02 18:27 ` Darrick J. Wong @ 2024-01-05 7:03 ` Chandan Babu R 0 siblings, 0 replies; 16+ messages in thread From: Chandan Babu R @ 2024-01-05 7:03 UTC (permalink / raw) To: Darrick J. Wong; +Cc: fstests, linux-xfs, zlang On Tue, Jan 02, 2024 at 10:27:33 AM -0800, Darrick J. Wong wrote: > On Tue, Jan 02, 2024 at 02:13:49PM +0530, Chandan Babu R wrote: >> This commit defines a new function to help detect support for metadump v2. >> >> Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> >> --- >> common/xfs | 8 ++++++++ >> 1 file changed, 8 insertions(+) >> >> diff --git a/common/xfs b/common/xfs >> index 38094828..558a6bb5 100644 >> --- a/common/xfs >> +++ b/common/xfs >> @@ -698,6 +698,14 @@ _xfs_mdrestore() { >> $XFS_MDRESTORE_PROG $options "${metadump}" "${device}" >> } >> >> +_scratch_metadump_v2_supported() >> +{ >> + $XFS_DB_PROG -c "help metadump" $SCRATCH_DEV | \ >> + grep -q "Metadump version to be used" >> + >> + return $? > > You don't need this; bash will retain the status code of the last > process in the pipe as the result value. > > (Looks good to me otherwise.) > Ok. I will fix it up. >> +} >> + >> # Snapshot the metadata on the scratch device >> _scratch_xfs_metadump() >> { >> -- >> 2.43.0 >> >> -- Chandan ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 3/5] _scratch_xfs_mdrestore: Pass scratch log device when applicable 2024-01-02 8:43 [PATCH 0/5] Add support for testing XFS metadump v2 Chandan Babu R 2024-01-02 8:43 ` [PATCH 1/5] common/xfs: Do not append -a and -o options to metadump Chandan Babu R 2024-01-02 8:43 ` [PATCH 2/5] common/xfs: Add function to detect support for metadump v2 Chandan Babu R @ 2024-01-02 8:43 ` Chandan Babu R 2024-01-02 19:11 ` Darrick J. Wong 2024-01-02 8:43 ` [PATCH 4/5] xfs: Add support for testing metadump v2 Chandan Babu R 2024-01-02 8:43 ` [PATCH 5/5] xfs: Check correctness of metadump/mdrestore's ability to work with dirty log Chandan Babu R 4 siblings, 1 reply; 16+ messages in thread From: Chandan Babu R @ 2024-01-02 8:43 UTC (permalink / raw) To: fstests; +Cc: Chandan Babu R, linux-xfs, djwong, zlang Metadump v2 supports dumping contents of an external log device. This commit modifies _scratch_xfs_mdrestore() and _xfs_mdrestore() to be able to restore metadump files which contain data from external log devices. The callers of _scratch_xfs_mdrestore() must set the value of $SCRATCH_LOGDEV only when all of the following conditions are met: 1. Metadump is in v2 format. 2. Metadump has contents dumped from an external log device. Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> --- common/xfs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/common/xfs b/common/xfs index 558a6bb5..248c8361 100644 --- a/common/xfs +++ b/common/xfs @@ -682,7 +682,8 @@ _xfs_metadump() { _xfs_mdrestore() { local metadump="$1" local device="$2" - shift; shift + local logdev="$3" + shift; shift; shift local options="$@" # If we're configured for compressed dumps and there isn't already an @@ -695,6 +696,10 @@ _xfs_mdrestore() { fi test -r "$metadump" || return 1 + if [ "$logdev" != "none" ]; then + options="$options -l $logdev" + fi + $XFS_MDRESTORE_PROG $options "${metadump}" "${device}" } @@ -724,8 +729,18 @@ _scratch_xfs_mdrestore() { local metadump=$1 shift + local logdev=none + local options="$@" - _xfs_mdrestore "$metadump" "$SCRATCH_DEV" "$@" + # $SCRATCH_LOGDEV should have a non-zero length value only when all of + # the following conditions are met. + # 1. Metadump is in v2 format. + # 2. Metadump has contents dumped from an external log device. + if [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ]; then + logdev=$SCRATCH_LOGDEV + fi + + _xfs_mdrestore "$metadump" "$SCRATCH_DEV" "$logdev" "$@" } # Do not use xfs_repair (offline fsck) to rebuild the filesystem -- 2.43.0 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 3/5] _scratch_xfs_mdrestore: Pass scratch log device when applicable 2024-01-02 8:43 ` [PATCH 3/5] _scratch_xfs_mdrestore: Pass scratch log device when applicable Chandan Babu R @ 2024-01-02 19:11 ` Darrick J. Wong 0 siblings, 0 replies; 16+ messages in thread From: Darrick J. Wong @ 2024-01-02 19:11 UTC (permalink / raw) To: Chandan Babu R; +Cc: fstests, linux-xfs, zlang On Tue, Jan 02, 2024 at 02:13:50PM +0530, Chandan Babu R wrote: > Metadump v2 supports dumping contents of an external log device. This commit > modifies _scratch_xfs_mdrestore() and _xfs_mdrestore() to be able to restore > metadump files which contain data from external log devices. > > The callers of _scratch_xfs_mdrestore() must set the value of $SCRATCH_LOGDEV > only when all of the following conditions are met: > 1. Metadump is in v2 format. > 2. Metadump has contents dumped from an external log device. > > Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> Looks very similar to my version, Reviewed-by: Darrick J. Wong <djwong@kernel.org> --D > --- > common/xfs | 19 +++++++++++++++++-- > 1 file changed, 17 insertions(+), 2 deletions(-) > > diff --git a/common/xfs b/common/xfs > index 558a6bb5..248c8361 100644 > --- a/common/xfs > +++ b/common/xfs > @@ -682,7 +682,8 @@ _xfs_metadump() { > _xfs_mdrestore() { > local metadump="$1" > local device="$2" > - shift; shift > + local logdev="$3" > + shift; shift; shift > local options="$@" > > # If we're configured for compressed dumps and there isn't already an > @@ -695,6 +696,10 @@ _xfs_mdrestore() { > fi > test -r "$metadump" || return 1 > > + if [ "$logdev" != "none" ]; then > + options="$options -l $logdev" > + fi > + > $XFS_MDRESTORE_PROG $options "${metadump}" "${device}" > } > > @@ -724,8 +729,18 @@ _scratch_xfs_mdrestore() > { > local metadump=$1 > shift > + local logdev=none > + local options="$@" > > - _xfs_mdrestore "$metadump" "$SCRATCH_DEV" "$@" > + # $SCRATCH_LOGDEV should have a non-zero length value only when all of > + # the following conditions are met. > + # 1. Metadump is in v2 format. > + # 2. Metadump has contents dumped from an external log device. > + if [ "$USE_EXTERNAL" = yes -a ! -z "$SCRATCH_LOGDEV" ]; then > + logdev=$SCRATCH_LOGDEV > + fi > + > + _xfs_mdrestore "$metadump" "$SCRATCH_DEV" "$logdev" "$@" > } > > # Do not use xfs_repair (offline fsck) to rebuild the filesystem > -- > 2.43.0 > > ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 4/5] xfs: Add support for testing metadump v2 2024-01-02 8:43 [PATCH 0/5] Add support for testing XFS metadump v2 Chandan Babu R ` (2 preceding siblings ...) 2024-01-02 8:43 ` [PATCH 3/5] _scratch_xfs_mdrestore: Pass scratch log device when applicable Chandan Babu R @ 2024-01-02 8:43 ` Chandan Babu R 2024-01-03 5:57 ` Darrick J. Wong 2024-01-02 8:43 ` [PATCH 5/5] xfs: Check correctness of metadump/mdrestore's ability to work with dirty log Chandan Babu R 4 siblings, 1 reply; 16+ messages in thread From: Chandan Babu R @ 2024-01-02 8:43 UTC (permalink / raw) To: fstests; +Cc: Chandan Babu R, linux-xfs, djwong, zlang This commit adds the ability to test metadump v2 to existing metadump tests. Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> --- tests/xfs/129 | 63 ++++++++++++--- tests/xfs/129.out | 4 +- tests/xfs/234 | 63 ++++++++++++--- tests/xfs/234.out | 4 +- tests/xfs/253 | 195 ++++++++++++++++++++++++++-------------------- tests/xfs/291 | 25 +++++- tests/xfs/432 | 29 +++++-- tests/xfs/432.out | 3 +- tests/xfs/503 | 94 +++++++++++++--------- tests/xfs/503.out | 12 +-- 10 files changed, 326 insertions(+), 166 deletions(-) diff --git a/tests/xfs/129 b/tests/xfs/129 index 6f2ef564..7226d57d 100755 --- a/tests/xfs/129 +++ b/tests/xfs/129 @@ -16,7 +16,11 @@ _cleanup() { cd / _scratch_unmount > /dev/null 2>&1 - rm -rf $tmp.* $testdir $metadump_file $TEST_DIR/image + [[ -n $logdev && $logdev != "none" && $logdev != $SCRATCH_LOGDEV ]] && \ + _destroy_loop_device $logdev + [[ -n $datadev ]] && _destroy_loop_device $datadev + rm -rf $tmp.* $testdir $metadump_file $TEST_DIR/data-image \ + $TEST_DIR/log-image } # Import common functions. @@ -47,18 +51,57 @@ seq 1 2 $((nr_blks - 1)) | while read nr; do $testdir/file2 $((nr * blksz)) $blksz >> $seqres.full done -echo "Create metadump file" _scratch_unmount -_scratch_xfs_metadump $metadump_file -# Now restore the obfuscated one back and take a look around -echo "Restore metadump" -SCRATCH_DEV=$TEST_DIR/image _scratch_xfs_mdrestore $metadump_file -SCRATCH_DEV=$TEST_DIR/image _scratch_mount -SCRATCH_DEV=$TEST_DIR/image _scratch_unmount +max_md_version=1 +_scratch_metadump_v2_supported && max_md_version=2 -echo "Check restored fs" -_check_generic_filesystem $metadump_file +echo "Create metadump file, restore it and check restored fs" +for md_version in $(seq 1 $max_md_version); do + # Determine the version to be passed to metadump/mdrestore + version="" + if [[ $max_md_version == 2 ]]; then + version="-v $md_version" + fi + + _scratch_xfs_metadump $metadump_file $version + + # Now restore the obfuscated one back and take a look around + + # Metadump v2 files can contain contents dumped from an external log + # device. Use a temporary file to hold the log device contents restored + # from such a metadump file. + slogdev=$TEST_DIR/log-image + if [[ -z $version || $version == "-v 1" || -z $SCRATCH_LOGDEV ]]; then + slogdev="" + fi + + SCRATCH_DEV=$TEST_DIR/data-image SCRATCH_LOGDEV=$slogdev \ + _scratch_xfs_mdrestore $metadump_file + + datadev=$(_create_loop_device $TEST_DIR/data-image) + + logdev=${SCRATCH_LOGDEV} + if [[ -s $TEST_DIR/log-image ]]; then + logdev=$(_create_loop_device $TEST_DIR/log-image) + fi + + SCRATCH_DEV=$datadev SCRATCH_LOGDEV=$logdev _scratch_mount + SCRATCH_DEV=$datadev SCRATCH_LOGDEV=$logdev _scratch_unmount + + [[ -z $logdev ]] && logdev=none + _check_xfs_filesystem $datadev $logdev none + + if [[ -s $TEST_DIR/log-image ]]; then + _destroy_loop_device $logdev + logdev="" + rm -f $TEST_DIR/log-image + fi + + _destroy_loop_device $datadev + datadev="" + rm -f $TEST_DIR/data-image +done # success, all done status=0 diff --git a/tests/xfs/129.out b/tests/xfs/129.out index da6f43fd..0f24c431 100644 --- a/tests/xfs/129.out +++ b/tests/xfs/129.out @@ -1,6 +1,4 @@ QA output created by 129 Create the original file blocks Reflink every other block -Create metadump file -Restore metadump -Check restored fs +Create metadump file, restore it and check restored fs diff --git a/tests/xfs/234 b/tests/xfs/234 index 57d447c0..2f6b1f65 100755 --- a/tests/xfs/234 +++ b/tests/xfs/234 @@ -16,7 +16,11 @@ _cleanup() { cd / _scratch_unmount > /dev/null 2>&1 - rm -rf $tmp.* $metadump_file $TEST_DIR/image + [[ -n $logdev && $logdev != "none" && $logdev != $SCRATCH_LOGDEV ]] && \ + _destroy_loop_device $logdev + [[ -n $datadev ]] && _destroy_loop_device $datadev + rm -rf $tmp.* $testdir $metadump_file $TEST_DIR/image \ + $TEST_DIR/log-image } # Import common functions. @@ -47,18 +51,57 @@ seq 1 2 $((nr_blks - 1)) | while read nr; do $XFS_IO_PROG -c "fpunch $((nr * blksz)) $blksz" $testdir/file1 >> $seqres.full done -echo "Create metadump file" _scratch_unmount -_scratch_xfs_metadump $metadump_file -# Now restore the obfuscated one back and take a look around -echo "Restore metadump" -SCRATCH_DEV=$TEST_DIR/image _scratch_xfs_mdrestore $metadump_file -SCRATCH_DEV=$TEST_DIR/image _scratch_mount -SCRATCH_DEV=$TEST_DIR/image _scratch_unmount +max_md_version=1 +_scratch_metadump_v2_supported && max_md_version=2 -echo "Check restored fs" -_check_generic_filesystem $metadump_file +echo "Create metadump file, restore it and check restored fs" +for md_version in $(seq 1 $max_md_version); do + # Determine the version to be passed to metadump/mdrestore + version="" + if [[ $max_md_version == 2 ]]; then + version="-v $md_version" + fi + + _scratch_xfs_metadump $metadump_file $version + + # Now restore the obfuscated one back and take a look around + + # Metadump v2 files can contain contents dumped from an external log + # device. Use a temporary file to hold the log device contents restored + # from such a metadump file. + slogdev=$TEST_DIR/log-image + if [[ -z $version || $version == "-v 1" || -z $SCRATCH_LOGDEV ]]; then + slogdev="" + fi + + SCRATCH_DEV=$TEST_DIR/data-image SCRATCH_LOGDEV=$slogdev \ + _scratch_xfs_mdrestore $metadump_file + + datadev=$(_create_loop_device $TEST_DIR/data-image) + + logdev=${SCRATCH_LOGDEV} + if [[ -s $TEST_DIR/log-image ]]; then + logdev=$(_create_loop_device $TEST_DIR/log-image) + fi + + SCRATCH_DEV=$datadev SCRATCH_LOGDEV=$logdev _scratch_mount + SCRATCH_DEV=$datadev SCRATCH_LOGDEV=$logdev _scratch_unmount + + [[ -z $logdev ]] && logdev=none + _check_xfs_filesystem $datadev $logdev none + + if [[ -s $TEST_DIR/log-image ]]; then + _destroy_loop_device $logdev + logdev="" + rm -f $TEST_DIR/log-image + fi + + _destroy_loop_device $datadev + datadev="" + rm -f $TEST_DIR/data-image +done # success, all done status=0 diff --git a/tests/xfs/234.out b/tests/xfs/234.out index 463d4660..fc2ddd77 100644 --- a/tests/xfs/234.out +++ b/tests/xfs/234.out @@ -1,6 +1,4 @@ QA output created by 234 Create the original file blocks Punch every other block -Create metadump file -Restore metadump -Check restored fs +Create metadump file, restore it and check restored fs diff --git a/tests/xfs/253 b/tests/xfs/253 index ce902477..b69a1faf 100755 --- a/tests/xfs/253 +++ b/tests/xfs/253 @@ -52,114 +52,139 @@ function create_file() { echo "Disciplyne of silence is goed." _scratch_mkfs >/dev/null 2>&1 -_scratch_mount -# Initialize and mount the scratch filesystem, then create a bunch -# of files that exercise the original problem. -# -# The problem arose when a file name produced a hash that contained -# either 0x00 (string terminator) or 0x27 ('/' character) in a -# spot used to determine a character in an obfuscated name. This -# occurred in one of 5 spots at the end of the name, at position -# (last-4), (last-3), (last-2), (last-1), or (last). +max_md_version=1 +_scratch_metadump_v2_supported && max_md_version=2 -rm -f "${METADUMP_FILE}" +for md_version in $(seq 1 $max_md_version); do + version="" + if [[ $max_md_version == 2 ]]; then + version="-v $md_version" + fi -mkdir -p "${OUTPUT_DIR}" + cd $here -cd "${OUTPUT_DIR}" -# Start out with some basic test files -create_file 'abcde' # hash 0x1c58f263 ("normal" name) + # Initialize and mount the scratch filesystem, then create a bunch of + # files that exercise the original problem. + # + # The problem arose when a file name produced a hash that contained + # either 0x00 (string terminator) or 0x27 ('/' character) in a spot used + # to determine a character in an obfuscated name. This occurred in one + # of 5 spots at the end of the name, at position (last-4), (last-3), + # (last-2), (last-1), or (last). -create_file 'f' # hash 0x00000066 (1-byte name) -create_file 'gh' # hash 0x000033e8 (2-byte name) -create_file 'ijk' # hash 0x001a756b (3-byte name) -create_file 'lmno' # hash 0x0d9b776f (4-byte name) -create_file 'pqrstu' # hash 0x1e5cf9f2 (6-byte name) -create_file 'abcdefghijklmnopqrstuvwxyz' # a most remarkable word (0x55004ae3) + _scratch_unmount >> $seqres.full 2>&1 -# Create a short directory name; it won't be obfuscated. Populate -# it with some longer named-files. The first part of the obfuscated -# filenames should use printable characters. -mkdir foo -create_file 'foo/longer_file_name_1' # hash 0xe83634ec -create_file 'foo/longer_file_name_2' # hash 0xe83634ef -create_file 'foo/longer_file_name_3' # hash 0xe83634ee + _scratch_mkfs >> $seqres.full 2>&1 -# Now create a longer directory name -mkdir longer_directory_name -create_file 'longer_directory_name/f1' # directory hash 0x9c7accdd -create_file 'longer_directory_name/f2' # filenames are short, no hash -create_file 'longer_directory_name/f3' + _scratch_mount -# The problematic name originally reported by Arkadiusz Miśkiewicz + rm -f "${METADUMP_FILE}" -create_file 'R\323\257NE' # hash 0x3a4be740, forces (last-3) = 0x2f + mkdir -p "${OUTPUT_DIR}" -# Other names that force a 0x00 byte -create_file 'Pbcde' # hash 0x0c58f260, forces (last-4) = 0x00 -create_file 'a\001\203de' # hash 0x1000f263, forces (last-3) = 0x00 -create_file 'ab\001\344e' # hash 0x1c403263, forces (last-2) = 0x00 -create_file 'abc\200e' # hash 0x1c588063, forces (last-1) = 0x00 -create_file 'abcd\006' # hash 0x1c58f200, forces (last) = 0x00 + cd "${OUTPUT_DIR}" + # Start out with some basic test files + create_file 'abcde' # hash 0x1c58f263 ("normal" name) -# Names that force a 0x2f byte; note no name will ever force (last-4) = 0x2f -create_file 'a.\343de' # hash 0x15f8f263 forces (last-3) = 0x00 -create_file 'ac\257de' # hash 0x1c4bf263, forces (last-2) = 0x2f -create_file 'abe\257e' # hash 0x1c5917e3, forces (last-1) = 0x2f -create_file 'abcd)' # hash 0x1c58f22f, forces (last) = 0x2f + create_file 'f' # hash 0x00000066 (1-byte name) + create_file 'gh' # hash 0x000033e8 (2-byte name) + create_file 'ijk' # hash 0x001a756b (3-byte name) + create_file 'lmno' # hash 0x0d9b776f (4-byte name) + create_file 'pqrstu' # hash 0x1e5cf9f2 (6-byte name) + create_file 'abcdefghijklmnopqrstuvwxyz' # a most remarkable word (0x55004ae3) -# The following names are possible results of obfuscating the name -# "abcde". Previously, xfs_metadump could get hung up trying to -# obfuscate names when too many of the same length had the same hash -# value. -create_file '!bcda' # essentially a dup of 'abcde' -create_file 'Abcdg' # essentially a dup of 'abcde' -create_file 'qbcdd' # essentially a dup of 'abcde' -create_file '1bcd`' # essentially a dup of 'abcde' -create_file 'Qbcdf' # essentially a dup of 'abcde' -create_file '\001bcdc' # essentially a dup of 'abcde' -create_file 'Qbce\346' # essentially a dup of 'abcde' -create_file 'abb\344e' # essentially a dup of 'abcde' + # Create a short directory name; it won't be obfuscated. Populate it + # with some longer named-files. The first part of the obfuscated + # filenames should use printable characters. + mkdir foo + create_file 'foo/longer_file_name_1' # hash 0xe83634ec + create_file 'foo/longer_file_name_2' # hash 0xe83634ef + create_file 'foo/longer_file_name_3' # hash 0xe83634ee -# The orphanage directory (lost+found) should not be obfuscated. -# Files thereunder can be, but not if their name is the same as -# their inode number. Test this. + # Now create a longer directory name + mkdir longer_directory_name + create_file 'longer_directory_name/f1' # directory hash 0x9c7accdd + create_file 'longer_directory_name/f2' # filenames are short, no hash + create_file 'longer_directory_name/f3' -cd "${SCRATCH_MNT}" -mkdir -p "${ORPHANAGE}" + # The problematic name originally reported by Arkadiusz Miśkiewicz -TEMP_ORPHAN="${ORPHANAGE}/__orphan__" -NON_ORPHAN="${ORPHANAGE}/__should_be_obfuscated__" + create_file 'R\323\257NE' # hash 0x3a4be740, forces (last-3) = 0x2f -# Create an orphan, whose name is the same as its inode number -touch "${TEMP_ORPHAN}" -INUM=$(ls -i "${TEMP_ORPHAN}" | awk '{ print $1; }') -ORPHAN="${SCRATCH_MNT}/lost+found/${INUM}" -mv "${TEMP_ORPHAN}" "${ORPHAN}" + # Other names that force a 0x00 byte + create_file 'Pbcde' # hash 0x0c58f260, forces (last-4) = 0x00 + create_file 'a\001\203de' # hash 0x1000f263, forces (last-3) = 0x00 + create_file 'ab\001\344e' # hash 0x1c403263, forces (last-2) = 0x00 + create_file 'abc\200e' # hash 0x1c588063, forces (last-1) = 0x00 + create_file 'abcd\006' # hash 0x1c58f200, forces (last) = 0x00 -# Create non-orphan, which *should* be obfuscated -touch "${NON_ORPHAN}" + # Names that force a 0x2f byte; note no name will ever force (last-4) = 0x2f + create_file 'a.\343de' # hash 0x15f8f263 forces (last-3) = 0x00 + create_file 'ac\257de' # hash 0x1c4bf263, forces (last-2) = 0x2f + create_file 'abe\257e' # hash 0x1c5917e3, forces (last-1) = 0x2f + create_file 'abcd)' # hash 0x1c58f22f, forces (last) = 0x2f -# Get a listing of all the files before obfuscation -ls -R >> $seqres.full -ls -R | od -c >> $seqres.full + # The following names are possible results of obfuscating the name + # "abcde". Previously, xfs_metadump could get hung up trying to + # obfuscate names when too many of the same length had the same hash + # value. + create_file '!bcda' # essentially a dup of 'abcde' + create_file 'Abcdg' # essentially a dup of 'abcde' + create_file 'qbcdd' # essentially a dup of 'abcde' + create_file '1bcd`' # essentially a dup of 'abcde' + create_file 'Qbcdf' # essentially a dup of 'abcde' + create_file '\001bcdc' # essentially a dup of 'abcde' + create_file 'Qbce\346' # essentially a dup of 'abcde' + create_file 'abb\344e' # essentially a dup of 'abcde' -# Now unmount the filesystem and create a metadump file -cd $here + # The orphanage directory (lost+found) should not be obfuscated. + # Files thereunder can be, but not if their name is the same as + # their inode number. Test this. -_scratch_unmount -_scratch_xfs_metadump $METADUMP_FILE + cd "${SCRATCH_MNT}" + mkdir -p "${ORPHANAGE}" -# Now restore the obfuscated one back and take a look around -_scratch_xfs_mdrestore "$METADUMP_FILE" + TEMP_ORPHAN="${ORPHANAGE}/__orphan__" + NON_ORPHAN="${ORPHANAGE}/__should_be_obfuscated__" -_scratch_mount + # Create an orphan, whose name is the same as its inode number + touch "${TEMP_ORPHAN}" + INUM=$(ls -i "${TEMP_ORPHAN}" | awk '{ print $1; }') + ORPHAN="${SCRATCH_MNT}/lost+found/${INUM}" + mv "${TEMP_ORPHAN}" "${ORPHAN}" -# Get a listing of all the files after obfuscation -cd ${SCRATCH_MNT} -ls -R >> $seqres.full -ls -R | od -c >> $seqres.full + # Create non-orphan, which *should* be obfuscated + touch "${NON_ORPHAN}" + + # Get a listing of all the files before obfuscation + ls -R >> $seqres.full + ls -R | od -c >> $seqres.full + + # Now unmount the filesystem and create a metadump file + cd $here + + _scratch_unmount + + _scratch_xfs_metadump $METADUMP_FILE $version + + # Now restore the obfuscated one back and take a look around + + slogdev=$SCRATCH_LOGDEV + if [[ -z $version || $version == "-v 1" ]]; then + slogdev="" + fi + + SCRATCH_LOGDEV=${slogdev} _scratch_xfs_mdrestore "$METADUMP_FILE" + + _scratch_mount + + cd "${SCRATCH_MNT}" + + # Get a listing of all the files after obfuscation + ls -R >> $seqres.full + ls -R | od -c >> $seqres.full +done # Finally, re-make the filesystem since to ensure we don't # leave a directory with duplicate entries lying around. diff --git a/tests/xfs/291 b/tests/xfs/291 index 54448497..33193eb7 100755 --- a/tests/xfs/291 +++ b/tests/xfs/291 @@ -92,10 +92,27 @@ _scratch_xfs_check >> $seqres.full 2>&1 || _fail "xfs_check failed" # Yes they can! Now... # Can xfs_metadump cope with this monster? -_scratch_xfs_metadump $tmp.metadump -a -o || _fail "xfs_metadump failed" -SCRATCH_DEV=$tmp.img _scratch_xfs_mdrestore $tmp.metadump || _fail "xfs_mdrestore failed" -SCRATCH_DEV=$tmp.img _scratch_xfs_repair -f &>> $seqres.full || \ - _fail "xfs_repair of metadump failed" +max_md_version=1 +_scratch_metadump_v2_supported && max_md_version=2 + +for md_version in $(seq 1 $max_md_version); do + version="" + if [[ $max_md_version == 2 ]]; then + version="-v $md_version" + fi + + _scratch_xfs_metadump $tmp.metadump -a -o $version || \ + _fail "xfs_metadump failed" + + slogdev=$SCRATCH_LOGDEV + if [[ -z $version || $version == "-v 1" ]]; then + slogdev="" + fi + SCRATCH_DEV=$tmp.img SCRATCH_LOGDEV=$slogdev _scratch_xfs_mdrestore \ + $tmp.metadump || _fail "xfs_mdrestore failed" + SCRATCH_DEV=$tmp.img _scratch_xfs_repair -f &>> $seqres.full || \ + _fail "xfs_repair of metadump failed" +done # Yes it can; success, all done status=0 diff --git a/tests/xfs/432 b/tests/xfs/432 index dae68fb2..a215d3ce 100755 --- a/tests/xfs/432 +++ b/tests/xfs/432 @@ -50,6 +50,7 @@ echo "Format and mount" # block. 8187 hashes/dablk / 248 dirents/dirblock = ~33 dirblocks per # dablock. 33 dirblocks * 64k mean that we can expand a directory by # 2112k before we have to allocate another da btree block. + _scratch_mkfs -b size=1k -n size=64k > "$seqres.full" 2>&1 _scratch_mount >> "$seqres.full" 2>&1 @@ -85,13 +86,29 @@ extlen="$(check_for_long_extent $dir_inum)" echo "qualifying extent: $extlen blocks" >> $seqres.full test -n "$extlen" || _notrun "could not create dir extent > 1000 blocks" -echo "Try to metadump" -_scratch_xfs_metadump $metadump_file -a -o -w -SCRATCH_DEV=$metadump_img _scratch_xfs_mdrestore $metadump_file +echo "Try to metadump, restore and check restored metadump image" +max_md_version=1 +_scratch_metadump_v2_supported && max_md_version=2 -echo "Check restored metadump image" -SCRATCH_DEV=$metadump_img _scratch_xfs_repair -n &>> $seqres.full || \ - echo "xfs_repair on restored fs returned $?" +for md_version in $(seq 1 $max_md_version); do + version="" + if [[ $max_md_version == 2 ]]; then + version="-v $md_version" + fi + + _scratch_xfs_metadump $metadump_file -a -o -w $version + + slogdev=$SCRATCH_LOGDEV + if [[ -z $version || $version == "-v 1" ]]; then + slogdev="" + fi + + SCRATCH_DEV=$metadump_img SCRATCH_LOGDEV=$slogdev \ + _scratch_xfs_mdrestore $metadump_file + + SCRATCH_DEV=$metadump_img _scratch_xfs_repair -n &>> $seqres.full || \ + echo "xfs_repair on restored fs returned $?" +done # success, all done status=0 diff --git a/tests/xfs/432.out b/tests/xfs/432.out index 1f135d16..37bac902 100644 --- a/tests/xfs/432.out +++ b/tests/xfs/432.out @@ -2,5 +2,4 @@ QA output created by 432 Format and mount Create huge dir Check for > 1000 block extent? -Try to metadump -Check restored metadump image +Try to metadump, restore and check restored metadump image diff --git a/tests/xfs/503 b/tests/xfs/503 index 8805632d..a1479eb6 100755 --- a/tests/xfs/503 +++ b/tests/xfs/503 @@ -29,6 +29,7 @@ testdir=$TEST_DIR/test-$seq _supported_fs xfs _require_command "$XFS_MDRESTORE_PROG" "xfs_mdrestore" +_require_loop _require_xfs_copy _require_scratch_nocheck _require_populate_commands @@ -40,22 +41,69 @@ _scratch_populate_cached nofill > $seqres.full 2>&1 mkdir -p $testdir metadump_file=$testdir/scratch.md -metadump_file_a=${metadump_file}.a -metadump_file_g=${metadump_file}.g -metadump_file_ag=${metadump_file}.ag copy_file=$testdir/copy.img -echo metadump -_scratch_xfs_metadump $metadump_file -a -o >> $seqres.full +check_restored_metadump_image() +{ + local image=$1 -echo metadump a -_scratch_xfs_metadump $metadump_file_a -a >> $seqres.full + loop_dev=$(_create_loop_device $image) + SCRATCH_DEV=$loop_dev _scratch_mount + SCRATCH_DEV=$loop_dev _check_scratch_fs + SCRATCH_DEV=$loop_dev _scratch_unmount + _destroy_loop_device $loop_dev +} -echo metadump g -_scratch_xfs_metadump $metadump_file_g -g >> $seqres.full +max_md_version=1 +_scratch_metadump_v2_supported && max_md_version=2 -echo metadump ag -_scratch_xfs_metadump $metadump_file_ag -a -g >> $seqres.full +echo "metadump and mdrestore" +for md_version in $(seq 1 $max_md_version); do + version="" + if [[ $max_md_version == 2 ]]; then + version="-v $md_version" + fi + + _scratch_xfs_metadump $metadump_file -a -o $version >> $seqres.full + SCRATCH_DEV=$TEST_DIR/image _scratch_xfs_mdrestore $metadump_file + check_restored_metadump_image $TEST_DIR/image +done + +echo "metadump a and mdrestore" +for md_version in $(seq 1 $max_md_version); do + version="" + if [[ $max_md_version == 2 ]]; then + version="-v $md_version" + fi + + _scratch_xfs_metadump $metadump_file -a $version >> $seqres.full + SCRATCH_DEV=$TEST_DIR/image _scratch_xfs_mdrestore $metadump_file + check_restored_metadump_image $TEST_DIR/image +done + +echo "metadump g and mdrestore" +for md_version in $(seq 1 $max_md_version); do + version="" + if [[ $max_md_version == 2 ]]; then + version="-v $md_version" + fi + + _scratch_xfs_metadump $metadump_file -g $version >> $seqres.full + SCRATCH_DEV=$TEST_DIR/image _scratch_xfs_mdrestore $metadump_file + check_restored_metadump_image $TEST_DIR/image +done + +echo "metadump ag and mdrestore" +for md_version in $(seq 1 $max_md_version); do + version="" + if [[ $max_md_version == 2 ]]; then + version="-v $md_version" + fi + + _scratch_xfs_metadump $metadump_file -a -g $version >> $seqres.full + SCRATCH_DEV=$TEST_DIR/image _scratch_xfs_mdrestore $metadump_file + check_restored_metadump_image $TEST_DIR/image +done echo copy $XFS_COPY_PROG $SCRATCH_DEV $copy_file >> $seqres.full @@ -67,30 +115,6 @@ _scratch_mount _check_scratch_fs _scratch_unmount -echo mdrestore -_scratch_xfs_mdrestore $metadump_file -_scratch_mount -_check_scratch_fs -_scratch_unmount - -echo mdrestore a -_scratch_xfs_mdrestore $metadump_file_a -_scratch_mount -_check_scratch_fs -_scratch_unmount - -echo mdrestore g -_scratch_xfs_mdrestore $metadump_file_g -_scratch_mount -_check_scratch_fs -_scratch_unmount - -echo mdrestore ag -_scratch_xfs_mdrestore $metadump_file_ag -_scratch_mount -_check_scratch_fs -_scratch_unmount - # success, all done status=0 exit diff --git a/tests/xfs/503.out b/tests/xfs/503.out index 8ef31dbe..496f2516 100644 --- a/tests/xfs/503.out +++ b/tests/xfs/503.out @@ -1,12 +1,8 @@ QA output created by 503 Format and populate -metadump -metadump a -metadump g -metadump ag +metadump and mdrestore +metadump a and mdrestore +metadump g and mdrestore +metadump ag and mdrestore copy recopy -mdrestore -mdrestore a -mdrestore g -mdrestore ag -- 2.43.0 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 4/5] xfs: Add support for testing metadump v2 2024-01-02 8:43 ` [PATCH 4/5] xfs: Add support for testing metadump v2 Chandan Babu R @ 2024-01-03 5:57 ` Darrick J. Wong 2024-01-05 7:04 ` Chandan Babu R 0 siblings, 1 reply; 16+ messages in thread From: Darrick J. Wong @ 2024-01-03 5:57 UTC (permalink / raw) To: Chandan Babu R; +Cc: fstests, linux-xfs, zlang On Tue, Jan 02, 2024 at 02:13:51PM +0530, Chandan Babu R wrote: > This commit adds the ability to test metadump v2 to existing metadump tests. > > Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> > --- > tests/xfs/129 | 63 ++++++++++++--- > tests/xfs/129.out | 4 +- > tests/xfs/234 | 63 ++++++++++++--- > tests/xfs/234.out | 4 +- > tests/xfs/253 | 195 ++++++++++++++++++++++++++-------------------- > tests/xfs/291 | 25 +++++- > tests/xfs/432 | 29 +++++-- > tests/xfs/432.out | 3 +- > tests/xfs/503 | 94 +++++++++++++--------- > tests/xfs/503.out | 12 +-- > 10 files changed, 326 insertions(+), 166 deletions(-) > > diff --git a/tests/xfs/129 b/tests/xfs/129 > index 6f2ef564..7226d57d 100755 > --- a/tests/xfs/129 > +++ b/tests/xfs/129 > @@ -16,7 +16,11 @@ _cleanup() > { > cd / > _scratch_unmount > /dev/null 2>&1 > - rm -rf $tmp.* $testdir $metadump_file $TEST_DIR/image > + [[ -n $logdev && $logdev != "none" && $logdev != $SCRATCH_LOGDEV ]] && \ > + _destroy_loop_device $logdev > + [[ -n $datadev ]] && _destroy_loop_device $datadev > + rm -rf $tmp.* $testdir $metadump_file $TEST_DIR/data-image \ > + $TEST_DIR/log-image > } > > # Import common functions. > @@ -47,18 +51,57 @@ seq 1 2 $((nr_blks - 1)) | while read nr; do > $testdir/file2 $((nr * blksz)) $blksz >> $seqres.full > done > > -echo "Create metadump file" > _scratch_unmount > -_scratch_xfs_metadump $metadump_file > > -# Now restore the obfuscated one back and take a look around > -echo "Restore metadump" > -SCRATCH_DEV=$TEST_DIR/image _scratch_xfs_mdrestore $metadump_file > -SCRATCH_DEV=$TEST_DIR/image _scratch_mount > -SCRATCH_DEV=$TEST_DIR/image _scratch_unmount > +max_md_version=1 > +_scratch_metadump_v2_supported && max_md_version=2 > > -echo "Check restored fs" > -_check_generic_filesystem $metadump_file > +echo "Create metadump file, restore it and check restored fs" > +for md_version in $(seq 1 $max_md_version); do > + # Determine the version to be passed to metadump/mdrestore > + version="" > + if [[ $max_md_version == 2 ]]; then > + version="-v $md_version" > + fi > + > + _scratch_xfs_metadump $metadump_file $version > + > + # Now restore the obfuscated one back and take a look around > + > + # Metadump v2 files can contain contents dumped from an external log > + # device. Use a temporary file to hold the log device contents restored > + # from such a metadump file. > + slogdev=$TEST_DIR/log-image > + if [[ -z $version || $version == "-v 1" || -z $SCRATCH_LOGDEV ]]; then > + slogdev="" > + fi > + > + SCRATCH_DEV=$TEST_DIR/data-image SCRATCH_LOGDEV=$slogdev \ ^ space before tab > + _scratch_xfs_mdrestore $metadump_file > + > + datadev=$(_create_loop_device $TEST_DIR/data-image) > + > + logdev=${SCRATCH_LOGDEV} > + if [[ -s $TEST_DIR/log-image ]]; then > + logdev=$(_create_loop_device $TEST_DIR/log-image) > + fi > + > + SCRATCH_DEV=$datadev SCRATCH_LOGDEV=$logdev _scratch_mount > + SCRATCH_DEV=$datadev SCRATCH_LOGDEV=$logdev _scratch_unmount > + > + [[ -z $logdev ]] && logdev=none > + _check_xfs_filesystem $datadev $logdev none > + > + if [[ -s $TEST_DIR/log-image ]]; then > + _destroy_loop_device $logdev > + logdev="" > + rm -f $TEST_DIR/log-image > + fi > + > + _destroy_loop_device $datadev > + datadev="" > + rm -f $TEST_DIR/data-image > +done Given the major differences between v1 and v2, would the two metadump tests be easier to understand if this loop were unrolled? I like that it mdrestores to a separate device to preserve the original $SCRATCH_DEV metadata between metadump v1 and v2 testing. > # success, all done > status=0 > diff --git a/tests/xfs/129.out b/tests/xfs/129.out > index da6f43fd..0f24c431 100644 > --- a/tests/xfs/129.out > +++ b/tests/xfs/129.out > @@ -1,6 +1,4 @@ > QA output created by 129 > Create the original file blocks > Reflink every other block > -Create metadump file > -Restore metadump > -Check restored fs > +Create metadump file, restore it and check restored fs > diff --git a/tests/xfs/234 b/tests/xfs/234 > index 57d447c0..2f6b1f65 100755 > --- a/tests/xfs/234 > +++ b/tests/xfs/234 > @@ -16,7 +16,11 @@ _cleanup() > { > cd / > _scratch_unmount > /dev/null 2>&1 > - rm -rf $tmp.* $metadump_file $TEST_DIR/image > + [[ -n $logdev && $logdev != "none" && $logdev != $SCRATCH_LOGDEV ]] && \ > + _destroy_loop_device $logdev > + [[ -n $datadev ]] && _destroy_loop_device $datadev > + rm -rf $tmp.* $testdir $metadump_file $TEST_DIR/image \ > + $TEST_DIR/log-image > } > > # Import common functions. > @@ -47,18 +51,57 @@ seq 1 2 $((nr_blks - 1)) | while read nr; do > $XFS_IO_PROG -c "fpunch $((nr * blksz)) $blksz" $testdir/file1 >> $seqres.full > done > > -echo "Create metadump file" > _scratch_unmount > -_scratch_xfs_metadump $metadump_file > > -# Now restore the obfuscated one back and take a look around > -echo "Restore metadump" > -SCRATCH_DEV=$TEST_DIR/image _scratch_xfs_mdrestore $metadump_file > -SCRATCH_DEV=$TEST_DIR/image _scratch_mount > -SCRATCH_DEV=$TEST_DIR/image _scratch_unmount > +max_md_version=1 > +_scratch_metadump_v2_supported && max_md_version=2 > > -echo "Check restored fs" > -_check_generic_filesystem $metadump_file > +echo "Create metadump file, restore it and check restored fs" > +for md_version in $(seq 1 $max_md_version); do > + # Determine the version to be passed to metadump/mdrestore > + version="" > + if [[ $max_md_version == 2 ]]; then > + version="-v $md_version" > + fi > + > + _scratch_xfs_metadump $metadump_file $version > + > + # Now restore the obfuscated one back and take a look around > + > + # Metadump v2 files can contain contents dumped from an external log > + # device. Use a temporary file to hold the log device contents restored > + # from such a metadump file. > + slogdev=$TEST_DIR/log-image > + if [[ -z $version || $version == "-v 1" || -z $SCRATCH_LOGDEV ]]; then > + slogdev="" > + fi > + > + SCRATCH_DEV=$TEST_DIR/data-image SCRATCH_LOGDEV=$slogdev \ > + _scratch_xfs_mdrestore $metadump_file > + > + datadev=$(_create_loop_device $TEST_DIR/data-image) > + > + logdev=${SCRATCH_LOGDEV} > + if [[ -s $TEST_DIR/log-image ]]; then > + logdev=$(_create_loop_device $TEST_DIR/log-image) > + fi > + > + SCRATCH_DEV=$datadev SCRATCH_LOGDEV=$logdev _scratch_mount > + SCRATCH_DEV=$datadev SCRATCH_LOGDEV=$logdev _scratch_unmount > + > + [[ -z $logdev ]] && logdev=none > + _check_xfs_filesystem $datadev $logdev none > + > + if [[ -s $TEST_DIR/log-image ]]; then > + _destroy_loop_device $logdev > + logdev="" > + rm -f $TEST_DIR/log-image > + fi > + > + _destroy_loop_device $datadev > + datadev="" > + rm -f $TEST_DIR/data-image > +done > > # success, all done > status=0 > diff --git a/tests/xfs/234.out b/tests/xfs/234.out > index 463d4660..fc2ddd77 100644 > --- a/tests/xfs/234.out > +++ b/tests/xfs/234.out > @@ -1,6 +1,4 @@ > QA output created by 234 > Create the original file blocks > Punch every other block > -Create metadump file > -Restore metadump > -Check restored fs > +Create metadump file, restore it and check restored fs > diff --git a/tests/xfs/253 b/tests/xfs/253 > index ce902477..b69a1faf 100755 > --- a/tests/xfs/253 > +++ b/tests/xfs/253 > @@ -52,114 +52,139 @@ function create_file() { > echo "Disciplyne of silence is goed." > > _scratch_mkfs >/dev/null 2>&1 > -_scratch_mount > > -# Initialize and mount the scratch filesystem, then create a bunch > -# of files that exercise the original problem. > -# > -# The problem arose when a file name produced a hash that contained > -# either 0x00 (string terminator) or 0x27 ('/' character) in a > -# spot used to determine a character in an obfuscated name. This > -# occurred in one of 5 spots at the end of the name, at position > -# (last-4), (last-3), (last-2), (last-1), or (last). I wonder, could you create the scratch fs and only then move into testing v1 and v2 metadump? Rather than doing the create_file stuff twice? Or do we actually end up with a different fs between the two iterations? The other two tests here look good enough for now... --D > +max_md_version=1 > +_scratch_metadump_v2_supported && max_md_version=2 > > -rm -f "${METADUMP_FILE}" > +for md_version in $(seq 1 $max_md_version); do > + version="" > + if [[ $max_md_version == 2 ]]; then > + version="-v $md_version" > + fi > > -mkdir -p "${OUTPUT_DIR}" > + cd $here > > -cd "${OUTPUT_DIR}" > -# Start out with some basic test files > -create_file 'abcde' # hash 0x1c58f263 ("normal" name) > + # Initialize and mount the scratch filesystem, then create a bunch of > + # files that exercise the original problem. > + # > + # The problem arose when a file name produced a hash that contained > + # either 0x00 (string terminator) or 0x27 ('/' character) in a spot used > + # to determine a character in an obfuscated name. This occurred in one > + # of 5 spots at the end of the name, at position (last-4), (last-3), > + # (last-2), (last-1), or (last). > > -create_file 'f' # hash 0x00000066 (1-byte name) > -create_file 'gh' # hash 0x000033e8 (2-byte name) > -create_file 'ijk' # hash 0x001a756b (3-byte name) > -create_file 'lmno' # hash 0x0d9b776f (4-byte name) > -create_file 'pqrstu' # hash 0x1e5cf9f2 (6-byte name) > -create_file 'abcdefghijklmnopqrstuvwxyz' # a most remarkable word (0x55004ae3) > + _scratch_unmount >> $seqres.full 2>&1 > > -# Create a short directory name; it won't be obfuscated. Populate > -# it with some longer named-files. The first part of the obfuscated > -# filenames should use printable characters. > -mkdir foo > -create_file 'foo/longer_file_name_1' # hash 0xe83634ec > -create_file 'foo/longer_file_name_2' # hash 0xe83634ef > -create_file 'foo/longer_file_name_3' # hash 0xe83634ee > + _scratch_mkfs >> $seqres.full 2>&1 > > -# Now create a longer directory name > -mkdir longer_directory_name > -create_file 'longer_directory_name/f1' # directory hash 0x9c7accdd > -create_file 'longer_directory_name/f2' # filenames are short, no hash > -create_file 'longer_directory_name/f3' > + _scratch_mount > > -# The problematic name originally reported by Arkadiusz Miśkiewicz > + rm -f "${METADUMP_FILE}" > > -create_file 'R\323\257NE' # hash 0x3a4be740, forces (last-3) = 0x2f > + mkdir -p "${OUTPUT_DIR}" > > -# Other names that force a 0x00 byte > -create_file 'Pbcde' # hash 0x0c58f260, forces (last-4) = 0x00 > -create_file 'a\001\203de' # hash 0x1000f263, forces (last-3) = 0x00 > -create_file 'ab\001\344e' # hash 0x1c403263, forces (last-2) = 0x00 > -create_file 'abc\200e' # hash 0x1c588063, forces (last-1) = 0x00 > -create_file 'abcd\006' # hash 0x1c58f200, forces (last) = 0x00 > + cd "${OUTPUT_DIR}" > + # Start out with some basic test files > + create_file 'abcde' # hash 0x1c58f263 ("normal" name) > > -# Names that force a 0x2f byte; note no name will ever force (last-4) = 0x2f > -create_file 'a.\343de' # hash 0x15f8f263 forces (last-3) = 0x00 > -create_file 'ac\257de' # hash 0x1c4bf263, forces (last-2) = 0x2f > -create_file 'abe\257e' # hash 0x1c5917e3, forces (last-1) = 0x2f > -create_file 'abcd)' # hash 0x1c58f22f, forces (last) = 0x2f > + create_file 'f' # hash 0x00000066 (1-byte name) > + create_file 'gh' # hash 0x000033e8 (2-byte name) > + create_file 'ijk' # hash 0x001a756b (3-byte name) > + create_file 'lmno' # hash 0x0d9b776f (4-byte name) > + create_file 'pqrstu' # hash 0x1e5cf9f2 (6-byte name) > + create_file 'abcdefghijklmnopqrstuvwxyz' # a most remarkable word (0x55004ae3) > > -# The following names are possible results of obfuscating the name > -# "abcde". Previously, xfs_metadump could get hung up trying to > -# obfuscate names when too many of the same length had the same hash > -# value. > -create_file '!bcda' # essentially a dup of 'abcde' > -create_file 'Abcdg' # essentially a dup of 'abcde' > -create_file 'qbcdd' # essentially a dup of 'abcde' > -create_file '1bcd`' # essentially a dup of 'abcde' > -create_file 'Qbcdf' # essentially a dup of 'abcde' > -create_file '\001bcdc' # essentially a dup of 'abcde' > -create_file 'Qbce\346' # essentially a dup of 'abcde' > -create_file 'abb\344e' # essentially a dup of 'abcde' > + # Create a short directory name; it won't be obfuscated. Populate it > + # with some longer named-files. The first part of the obfuscated > + # filenames should use printable characters. > + mkdir foo > + create_file 'foo/longer_file_name_1' # hash 0xe83634ec > + create_file 'foo/longer_file_name_2' # hash 0xe83634ef > + create_file 'foo/longer_file_name_3' # hash 0xe83634ee > > -# The orphanage directory (lost+found) should not be obfuscated. > -# Files thereunder can be, but not if their name is the same as > -# their inode number. Test this. > + # Now create a longer directory name > + mkdir longer_directory_name > + create_file 'longer_directory_name/f1' # directory hash 0x9c7accdd > + create_file 'longer_directory_name/f2' # filenames are short, no hash > + create_file 'longer_directory_name/f3' > > -cd "${SCRATCH_MNT}" > -mkdir -p "${ORPHANAGE}" > + # The problematic name originally reported by Arkadiusz Miśkiewicz > > -TEMP_ORPHAN="${ORPHANAGE}/__orphan__" > -NON_ORPHAN="${ORPHANAGE}/__should_be_obfuscated__" > + create_file 'R\323\257NE' # hash 0x3a4be740, forces (last-3) = 0x2f > > -# Create an orphan, whose name is the same as its inode number > -touch "${TEMP_ORPHAN}" > -INUM=$(ls -i "${TEMP_ORPHAN}" | awk '{ print $1; }') > -ORPHAN="${SCRATCH_MNT}/lost+found/${INUM}" > -mv "${TEMP_ORPHAN}" "${ORPHAN}" > + # Other names that force a 0x00 byte > + create_file 'Pbcde' # hash 0x0c58f260, forces (last-4) = 0x00 > + create_file 'a\001\203de' # hash 0x1000f263, forces (last-3) = 0x00 > + create_file 'ab\001\344e' # hash 0x1c403263, forces (last-2) = 0x00 > + create_file 'abc\200e' # hash 0x1c588063, forces (last-1) = 0x00 > + create_file 'abcd\006' # hash 0x1c58f200, forces (last) = 0x00 > > -# Create non-orphan, which *should* be obfuscated > -touch "${NON_ORPHAN}" > + # Names that force a 0x2f byte; note no name will ever force (last-4) = 0x2f > + create_file 'a.\343de' # hash 0x15f8f263 forces (last-3) = 0x00 > + create_file 'ac\257de' # hash 0x1c4bf263, forces (last-2) = 0x2f > + create_file 'abe\257e' # hash 0x1c5917e3, forces (last-1) = 0x2f > + create_file 'abcd)' # hash 0x1c58f22f, forces (last) = 0x2f > > -# Get a listing of all the files before obfuscation > -ls -R >> $seqres.full > -ls -R | od -c >> $seqres.full > + # The following names are possible results of obfuscating the name > + # "abcde". Previously, xfs_metadump could get hung up trying to > + # obfuscate names when too many of the same length had the same hash > + # value. > + create_file '!bcda' # essentially a dup of 'abcde' > + create_file 'Abcdg' # essentially a dup of 'abcde' > + create_file 'qbcdd' # essentially a dup of 'abcde' > + create_file '1bcd`' # essentially a dup of 'abcde' > + create_file 'Qbcdf' # essentially a dup of 'abcde' > + create_file '\001bcdc' # essentially a dup of 'abcde' > + create_file 'Qbce\346' # essentially a dup of 'abcde' > + create_file 'abb\344e' # essentially a dup of 'abcde' > > -# Now unmount the filesystem and create a metadump file > -cd $here > + # The orphanage directory (lost+found) should not be obfuscated. > + # Files thereunder can be, but not if their name is the same as > + # their inode number. Test this. > > -_scratch_unmount > -_scratch_xfs_metadump $METADUMP_FILE > + cd "${SCRATCH_MNT}" > + mkdir -p "${ORPHANAGE}" > > -# Now restore the obfuscated one back and take a look around > -_scratch_xfs_mdrestore "$METADUMP_FILE" > + TEMP_ORPHAN="${ORPHANAGE}/__orphan__" > + NON_ORPHAN="${ORPHANAGE}/__should_be_obfuscated__" > > -_scratch_mount > + # Create an orphan, whose name is the same as its inode number > + touch "${TEMP_ORPHAN}" > + INUM=$(ls -i "${TEMP_ORPHAN}" | awk '{ print $1; }') > + ORPHAN="${SCRATCH_MNT}/lost+found/${INUM}" > + mv "${TEMP_ORPHAN}" "${ORPHAN}" > > -# Get a listing of all the files after obfuscation > -cd ${SCRATCH_MNT} > -ls -R >> $seqres.full > -ls -R | od -c >> $seqres.full > + # Create non-orphan, which *should* be obfuscated > + touch "${NON_ORPHAN}" > + > + # Get a listing of all the files before obfuscation > + ls -R >> $seqres.full > + ls -R | od -c >> $seqres.full > + > + # Now unmount the filesystem and create a metadump file > + cd $here > + > + _scratch_unmount > + > + _scratch_xfs_metadump $METADUMP_FILE $version > + > + # Now restore the obfuscated one back and take a look around > + > + slogdev=$SCRATCH_LOGDEV > + if [[ -z $version || $version == "-v 1" ]]; then > + slogdev="" > + fi > + > + SCRATCH_LOGDEV=${slogdev} _scratch_xfs_mdrestore "$METADUMP_FILE" > + > + _scratch_mount > + > + cd "${SCRATCH_MNT}" > + > + # Get a listing of all the files after obfuscation > + ls -R >> $seqres.full > + ls -R | od -c >> $seqres.full > +done > > # Finally, re-make the filesystem since to ensure we don't > # leave a directory with duplicate entries lying around. > diff --git a/tests/xfs/291 b/tests/xfs/291 > index 54448497..33193eb7 100755 > --- a/tests/xfs/291 > +++ b/tests/xfs/291 > @@ -92,10 +92,27 @@ _scratch_xfs_check >> $seqres.full 2>&1 || _fail "xfs_check failed" > > # Yes they can! Now... > # Can xfs_metadump cope with this monster? > -_scratch_xfs_metadump $tmp.metadump -a -o || _fail "xfs_metadump failed" > -SCRATCH_DEV=$tmp.img _scratch_xfs_mdrestore $tmp.metadump || _fail "xfs_mdrestore failed" > -SCRATCH_DEV=$tmp.img _scratch_xfs_repair -f &>> $seqres.full || \ > - _fail "xfs_repair of metadump failed" > +max_md_version=1 > +_scratch_metadump_v2_supported && max_md_version=2 > + > +for md_version in $(seq 1 $max_md_version); do > + version="" > + if [[ $max_md_version == 2 ]]; then > + version="-v $md_version" > + fi > + > + _scratch_xfs_metadump $tmp.metadump -a -o $version || \ > + _fail "xfs_metadump failed" > + > + slogdev=$SCRATCH_LOGDEV > + if [[ -z $version || $version == "-v 1" ]]; then > + slogdev="" > + fi > + SCRATCH_DEV=$tmp.img SCRATCH_LOGDEV=$slogdev _scratch_xfs_mdrestore \ > + $tmp.metadump || _fail "xfs_mdrestore failed" > + SCRATCH_DEV=$tmp.img _scratch_xfs_repair -f &>> $seqres.full || \ > + _fail "xfs_repair of metadump failed" > +done > > # Yes it can; success, all done > status=0 > diff --git a/tests/xfs/432 b/tests/xfs/432 > index dae68fb2..a215d3ce 100755 > --- a/tests/xfs/432 > +++ b/tests/xfs/432 > @@ -50,6 +50,7 @@ echo "Format and mount" > # block. 8187 hashes/dablk / 248 dirents/dirblock = ~33 dirblocks per > # dablock. 33 dirblocks * 64k mean that we can expand a directory by > # 2112k before we have to allocate another da btree block. > + > _scratch_mkfs -b size=1k -n size=64k > "$seqres.full" 2>&1 > _scratch_mount >> "$seqres.full" 2>&1 > > @@ -85,13 +86,29 @@ extlen="$(check_for_long_extent $dir_inum)" > echo "qualifying extent: $extlen blocks" >> $seqres.full > test -n "$extlen" || _notrun "could not create dir extent > 1000 blocks" > > -echo "Try to metadump" > -_scratch_xfs_metadump $metadump_file -a -o -w > -SCRATCH_DEV=$metadump_img _scratch_xfs_mdrestore $metadump_file > +echo "Try to metadump, restore and check restored metadump image" > +max_md_version=1 > +_scratch_metadump_v2_supported && max_md_version=2 > > -echo "Check restored metadump image" > -SCRATCH_DEV=$metadump_img _scratch_xfs_repair -n &>> $seqres.full || \ > - echo "xfs_repair on restored fs returned $?" > +for md_version in $(seq 1 $max_md_version); do > + version="" > + if [[ $max_md_version == 2 ]]; then > + version="-v $md_version" > + fi > + > + _scratch_xfs_metadump $metadump_file -a -o -w $version > + > + slogdev=$SCRATCH_LOGDEV > + if [[ -z $version || $version == "-v 1" ]]; then > + slogdev="" > + fi > + > + SCRATCH_DEV=$metadump_img SCRATCH_LOGDEV=$slogdev \ > + _scratch_xfs_mdrestore $metadump_file > + > + SCRATCH_DEV=$metadump_img _scratch_xfs_repair -n &>> $seqres.full || \ > + echo "xfs_repair on restored fs returned $?" > +done > > # success, all done > status=0 > diff --git a/tests/xfs/432.out b/tests/xfs/432.out > index 1f135d16..37bac902 100644 > --- a/tests/xfs/432.out > +++ b/tests/xfs/432.out > @@ -2,5 +2,4 @@ QA output created by 432 > Format and mount > Create huge dir > Check for > 1000 block extent? > -Try to metadump > -Check restored metadump image > +Try to metadump, restore and check restored metadump image > diff --git a/tests/xfs/503 b/tests/xfs/503 > index 8805632d..a1479eb6 100755 > --- a/tests/xfs/503 > +++ b/tests/xfs/503 > @@ -29,6 +29,7 @@ testdir=$TEST_DIR/test-$seq > _supported_fs xfs > > _require_command "$XFS_MDRESTORE_PROG" "xfs_mdrestore" > +_require_loop > _require_xfs_copy > _require_scratch_nocheck > _require_populate_commands > @@ -40,22 +41,69 @@ _scratch_populate_cached nofill > $seqres.full 2>&1 > > mkdir -p $testdir > metadump_file=$testdir/scratch.md > -metadump_file_a=${metadump_file}.a > -metadump_file_g=${metadump_file}.g > -metadump_file_ag=${metadump_file}.ag > copy_file=$testdir/copy.img > > -echo metadump > -_scratch_xfs_metadump $metadump_file -a -o >> $seqres.full > +check_restored_metadump_image() > +{ > + local image=$1 > > -echo metadump a > -_scratch_xfs_metadump $metadump_file_a -a >> $seqres.full > + loop_dev=$(_create_loop_device $image) > + SCRATCH_DEV=$loop_dev _scratch_mount > + SCRATCH_DEV=$loop_dev _check_scratch_fs > + SCRATCH_DEV=$loop_dev _scratch_unmount > + _destroy_loop_device $loop_dev > +} > > -echo metadump g > -_scratch_xfs_metadump $metadump_file_g -g >> $seqres.full > +max_md_version=1 > +_scratch_metadump_v2_supported && max_md_version=2 > > -echo metadump ag > -_scratch_xfs_metadump $metadump_file_ag -a -g >> $seqres.full > +echo "metadump and mdrestore" > +for md_version in $(seq 1 $max_md_version); do > + version="" > + if [[ $max_md_version == 2 ]]; then > + version="-v $md_version" > + fi > + > + _scratch_xfs_metadump $metadump_file -a -o $version >> $seqres.full > + SCRATCH_DEV=$TEST_DIR/image _scratch_xfs_mdrestore $metadump_file > + check_restored_metadump_image $TEST_DIR/image > +done > + > +echo "metadump a and mdrestore" > +for md_version in $(seq 1 $max_md_version); do > + version="" > + if [[ $max_md_version == 2 ]]; then > + version="-v $md_version" > + fi > + > + _scratch_xfs_metadump $metadump_file -a $version >> $seqres.full > + SCRATCH_DEV=$TEST_DIR/image _scratch_xfs_mdrestore $metadump_file > + check_restored_metadump_image $TEST_DIR/image > +done > + > +echo "metadump g and mdrestore" > +for md_version in $(seq 1 $max_md_version); do > + version="" > + if [[ $max_md_version == 2 ]]; then > + version="-v $md_version" > + fi > + > + _scratch_xfs_metadump $metadump_file -g $version >> $seqres.full > + SCRATCH_DEV=$TEST_DIR/image _scratch_xfs_mdrestore $metadump_file > + check_restored_metadump_image $TEST_DIR/image > +done > + > +echo "metadump ag and mdrestore" > +for md_version in $(seq 1 $max_md_version); do > + version="" > + if [[ $max_md_version == 2 ]]; then > + version="-v $md_version" > + fi > + > + _scratch_xfs_metadump $metadump_file -a -g $version >> $seqres.full > + SCRATCH_DEV=$TEST_DIR/image _scratch_xfs_mdrestore $metadump_file > + check_restored_metadump_image $TEST_DIR/image > +done > > echo copy > $XFS_COPY_PROG $SCRATCH_DEV $copy_file >> $seqres.full > @@ -67,30 +115,6 @@ _scratch_mount > _check_scratch_fs > _scratch_unmount > > -echo mdrestore > -_scratch_xfs_mdrestore $metadump_file > -_scratch_mount > -_check_scratch_fs > -_scratch_unmount > - > -echo mdrestore a > -_scratch_xfs_mdrestore $metadump_file_a > -_scratch_mount > -_check_scratch_fs > -_scratch_unmount > - > -echo mdrestore g > -_scratch_xfs_mdrestore $metadump_file_g > -_scratch_mount > -_check_scratch_fs > -_scratch_unmount > - > -echo mdrestore ag > -_scratch_xfs_mdrestore $metadump_file_ag > -_scratch_mount > -_check_scratch_fs > -_scratch_unmount > - > # success, all done > status=0 > exit > diff --git a/tests/xfs/503.out b/tests/xfs/503.out > index 8ef31dbe..496f2516 100644 > --- a/tests/xfs/503.out > +++ b/tests/xfs/503.out > @@ -1,12 +1,8 @@ > QA output created by 503 > Format and populate > -metadump > -metadump a > -metadump g > -metadump ag > +metadump and mdrestore > +metadump a and mdrestore > +metadump g and mdrestore > +metadump ag and mdrestore > copy > recopy > -mdrestore > -mdrestore a > -mdrestore g > -mdrestore ag > -- > 2.43.0 > > ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 4/5] xfs: Add support for testing metadump v2 2024-01-03 5:57 ` Darrick J. Wong @ 2024-01-05 7:04 ` Chandan Babu R 0 siblings, 0 replies; 16+ messages in thread From: Chandan Babu R @ 2024-01-05 7:04 UTC (permalink / raw) To: Darrick J. Wong; +Cc: fstests, linux-xfs, zlang On Tue, Jan 02, 2024 at 09:57:28 PM -0800, Darrick J. Wong wrote: > On Tue, Jan 02, 2024 at 02:13:51PM +0530, Chandan Babu R wrote: >> This commit adds the ability to test metadump v2 to existing metadump tests. >> >> Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> >> --- >> tests/xfs/129 | 63 ++++++++++++--- >> tests/xfs/129.out | 4 +- >> tests/xfs/234 | 63 ++++++++++++--- >> tests/xfs/234.out | 4 +- >> tests/xfs/253 | 195 ++++++++++++++++++++++++++-------------------- >> tests/xfs/291 | 25 +++++- >> tests/xfs/432 | 29 +++++-- >> tests/xfs/432.out | 3 +- >> tests/xfs/503 | 94 +++++++++++++--------- >> tests/xfs/503.out | 12 +-- >> 10 files changed, 326 insertions(+), 166 deletions(-) >> >> diff --git a/tests/xfs/129 b/tests/xfs/129 >> index 6f2ef564..7226d57d 100755 >> --- a/tests/xfs/129 >> +++ b/tests/xfs/129 >> @@ -16,7 +16,11 @@ _cleanup() >> { >> cd / >> _scratch_unmount > /dev/null 2>&1 >> - rm -rf $tmp.* $testdir $metadump_file $TEST_DIR/image >> + [[ -n $logdev && $logdev != "none" && $logdev != $SCRATCH_LOGDEV ]] && \ >> + _destroy_loop_device $logdev >> + [[ -n $datadev ]] && _destroy_loop_device $datadev >> + rm -rf $tmp.* $testdir $metadump_file $TEST_DIR/data-image \ >> + $TEST_DIR/log-image >> } >> >> # Import common functions. >> @@ -47,18 +51,57 @@ seq 1 2 $((nr_blks - 1)) | while read nr; do >> $testdir/file2 $((nr * blksz)) $blksz >> $seqres.full >> done >> >> -echo "Create metadump file" >> _scratch_unmount >> -_scratch_xfs_metadump $metadump_file >> >> -# Now restore the obfuscated one back and take a look around >> -echo "Restore metadump" >> -SCRATCH_DEV=$TEST_DIR/image _scratch_xfs_mdrestore $metadump_file >> -SCRATCH_DEV=$TEST_DIR/image _scratch_mount >> -SCRATCH_DEV=$TEST_DIR/image _scratch_unmount >> +max_md_version=1 >> +_scratch_metadump_v2_supported && max_md_version=2 >> >> -echo "Check restored fs" >> -_check_generic_filesystem $metadump_file >> +echo "Create metadump file, restore it and check restored fs" >> +for md_version in $(seq 1 $max_md_version); do >> + # Determine the version to be passed to metadump/mdrestore >> + version="" >> + if [[ $max_md_version == 2 ]]; then >> + version="-v $md_version" >> + fi >> + >> + _scratch_xfs_metadump $metadump_file $version >> + >> + # Now restore the obfuscated one back and take a look around >> + >> + # Metadump v2 files can contain contents dumped from an external log >> + # device. Use a temporary file to hold the log device contents restored >> + # from such a metadump file. >> + slogdev=$TEST_DIR/log-image >> + if [[ -z $version || $version == "-v 1" || -z $SCRATCH_LOGDEV ]]; then >> + slogdev="" >> + fi >> + >> + SCRATCH_DEV=$TEST_DIR/data-image SCRATCH_LOGDEV=$slogdev \ > > ^ space before tab > Sorry, I will fix it. >> + _scratch_xfs_mdrestore $metadump_file >> + >> + datadev=$(_create_loop_device $TEST_DIR/data-image) >> + >> + logdev=${SCRATCH_LOGDEV} >> + if [[ -s $TEST_DIR/log-image ]]; then >> + logdev=$(_create_loop_device $TEST_DIR/log-image) >> + fi >> + >> + SCRATCH_DEV=$datadev SCRATCH_LOGDEV=$logdev _scratch_mount >> + SCRATCH_DEV=$datadev SCRATCH_LOGDEV=$logdev _scratch_unmount >> + >> + [[ -z $logdev ]] && logdev=none >> + _check_xfs_filesystem $datadev $logdev none >> + >> + if [[ -s $TEST_DIR/log-image ]]; then >> + _destroy_loop_device $logdev >> + logdev="" >> + rm -f $TEST_DIR/log-image >> + fi >> + >> + _destroy_loop_device $datadev >> + datadev="" >> + rm -f $TEST_DIR/data-image >> +done > > Given the major differences between v1 and v2, would the two metadump > tests be easier to understand if this loop were unrolled? > Yes, you are right. Unrolling the loop will improve the readability of the code. I will make the required changes. > I like that it mdrestores to a separate device to preserve the original > $SCRATCH_DEV metadata between metadump v1 and v2 testing. > >> # success, all done >> status=0 >> diff --git a/tests/xfs/129.out b/tests/xfs/129.out >> index da6f43fd..0f24c431 100644 >> --- a/tests/xfs/129.out >> +++ b/tests/xfs/129.out >> @@ -1,6 +1,4 @@ >> QA output created by 129 >> Create the original file blocks >> Reflink every other block >> -Create metadump file >> -Restore metadump >> -Check restored fs >> +Create metadump file, restore it and check restored fs >> diff --git a/tests/xfs/234 b/tests/xfs/234 >> index 57d447c0..2f6b1f65 100755 >> --- a/tests/xfs/234 >> +++ b/tests/xfs/234 >> @@ -16,7 +16,11 @@ _cleanup() >> { >> cd / >> _scratch_unmount > /dev/null 2>&1 >> - rm -rf $tmp.* $metadump_file $TEST_DIR/image >> + [[ -n $logdev && $logdev != "none" && $logdev != $SCRATCH_LOGDEV ]] && \ >> + _destroy_loop_device $logdev >> + [[ -n $datadev ]] && _destroy_loop_device $datadev >> + rm -rf $tmp.* $testdir $metadump_file $TEST_DIR/image \ >> + $TEST_DIR/log-image >> } >> >> # Import common functions. >> @@ -47,18 +51,57 @@ seq 1 2 $((nr_blks - 1)) | while read nr; do >> $XFS_IO_PROG -c "fpunch $((nr * blksz)) $blksz" $testdir/file1 >> $seqres.full >> done >> >> -echo "Create metadump file" >> _scratch_unmount >> -_scratch_xfs_metadump $metadump_file >> >> -# Now restore the obfuscated one back and take a look around >> -echo "Restore metadump" >> -SCRATCH_DEV=$TEST_DIR/image _scratch_xfs_mdrestore $metadump_file >> -SCRATCH_DEV=$TEST_DIR/image _scratch_mount >> -SCRATCH_DEV=$TEST_DIR/image _scratch_unmount >> +max_md_version=1 >> +_scratch_metadump_v2_supported && max_md_version=2 >> >> -echo "Check restored fs" >> -_check_generic_filesystem $metadump_file >> +echo "Create metadump file, restore it and check restored fs" >> +for md_version in $(seq 1 $max_md_version); do >> + # Determine the version to be passed to metadump/mdrestore >> + version="" >> + if [[ $max_md_version == 2 ]]; then >> + version="-v $md_version" >> + fi >> + >> + _scratch_xfs_metadump $metadump_file $version >> + >> + # Now restore the obfuscated one back and take a look around >> + >> + # Metadump v2 files can contain contents dumped from an external log >> + # device. Use a temporary file to hold the log device contents restored >> + # from such a metadump file. >> + slogdev=$TEST_DIR/log-image >> + if [[ -z $version || $version == "-v 1" || -z $SCRATCH_LOGDEV ]]; then >> + slogdev="" >> + fi >> + >> + SCRATCH_DEV=$TEST_DIR/data-image SCRATCH_LOGDEV=$slogdev \ >> + _scratch_xfs_mdrestore $metadump_file >> + >> + datadev=$(_create_loop_device $TEST_DIR/data-image) >> + >> + logdev=${SCRATCH_LOGDEV} >> + if [[ -s $TEST_DIR/log-image ]]; then >> + logdev=$(_create_loop_device $TEST_DIR/log-image) >> + fi >> + >> + SCRATCH_DEV=$datadev SCRATCH_LOGDEV=$logdev _scratch_mount >> + SCRATCH_DEV=$datadev SCRATCH_LOGDEV=$logdev _scratch_unmount >> + >> + [[ -z $logdev ]] && logdev=none >> + _check_xfs_filesystem $datadev $logdev none >> + >> + if [[ -s $TEST_DIR/log-image ]]; then >> + _destroy_loop_device $logdev >> + logdev="" >> + rm -f $TEST_DIR/log-image >> + fi >> + >> + _destroy_loop_device $datadev >> + datadev="" >> + rm -f $TEST_DIR/data-image >> +done >> >> # success, all done >> status=0 >> diff --git a/tests/xfs/234.out b/tests/xfs/234.out >> index 463d4660..fc2ddd77 100644 >> --- a/tests/xfs/234.out >> +++ b/tests/xfs/234.out >> @@ -1,6 +1,4 @@ >> QA output created by 234 >> Create the original file blocks >> Punch every other block >> -Create metadump file >> -Restore metadump >> -Check restored fs >> +Create metadump file, restore it and check restored fs >> diff --git a/tests/xfs/253 b/tests/xfs/253 >> index ce902477..b69a1faf 100755 >> --- a/tests/xfs/253 >> +++ b/tests/xfs/253 >> @@ -52,114 +52,139 @@ function create_file() { >> echo "Disciplyne of silence is goed." >> >> _scratch_mkfs >/dev/null 2>&1 >> -_scratch_mount >> >> -# Initialize and mount the scratch filesystem, then create a bunch >> -# of files that exercise the original problem. >> -# >> -# The problem arose when a file name produced a hash that contained >> -# either 0x00 (string terminator) or 0x27 ('/' character) in a >> -# spot used to determine a character in an obfuscated name. This >> -# occurred in one of 5 spots at the end of the name, at position >> -# (last-4), (last-3), (last-2), (last-1), or (last). > > I wonder, could you create the scratch fs and only then move into > testing v1 and v2 metadump? Rather than doing the create_file stuff > twice? Or do we actually end up with a different fs between the two > iterations? > Yes, Creating the fs once should be sufficient. I will implement the changes that have been suggested. > The other two tests here look good enough for now... > > --D > -- Chandan ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 5/5] xfs: Check correctness of metadump/mdrestore's ability to work with dirty log 2024-01-02 8:43 [PATCH 0/5] Add support for testing XFS metadump v2 Chandan Babu R ` (3 preceding siblings ...) 2024-01-02 8:43 ` [PATCH 4/5] xfs: Add support for testing metadump v2 Chandan Babu R @ 2024-01-02 8:43 ` Chandan Babu R 2024-01-03 5:44 ` Darrick J. Wong 4 siblings, 1 reply; 16+ messages in thread From: Chandan Babu R @ 2024-01-02 8:43 UTC (permalink / raw) To: fstests; +Cc: Chandan Babu R, linux-xfs, djwong, zlang Add a new test to verify if metadump/mdrestore are able to dump and restore the contents of a dirty log. Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> --- tests/xfs/801 | 115 ++++++++++++++++++++++++++++++++++++++++++++++ tests/xfs/801.out | 14 ++++++ 2 files changed, 129 insertions(+) create mode 100755 tests/xfs/801 create mode 100644 tests/xfs/801.out diff --git a/tests/xfs/801 b/tests/xfs/801 new file mode 100755 index 00000000..3ed559df --- /dev/null +++ b/tests/xfs/801 @@ -0,0 +1,115 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2024 Oracle, Inc. All Rights Reserved. +# +# FS QA Test 801 +# +# Test metadump/mdrestore's ability to dump a dirty log and restore it +# correctly. +# +. ./common/preamble +_begin_fstest auto quick metadump log logprint punch + +# Override the default cleanup function. +_cleanup() +{ + cd / + rm -r -f $tmp.* + _scratch_unmount > /dev/null 2>&1 +} + +# Import common functions. +. ./common/dmflakey +. ./common/inject + +# real QA test starts here +_supported_fs xfs +_require_scratch +_require_test +_require_xfs_debug +_require_xfs_io_error_injection log_item_pin +_require_dm_target flakey +_require_xfs_io_command "pwrite" +_require_test_program "punch-alternating" + +metadump_file=${TEST_DIR}/${seq}.md +testfile=${SCRATCH_MNT}/testfile + +echo "Format filesystem on scratch device" +_scratch_mkfs >> $seqres.full 2>&1 + +max_md_version=1 +_scratch_metadump_v2_supported && max_md_version=2 + +external_log=0 +if [[ $USE_EXTERNAL = yes && -n "$SCRATCH_LOGDEV" ]]; then + external_log=1 +fi + +if [[ $max_md_version == 1 && $external_log == 1 ]]; then + _notrun "metadump v1 does not support external log device" +fi + +echo "Initialize and mount filesystem on flakey device" +_init_flakey +_load_flakey_table $FLAKEY_ALLOW_WRITES +_mount_flakey + +echo "Create test file" +$XFS_IO_PROG -s -f -c "pwrite 0 5M" $testfile >> $seqres.full + +echo "Punch alternative blocks of test file" +$here/src/punch-alternating $testfile + +echo "Mount cycle the filesystem on flakey device" +_unmount_flakey +_mount_flakey + +device=$(readlink -f $FLAKEY_DEV) +device=$(_short_dev $device) + +echo "Pin log items in the AIL" +echo 1 > /sys/fs/xfs/${device}/errortag/log_item_pin + +echo "Create two checkpoint transactions on ondisk log" +for ct in $(seq 1 2); do + offset=$(xfs_io -c 'fiemap' $testfile | tac | grep -v hole | \ + head -n 1 | awk -F '[\\[.]' '{ print $2 * 512; }') + $XFS_IO_PROG -c "truncate $offset" -c fsync $testfile +done + +echo "Drop writes to filesystem from here onwards" +_load_flakey_table $FLAKEY_DROP_WRITES + +echo "Unpin log items in AIL" +echo 0 > /sys/fs/xfs/${device}/errortag/log_item_pin + +echo "Unmount filesystem on flakey device" +_unmount_flakey + +echo "Clean up flakey device" +_cleanup_flakey + +echo -n "Filesystem has a " +_print_logstate + +echo "Create metadump file, restore it and check restored fs" +for md_version in $(seq 1 $max_md_version); do + [[ $md_version == 1 && $external_log == 1 ]] && continue + + version="" + if [[ $max_md_version == 2 ]]; then + version="-v $md_version" + fi + + _scratch_xfs_metadump $metadump_file -a -o $version + _scratch_xfs_mdrestore $metadump_file + + _scratch_mount + _check_scratch_fs + _scratch_unmount +done + +# success, all done +status=0 +exit diff --git a/tests/xfs/801.out b/tests/xfs/801.out new file mode 100644 index 00000000..a2f2abca --- /dev/null +++ b/tests/xfs/801.out @@ -0,0 +1,14 @@ +QA output created by 801 +Format filesystem on scratch device +Initialize and mount filesystem on flakey device +Create test file +Punch alternative blocks of test file +Mount cycle the filesystem on flakey device +Pin log items in the AIL +Create two checkpoint transactions on ondisk log +Drop writes to filesystem from here onwards +Unpin log items in AIL +Unmount filesystem on flakey device +Clean up flakey device +Filesystem has a dirty log +Create metadump file, restore it and check restored fs -- 2.43.0 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 5/5] xfs: Check correctness of metadump/mdrestore's ability to work with dirty log 2024-01-02 8:43 ` [PATCH 5/5] xfs: Check correctness of metadump/mdrestore's ability to work with dirty log Chandan Babu R @ 2024-01-03 5:44 ` Darrick J. Wong 2024-01-05 13:36 ` Chandan Babu R 0 siblings, 1 reply; 16+ messages in thread From: Darrick J. Wong @ 2024-01-03 5:44 UTC (permalink / raw) To: Chandan Babu R; +Cc: fstests, linux-xfs, zlang On Tue, Jan 02, 2024 at 02:13:52PM +0530, Chandan Babu R wrote: > Add a new test to verify if metadump/mdrestore are able to dump and restore > the contents of a dirty log. > > Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> > --- > tests/xfs/801 | 115 ++++++++++++++++++++++++++++++++++++++++++++++ > tests/xfs/801.out | 14 ++++++ > 2 files changed, 129 insertions(+) > create mode 100755 tests/xfs/801 > create mode 100644 tests/xfs/801.out > > diff --git a/tests/xfs/801 b/tests/xfs/801 > new file mode 100755 > index 00000000..3ed559df > --- /dev/null > +++ b/tests/xfs/801 > @@ -0,0 +1,115 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2024 Oracle, Inc. All Rights Reserved. > +# > +# FS QA Test 801 > +# > +# Test metadump/mdrestore's ability to dump a dirty log and restore it > +# correctly. > +# > +. ./common/preamble > +_begin_fstest auto quick metadump log logprint punch > + > +# Override the default cleanup function. > +_cleanup() > +{ > + cd / > + rm -r -f $tmp.* > + _scratch_unmount > /dev/null 2>&1 > +} > + > +# Import common functions. > +. ./common/dmflakey > +. ./common/inject > + > +# real QA test starts here > +_supported_fs xfs > +_require_scratch > +_require_test > +_require_xfs_debug > +_require_xfs_io_error_injection log_item_pin > +_require_dm_target flakey > +_require_xfs_io_command "pwrite" > +_require_test_program "punch-alternating" > + > +metadump_file=${TEST_DIR}/${seq}.md > +testfile=${SCRATCH_MNT}/testfile > + > +echo "Format filesystem on scratch device" > +_scratch_mkfs >> $seqres.full 2>&1 > + > +max_md_version=1 > +_scratch_metadump_v2_supported && max_md_version=2 > + > +external_log=0 > +if [[ $USE_EXTERNAL = yes && -n "$SCRATCH_LOGDEV" ]]; then > + external_log=1 > +fi > + > +if [[ $max_md_version == 1 && $external_log == 1 ]]; then > + _notrun "metadump v1 does not support external log device" > +fi > + > +echo "Initialize and mount filesystem on flakey device" > +_init_flakey > +_load_flakey_table $FLAKEY_ALLOW_WRITES > +_mount_flakey > + > +echo "Create test file" > +$XFS_IO_PROG -s -f -c "pwrite 0 5M" $testfile >> $seqres.full > + > +echo "Punch alternative blocks of test file" > +$here/src/punch-alternating $testfile > + > +echo "Mount cycle the filesystem on flakey device" > +_unmount_flakey > +_mount_flakey > + > +device=$(readlink -f $FLAKEY_DEV) > +device=$(_short_dev $device) > + > +echo "Pin log items in the AIL" > +echo 1 > /sys/fs/xfs/${device}/errortag/log_item_pin _scratch_inject_error log_item_pin 1 > + > +echo "Create two checkpoint transactions on ondisk log" > +for ct in $(seq 1 2); do > + offset=$(xfs_io -c 'fiemap' $testfile | tac | grep -v hole | \ $XFS_IO_PROG > + head -n 1 | awk -F '[\\[.]' '{ print $2 * 512; }') > + $XFS_IO_PROG -c "truncate $offset" -c fsync $testfile > +done > + > +echo "Drop writes to filesystem from here onwards" > +_load_flakey_table $FLAKEY_DROP_WRITES > + > +echo "Unpin log items in AIL" > +echo 0 > /sys/fs/xfs/${device}/errortag/log_item_pin _scratch_inject_error log_item_pin 0 > + > +echo "Unmount filesystem on flakey device" > +_unmount_flakey > + > +echo "Clean up flakey device" > +_cleanup_flakey > + > +echo -n "Filesystem has a " > +_print_logstate > + > +echo "Create metadump file, restore it and check restored fs" > +for md_version in $(seq 1 $max_md_version); do > + [[ $md_version == 1 && $external_log == 1 ]] && continue > + > + version="" > + if [[ $max_md_version == 2 ]]; then > + version="-v $md_version" > + fi > + > + _scratch_xfs_metadump $metadump_file -a -o $version > + _scratch_xfs_mdrestore $metadump_file Don't you want to mdrestore to a file or something so that the next iteration of the loop will still be dumping from the exact same fs? --D > + > + _scratch_mount > + _check_scratch_fs > + _scratch_unmount > +done > + > +# success, all done > +status=0 > +exit > diff --git a/tests/xfs/801.out b/tests/xfs/801.out > new file mode 100644 > index 00000000..a2f2abca > --- /dev/null > +++ b/tests/xfs/801.out > @@ -0,0 +1,14 @@ > +QA output created by 801 > +Format filesystem on scratch device > +Initialize and mount filesystem on flakey device > +Create test file > +Punch alternative blocks of test file > +Mount cycle the filesystem on flakey device > +Pin log items in the AIL > +Create two checkpoint transactions on ondisk log > +Drop writes to filesystem from here onwards > +Unpin log items in AIL > +Unmount filesystem on flakey device > +Clean up flakey device > +Filesystem has a dirty log > +Create metadump file, restore it and check restored fs > -- > 2.43.0 > > ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 5/5] xfs: Check correctness of metadump/mdrestore's ability to work with dirty log 2024-01-03 5:44 ` Darrick J. Wong @ 2024-01-05 13:36 ` Chandan Babu R 0 siblings, 0 replies; 16+ messages in thread From: Chandan Babu R @ 2024-01-05 13:36 UTC (permalink / raw) To: Darrick J. Wong; +Cc: fstests, linux-xfs, zlang On Tue, Jan 02, 2024 at 09:44:00 PM -0800, Darrick J. Wong wrote: > On Tue, Jan 02, 2024 at 02:13:52PM +0530, Chandan Babu R wrote: >> Add a new test to verify if metadump/mdrestore are able to dump and restore >> the contents of a dirty log. >> >> Signed-off-by: Chandan Babu R <chandanbabu@kernel.org> >> --- >> tests/xfs/801 | 115 ++++++++++++++++++++++++++++++++++++++++++++++ >> tests/xfs/801.out | 14 ++++++ >> 2 files changed, 129 insertions(+) >> create mode 100755 tests/xfs/801 >> create mode 100644 tests/xfs/801.out >> >> diff --git a/tests/xfs/801 b/tests/xfs/801 >> new file mode 100755 >> index 00000000..3ed559df >> --- /dev/null >> +++ b/tests/xfs/801 >> @@ -0,0 +1,115 @@ >> +#! /bin/bash >> +# SPDX-License-Identifier: GPL-2.0 >> +# Copyright (c) 2024 Oracle, Inc. All Rights Reserved. >> +# >> +# FS QA Test 801 >> +# >> +# Test metadump/mdrestore's ability to dump a dirty log and restore it >> +# correctly. >> +# >> +. ./common/preamble >> +_begin_fstest auto quick metadump log logprint punch >> + >> +# Override the default cleanup function. >> +_cleanup() >> +{ >> + cd / >> + rm -r -f $tmp.* >> + _scratch_unmount > /dev/null 2>&1 >> +} >> + >> +# Import common functions. >> +. ./common/dmflakey >> +. ./common/inject >> + >> +# real QA test starts here >> +_supported_fs xfs >> +_require_scratch >> +_require_test >> +_require_xfs_debug >> +_require_xfs_io_error_injection log_item_pin >> +_require_dm_target flakey >> +_require_xfs_io_command "pwrite" >> +_require_test_program "punch-alternating" >> + >> +metadump_file=${TEST_DIR}/${seq}.md >> +testfile=${SCRATCH_MNT}/testfile >> + >> +echo "Format filesystem on scratch device" >> +_scratch_mkfs >> $seqres.full 2>&1 >> + >> +max_md_version=1 >> +_scratch_metadump_v2_supported && max_md_version=2 >> + >> +external_log=0 >> +if [[ $USE_EXTERNAL = yes && -n "$SCRATCH_LOGDEV" ]]; then >> + external_log=1 >> +fi >> + >> +if [[ $max_md_version == 1 && $external_log == 1 ]]; then >> + _notrun "metadump v1 does not support external log device" >> +fi >> + >> +echo "Initialize and mount filesystem on flakey device" >> +_init_flakey >> +_load_flakey_table $FLAKEY_ALLOW_WRITES >> +_mount_flakey >> + >> +echo "Create test file" >> +$XFS_IO_PROG -s -f -c "pwrite 0 5M" $testfile >> $seqres.full >> + >> +echo "Punch alternative blocks of test file" >> +$here/src/punch-alternating $testfile >> + >> +echo "Mount cycle the filesystem on flakey device" >> +_unmount_flakey >> +_mount_flakey >> + >> +device=$(readlink -f $FLAKEY_DEV) >> +device=$(_short_dev $device) >> + >> +echo "Pin log items in the AIL" >> +echo 1 > /sys/fs/xfs/${device}/errortag/log_item_pin > > _scratch_inject_error log_item_pin 1 > _scratch_inject_error() internally uses $SCRATCH_DEV. This is not suitable for the test since we are working with $FLAKEY_DEV. >> + >> +echo "Create two checkpoint transactions on ondisk log" >> +for ct in $(seq 1 2); do >> + offset=$(xfs_io -c 'fiemap' $testfile | tac | grep -v hole | \ > > $XFS_IO_PROG > I will fix it up. >> + head -n 1 | awk -F '[\\[.]' '{ print $2 * 512; }') >> + $XFS_IO_PROG -c "truncate $offset" -c fsync $testfile >> +done >> + >> +echo "Drop writes to filesystem from here onwards" >> +_load_flakey_table $FLAKEY_DROP_WRITES >> + >> +echo "Unpin log items in AIL" >> +echo 0 > /sys/fs/xfs/${device}/errortag/log_item_pin > > _scratch_inject_error log_item_pin 0 > >> + >> +echo "Unmount filesystem on flakey device" >> +_unmount_flakey >> + >> +echo "Clean up flakey device" >> +_cleanup_flakey >> + >> +echo -n "Filesystem has a " >> +_print_logstate >> + >> +echo "Create metadump file, restore it and check restored fs" >> +for md_version in $(seq 1 $max_md_version); do >> + [[ $md_version == 1 && $external_log == 1 ]] && continue >> + >> + version="" >> + if [[ $max_md_version == 2 ]]; then >> + version="-v $md_version" >> + fi >> + >> + _scratch_xfs_metadump $metadump_file -a -o $version >> + _scratch_xfs_mdrestore $metadump_file > > Don't you want to mdrestore to a file or something so that the next > iteration of the loop will still be dumping from the exact same fs? Yes, you are right. I will make the required changes. -- Chandan ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2024-01-06 17:10 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-01-02 8:43 [PATCH 0/5] Add support for testing XFS metadump v2 Chandan Babu R 2024-01-02 8:43 ` [PATCH 1/5] common/xfs: Do not append -a and -o options to metadump Chandan Babu R 2024-01-02 18:10 ` Darrick J. Wong 2024-01-05 6:54 ` Chandan Babu R 2024-01-06 17:10 ` Darrick J. Wong 2024-01-02 8:43 ` [PATCH 2/5] common/xfs: Add function to detect support for metadump v2 Chandan Babu R 2024-01-02 18:27 ` Darrick J. Wong 2024-01-05 7:03 ` Chandan Babu R 2024-01-02 8:43 ` [PATCH 3/5] _scratch_xfs_mdrestore: Pass scratch log device when applicable Chandan Babu R 2024-01-02 19:11 ` Darrick J. Wong 2024-01-02 8:43 ` [PATCH 4/5] xfs: Add support for testing metadump v2 Chandan Babu R 2024-01-03 5:57 ` Darrick J. Wong 2024-01-05 7:04 ` Chandan Babu R 2024-01-02 8:43 ` [PATCH 5/5] xfs: Check correctness of metadump/mdrestore's ability to work with dirty log Chandan Babu R 2024-01-03 5:44 ` Darrick J. Wong 2024-01-05 13:36 ` Chandan Babu R
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).