Re: [PATCH v2 2/2] btrfs/291: fix state transition logic and add size requirement
Anand Jain <[email protected]>
| Newsgroups | org.kernel.vger.fstests,org.kernel.vger.linux-btrfs |
|---|---|
| Message-ID | <[email protected]> |
On 27/4/26 20:25, Disha Goel wrote: > This patch fixes two issues in btrfs/291: > > 1. Add minimum 9GB LOGWRITES_DEV size requirement > The test creates LVM snapshots at each FUA point during replay, > requiring significant space. Use _require_log_writes_sized to > ensure sufficient space is available before running the test. > It also depends on the SCRATCH_DEV size; the fix fails if SCRATCH_DEV is 10G. [ 173.478493] BTRFS error (device dm-3): device total_bytes should be at most 9663676416 but found 10737418240 [ 173.482763] BTRFS error (device dm-3): failed to read chunk tree: -22 [ 173.485457] BTRFS error (device dm-3): open_ctree failed: -22 Thanks. > 2. Fix state transition logic for verity enablement > The original test assumed orphan items would always be created > during verity enablement (state 0->1 transition). However, in > some cases verity completes without creating orphan items, > causing the test to fail with "expected to reach verity done state". > > Fix by transitioning to state 1 when either orphan items exist > OR merkle items appear, handling both verity enablement paths. > Also improve state 1 validation to only check for cleared merkle > items when measurement actually fails. > > The test now correctly handles verity enablement with or without > orphan items while maintaining crash consistency validation. > > v2: > - Use _require_log_writes_sized instead of separate _require_log_writes > and _require_logwrites_size calls > > Signed-off-by: Disha Goel <[email protected]> > --- > tests/btrfs/291 | 17 ++++++++++++----- > 1 file changed, 12 insertions(+), 5 deletions(-) > > diff --git a/tests/btrfs/291 b/tests/btrfs/291 > index 122aeaa5..ac1d192d 100755 > --- a/tests/btrfs/291 > +++ b/tests/btrfs/291 > @@ -36,7 +36,7 @@ _cleanup() > _require_scratch > _require_test > _require_loop > -_require_log_writes > +_require_log_writes_sized $((9 * 1024 * 1024)) > _require_dm_target snapshot > _require_command $LVM_PROG lvm > _require_scratch_verity > @@ -129,9 +129,14 @@ do > _udev_wait /dev/mapper/$vgname-$snapname > > orphan=$(count_item $snap_dev ORPHAN) > - [ $state -eq 0 ] && [ $orphan -gt 0 ] && state=1 > - > pre_mount=$(count_merkle_items $snap_dev) > + > + if [ $state -eq 0 ]; then > + if [ $orphan -gt 0 ] || [ $pre_mount -gt 0 ]; then > + state=1 > + fi > + fi > + > _mount $snap_dev $SCRATCH_MNT || _fail "mount failed at entry $cur" > fsverity measure $SCRATCH_MNT/fsv >>$seqres.full 2>&1 > measured=$? > @@ -143,8 +148,10 @@ do > echo "entry: $cur, state: $state, orphan: $orphan, pre_mount: $pre_mount, post_mount: $post_mount" >> $seqres.full > > if [ $state -eq 1 ]; then > - [ $post_mount -eq 0 ] || \ > - _fail "mount failed to clear under-construction merkle items pre: $pre_mount, post: $post_mount at entry $cur"; > + if [ $measured -ne 0 ]; then > + [ $post_mount -eq 0 ] || \ > + _fail "mount failed to clear under-construction merkle items pre: $pre_mount, post: $post_mount at entry $cur"; > + fi > fi > if [ $state -eq 2 ]; then > [ $pre_mount -gt 0 ] || \