summaryrefslogtreecommitdiff
path: root/common/reflink
diff options
context:
space:
mode:
Diffstat (limited to 'common/reflink')
-rw-r--r--common/reflink33
1 files changed, 33 insertions, 0 deletions
diff --git a/common/reflink b/common/reflink
index 76e9cb7d..22adc444 100644
--- a/common/reflink
+++ b/common/reflink
@@ -325,6 +325,39 @@ _weave_reflink_regular() {
done
}
+# Create a file of interleaved holes, unwritten blocks, and regular blocks.
+_weave_file_rainbow() {
+ blksz=$1
+ nr=$2
+ dfile=$3
+
+ $XFS_IO_PROG -f -c "truncate $((blksz * nr))" $dfile
+ _pwrite_byte 0x00 0 $((blksz * nr)) $dfile.chk
+ # 0 blocks are unwritten
+ seq 1 5 $((nr - 1)) | while read i; do
+ $XFS_IO_PROG -f -c "falloc $((blksz * i)) $blksz" $dfile
+ _pwrite_byte 0x00 $((blksz * i)) $blksz $dfile.chk
+ done
+ # 1 blocks are holes
+ seq 2 5 $((nr - 1)) | while read i; do
+ _pwrite_byte 0x00 $((blksz * i)) $blksz $dfile.chk
+ done
+ # 2 blocks are regular
+ seq 3 5 $((nr - 1)) | while read i; do
+ _pwrite_byte 0x71 $((blksz * i)) $blksz $dfile
+ _pwrite_byte 0x71 $((blksz * i)) $blksz $dfile.chk
+ done
+ # 3 blocks are holes
+ seq 2 5 $((nr - 1)) | while read i; do
+ _pwrite_byte 0x00 $((blksz * i)) $blksz $dfile.chk
+ done
+ # 4 blocks are delalloc
+ seq 4 5 $((nr - 1)) | while read i; do
+ _pwrite_byte 0x62 $((blksz * i)) $blksz $dfile
+ _pwrite_byte 0x62 $((blksz * i)) $blksz $dfile.chk
+ done
+}
+
# Create a file of interleaved holes, unwritten blocks, regular blocks, and
# reflinked blocks
_weave_reflink_rainbow() {