blob: ef1de82db99c52c1d995df52ffebbdb69eb596d7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#! /bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2024 Oracle. All Rights Reserved.
#
# FS QA Test 744
#
# Set up a filesystem, create a clone, mount both, and verify if the cp reflink
# operation between these two mounts fails.
#
. ./common/preamble
_begin_fstest auto clone volume tempfsid
_cleanup()
{
cd /
rm -r -f $tmp.*
$UMOUNT_PROG $mnt2 &> /dev/null
$UMOUNT_PROG $mnt1 &> /dev/null
[ -b "$loop_dev2" ] && losetup -d $loop_dev2
[ -b "$loop_dev1" ] && losetup -d $loop_dev1
[ -n "$seq" ] && rm -rf $TEST_DIR/$seq
}
. ./common/filter
. ./common/reflink
# Modify as appropriate.
_supported_fs generic
_require_duplicate_fsid
_require_test
_require_block_device $TEST_DEV
_require_test_reflink
_require_cp_reflink
_require_loop
clone_filesystem()
{
local dev1=$1
local dev2=$2
_mkfs_dev $dev1
_mount $dev1 $mnt1
$XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' $mnt1/foo >> $seqres.full
$UMOUNT_PROG $mnt1
# device dump of $dev1 to $dev2
dd if=$dev1 of=$dev2 conv=fsync status=none || _fail "dd failed: $?"
}
[ -n "$seq" ] && rm -rf $TEST_DIR/$seq
mkdir $TEST_DIR/$seq
mnt1=$TEST_DIR/$seq/mnt1
mnt2=$TEST_DIR/$seq/mnt2
mkdir -p $mnt1 $mnt2
loop_file1="$TEST_DIR/$seq/image1"
truncate -s 300m "$loop_file1"
loop_dev1=$(_create_loop_device "$loop_file1")
loop_file2="$TEST_DIR/$seq/image2"
truncate -s 300m "$loop_file2"
loop_dev2=$(_create_loop_device "$loop_file2")
clone_filesystem ${loop_dev1} ${loop_dev2}
# Mounting original device
_mount $loop_dev1 $mnt1
$XFS_IO_PROG -fc 'pwrite -S 0x61 0 9000' $mnt1/foo | _filter_xfs_io
# Mounting cloned device
_mount $loop_dev2 $mnt2 || _fail "mount of cloned device failed"
# cp reflink across two different filesystems must fail
_cp_reflink $mnt1/foo $mnt2/bar 2>&1 | _filter_test_dir
# success, all done
status=0
exit
|