summaryrefslogtreecommitdiff
path: root/tests/btrfs/035
blob: dac2fff7dcdf9d430f42673d6e0a98fc56a7595a (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
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2014 SUSE Linux Products GmbH. All Rights Reserved.
#
# FS QA Test No. btrfs/035
#
# Regression test for overwriting clones
#
. ./common/preamble
_begin_fstest auto quick clone

. ./common/filter
. ./common/filter.btrfs

_supported_fs btrfs
_require_scratch
_require_cloner

_scratch_mkfs > /dev/null 2>&1
_scratch_mount

src_str="aaaaaaaaaa"

echo -n "$src_str" > $SCRATCH_MNT/src

$CLONER_PROG $SCRATCH_MNT/src  $SCRATCH_MNT/src.clone1

src_str="bbbbbbbbbbcccccccccc"

echo -n "$src_str" > $SCRATCH_MNT/src

$CLONER_PROG $SCRATCH_MNT/src $SCRATCH_MNT/src.clone2

snap_src_sz=`ls -lah $SCRATCH_MNT/src.clone1 | $AWK_PROG '{print $5}'`
echo "attempting ioctl (src.clone1 src)"
$CLONER_PROG -s 0 -d 0 -l ${snap_src_sz} \
	$SCRATCH_MNT/src.clone1 $SCRATCH_MNT/src | _filter_btrfs_cloner_error

# The clone operation should have failed. If it did not it meant we had data
# loss, because file "src.clone1" has an inline extent which is 10 bytes long
# while file "src" has an inline extent which is 20 bytes long. The clone
# operation would remove the inline extent of "src" and then copy the inline
# extent from "src.clone1" into "src", which means we would lose the last 10
# bytes of data from "src" (on read we would get 0x00 as the value for any
# of those 10 bytes, because the file's size remains as 20 bytes).
echo "File src data after attempt to clone from src.clone1 into src:"
od -t x1 $SCRATCH_MNT/src

snap_src_sz=`ls -lah $SCRATCH_MNT/src.clone2 | $AWK_PROG '{print $5}'`
echo "attempting ioctl (src.clone2 src)"
$CLONER_PROG -s 0 -d 0 -l ${snap_src_sz} \
	$SCRATCH_MNT/src.clone2 $SCRATCH_MNT/src

# The clone operation should have succeeded.
echo "File src data after attempt to clone from src.clone2 into src:"
od -t x1 $SCRATCH_MNT/src

status=0 ; exit