blob: 02f66842617fb57c92105fac151939af5d15c367 [file] [log] [blame]
#!/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