#!/bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (C) 2020 SUSE Linux Products GmbH. All Rights Reserved. # # FS QA Test No. ceph/002 # # Test bug found while testing copy_file_range. # # This bug was an issue with how the OSDs handled the truncate_seq, copying it # from the original object into the destination object. This test ensures the # kernel client correctly handles fixed/non-fixed OSDs. # # The bug was tracked here: # # https://tracker.ceph.com/issues/37378 # # The most relevant commits are: # # ceph OSD: dcd6a99ef9f5 ("osd: add new 'copy-from2' operation") # linux kernel: 78beb0ff2fec ("ceph: use copy-from2 op in copy_file_range") # . ./common/preamble _begin_fstest auto quick copy_range # get standard environment . common/filter . common/attr # real QA test starts here _supported_fs ceph _require_xfs_io_command "copy_range" _exclude_test_mount_option "test_dummy_encryption" _require_attrs _require_test workdir=$TEST_DIR/test-$seq rm -rf $workdir mkdir $workdir # Use 4M object size objsz=4194304 file="$workdir/file-$objsz" dest="$workdir/dest-$objsz" # object_size has to be a multiple of stripe_unit _ceph_create_file_layout $file $objsz 1 $objsz _ceph_create_file_layout $dest $objsz 1 $objsz # Create a 3 objects size files $XFS_IO_PROG -c "pwrite -S 0x61 0 $objsz" $file >> $seqres.full 2>&1 $XFS_IO_PROG -c "pwrite -S 0x62 $objsz $objsz" $file >> $seqres.full 2>&1 $XFS_IO_PROG -c "pwrite -S 0x63 $(($objsz * 2)) $objsz" $file >> $seqres.full 2>&1 $XFS_IO_PROG -c "pwrite -S 0x64 0 $(($objsz * 3))" $dest >> $seqres.full 2>&1 # Truncate the destination file (messing up with the truncate_seq) $XFS_IO_PROG -c "truncate 0" $dest >> $seqres.full 2>&1 # copy the whole file over $XFS_IO_PROG -c "copy_range -s 0 -d 0 -l $(($objsz * 3)) $file" "$dest" _hexdump $dest #success, all done status=0 exit