Message ID | 173258395162.4031902.7701863569170725350.stgit@frogsfrogsfrogs (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/16] generic/757: fix various bugs in this test | expand |
On Mon, Nov 25, 2024 at 05:22:05PM -0800, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@kernel.org> > > This test creates a couple of patterned files on a tiny filesystem, > fragments the free space, clones one patterned file to the other, and > checks that the entire file was cloned. > > However, this test doesn't work on a 64k fsblock filesystem because > we've used up all the free space reservation for the rmapbt, and that > causes the FICLONE to error out with ENOSPC partway through. Hence we > need to detect the ENOSPC and _notrun the test. > > That said, it turns out that XFS has been silently dropping error codes > if we managed to make some progress cloning extents. That's ok if the > operation has REMAP_FILE_CAN_SHORTEN like copy_file_range does, but > FICLONE/FICLONERANGE do not permit partial results, so the dropped error > codes is actually an error. > > Therefore, this testcase now becomes a regression test for the patch to > fix that. Still no big fan of having a btrfs-specific must not ENOSPC assumption in a generic test. So my preference would be to move the must not error at all case into a btrfs specific test and make your newly added ENOSPC handling unconditional. But I guess the state with this patch is strictly better than without, so: Reviewed-by: Christoph Hellwig <hch@lst.de>
diff --git a/tests/generic/562 b/tests/generic/562 index 91360c4154a6a2..36bd02911c96b8 100755 --- a/tests/generic/562 +++ b/tests/generic/562 @@ -15,6 +15,9 @@ _begin_fstest auto clone punch . ./common/filter . ./common/reflink +test "$FSTYP" = "xfs" && \ + _fixed_by_kernel_commit XXXXXXXXXX "xfs: don't drop errno values when we fail to ficlone the entire range" + _require_scratch_reflink _require_test_program "punch-alternating" _require_xfs_io_command "fpunch" @@ -48,8 +51,11 @@ while true; do done # Now clone file bar into file foo. This is supposed to succeed and not fail -# with ENOSPC for example. -_reflink $SCRATCH_MNT/bar $SCRATCH_MNT/foo >>$seqres.full +# with ENOSPC for example. However, XFS will sometimes run out of space. +_reflink $SCRATCH_MNT/bar $SCRATCH_MNT/foo >>$seqres.full 2> $tmp.err +cat $tmp.err +test "$FSTYP" = "xfs" && grep -q 'No space left on device' $tmp.err && \ + _notrun "ran out of space while cloning" # Unmount and mount the filesystem again to verify the operation was durably # persisted.