Re: [PATCH] xfs: test xfsdump subtree restores

Donald Douwsma <[email protected]>
Newsgroups org.kernel.vger.fstests,org.kernel.vger.linux-xfs
Message-ID <[email protected]>
G'day Zorro,

On 8/5/26 02:59, Zorro Lang wrote:
> On Thu, Mar 26, 2026 at 02:00:12PM +1100, Donald Douwsma wrote:
>> Regression test for cumulative restores where a directory has been
>> renamed outside of the subtree being restored triggering the assert:
>>
>>   xfsrestore: tree.c:1421: noref_elim_recurse: Assertion 'isrealpr' failed
>>
>> Signed-off-by: Donald Douwsma <[email protected]>
>> ---
>>  tests/xfs/995     | 51 +++++++++++++++++++++++++++++++++++++++++++++++
>>  tests/xfs/995.out |  2 ++
>>  2 files changed, 53 insertions(+)
>>  create mode 100755 tests/xfs/995
>>  create mode 100644 tests/xfs/995.out
>>
>> diff --git a/tests/xfs/995 b/tests/xfs/995
>> new file mode 100755
>> index 00000000..54172572
>> --- /dev/null
>> +++ b/tests/xfs/995
>> @@ -0,0 +1,51 @@
>> +#! /bin/bash
>> +# SPDX-License-Identifier: GPL-2.0
>> +# Copyright (c) 2026 Red Hat.  All Rights Reserved.
>> +#
>> +# FS QA Test 995
>> +#
>> +# Regression test for cumulative restores where a directory has been
>> +# renamed outside of the subtree being restored resulting in
>> +#
>> +#   xfsrestore: tree.c:1421: noref_elim_recurse: Assertion 'isrealpr' failed
>> +#
>> +. ./common/preamble
>> +_begin_fstest auto dump
>> +
>> +_fixed_by_git_commit xfsdump XXXXXXX \
>> +	"xfsrestore: only process subtrees that are selected"
>> +
>> +# Override the default cleanup function.
>> +_cleanup()
>> +{
>> +	_cleanup_dump
>> +	cd /
>> +	rm -r -f $tmp.*
>> +}
>> +
>> +# Import common functions.
>> +. ./common/dump
>> +
>> +# Modify as appropriate.
>> +_require_scratch
>> +_scratch_mkfs_xfs >>$seqres.full
>> +_scratch_mount
>> +
>> +mkdir -p $SCRATCH_MNT/a/b/c/d/e/f/g
>> +mkdir -p $SCRATCH_MNT/restore_me/B/C/D/E/F/G
>> +
>> +_do "$XFSDUMP_PROG -L "lab_l0" -M "test" -l0 -f $tmp.dump.l0 $SCRATCH_MNT"
>> +
>> +mv $SCRATCH_MNT/a/b/c $SCRATCH_MNT/1
>> +
>> +_do "$XFSDUMP_PROG -L "lab_l2" -M "test" -l2 -f $tmp.dump.l2 $SCRATCH_MNT"
>> +
>> +dir=$(mktemp -d $SCRATCH_MNT/restore_XXX)
>> +_do "$XFSRESTORE_PROG -f $tmp.dump.l0 -r -s restore_me $dir"
>> +_do "$XFSRESTORE_PROG -f $tmp.dump.l2 -r $dir"
> 
> Hi Donald,
> 
> I almost forgot we had this _do helper :)
> 
> I think your test target is the 2nd xfsrestore command line (about incremental
> changes), a comment might be good.

Ack

> I saw used four _do calls here. I just checked the logic of the _do helper, I
> suspect your current usage might prevent the test from catching command failures,
> allowing it to 'successfully' continue...

*sigh* thanks for pointing this out, I switched to using _do for the ease of
redirecting to seqres.full. I found having the full output available was useful
when investigating (coupled with adding -v tree=debug).

I couldn't figure out why my failing test started succeeding even though it aborted,
which is why i added the test.

The second two are a duplicate, earlier I had a bunch more cases, including
restoring without -s, and restoring the l2 dump on its own, must have fumbled a 
cut-n-pasta, I'll revise to cover these edge cases.

> A simple fix would be adding a "note" as a first argument to each _do helper call,
> e.g:
>   _do "Full dump" "$XFSDUMP_PROG ..."

> Once all four calls are updated this way, we can remove the "test $? -ne 0 && exit"
> lines too, and rely on golden image matching to detect any failures. What do you
> think?

Once i fix _do the coredump control may start working again, in which case we'd see
a failure with "[dumped core]".

Don

> 
>> +
>> +test $? -ne 0 && exit
>> +
>> +echo Silence is golden
>> +# success, all done
>> +_exit 0
>> diff --git a/tests/xfs/995.out b/tests/xfs/995.out
>> new file mode 100644
>> index 00000000..776fa6f2
>> --- /dev/null
>> +++ b/tests/xfs/995.out
>> @@ -0,0 +1,2 @@
>> +QA output created by 995
>> +Silence is golden
>> -- 
>> 2.47.3
>>
>>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.