reflink: fix off-by-one errors when iterating file blocks in a loop
authorDarrick J. Wong <darrick.wong@oracle.com>
Sun, 7 Feb 2016 22:27:15 +0000 (09:27 +1100)
committerDave Chinner <david@fromorbit.com>
Sun, 7 Feb 2016 22:27:15 +0000 (09:27 +1100)
When we're iterating file blocks in a loop (via seq), we have to
end at $nr-1, not $nr.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
tests/generic/183
tests/generic/185
tests/generic/186
tests/generic/187
tests/generic/194
tests/generic/195
tests/xfs/129
tests/xfs/140

index 5c65e9a6e8555e20a93a9535c0636bfb49bbe0f1..2cf9ce4ef0ecac8a68d08a3f865c54b3099ef0aa 100755 (executable)
@@ -69,7 +69,7 @@ seq 0 2 $((NR-1)) | while read f; do
        _reflink_range "$TESTDIR/file1" $((BLKSZ * f)) "$TESTDIR/file3" $((BLKSZ * f)) $BLKSZ >> "$seqres.full"
        _pwrite_byte 0x61 $((BLKSZ * f)) $BLKSZ "$TESTDIR/file3.chk" >> "$seqres.full"
 done
-seq 1 2 $NR | while read f; do
+seq 1 2 $((NR-1)) | while read f; do
        _reflink_range "$TESTDIR/file2" $((BLKSZ * f)) "$TESTDIR/file3" $((BLKSZ * f)) $BLKSZ >> "$seqres.full"
        _pwrite_byte 0x62 $((BLKSZ * f)) $BLKSZ "$TESTDIR/file3.chk" >> "$seqres.full"
 done
index 384c9aa63c6afa3f0b144fb009fa247ae207a23a..55c54ac4c4a714b6361ec63751b08d365630bf48 100755 (executable)
@@ -69,7 +69,7 @@ seq 0 2 $((NR-1)) | while read f; do
        _reflink_range "$TESTDIR/file1" $((BLKSZ * f)) "$TESTDIR/file3" $((BLKSZ * f)) $BLKSZ >> "$seqres.full"
        _pwrite_byte 0x61 $((BLKSZ * f)) $BLKSZ "$TESTDIR/file3.chk" >> "$seqres.full"
 done
-seq 1 2 $NR | while read f; do
+seq 1 2 $((NR-1)) | while read f; do
        _reflink_range "$TESTDIR/file2" $((BLKSZ * f)) "$TESTDIR/file3" $((BLKSZ * f)) $BLKSZ >> "$seqres.full"
        _pwrite_byte 0x62 $((BLKSZ * f)) $BLKSZ "$TESTDIR/file3.chk" >> "$seqres.full"
 done
index d84166df5d269f8b9f0777e792a3ab82a155d0bd..f1c0e6b24e7615b5c82e1b6a9bb4c20de31c78cf 100755 (executable)
@@ -112,7 +112,7 @@ seq 0 2 $((NR-1)) | while read f; do
        _reflink_range "$TESTDIR/file1" $((BLKSZ * f)) "$TESTDIR/file3" $((BLKSZ * f)) $BLKSZ >> "$seqres.full"
        _pwrite_byte 0x61 $((BLKSZ * f)) $BLKSZ "$TESTDIR/file3.chk" >> "$seqres.full"
 done
-seq 1 2 $NR | while read f; do
+seq 1 2 $((NR-1)) | while read f; do
        _reflink_range "$TESTDIR/file2" $((BLKSZ * f)) "$TESTDIR/file3" $((BLKSZ * f)) $BLKSZ >> "$seqres.full"
        _pwrite_byte 0x62 $((BLKSZ * f)) $BLKSZ "$TESTDIR/file3.chk" >> "$seqres.full"
 done
index c85a0a990b5eaab8a8f9f8321218ebc8cbb9d0b0..ce35ec0faff00af3de8f1e0584352912f4f3a36e 100755 (executable)
@@ -112,7 +112,7 @@ seq 0 2 $((NR-1)) | while read f; do
        _reflink_range "$TESTDIR/file1" $((BLKSZ * f)) "$TESTDIR/file3" $((BLKSZ * f)) $BLKSZ >> "$seqres.full"
        _pwrite_byte 0x61 $((BLKSZ * f)) $BLKSZ "$TESTDIR/file3.chk" >> "$seqres.full"
 done
-seq 1 2 $NR | while read f; do
+seq 1 2 $((NR-1)) | while read f; do
        _reflink_range "$TESTDIR/file2" $((BLKSZ * f)) "$TESTDIR/file3" $((BLKSZ * f)) $BLKSZ >> "$seqres.full"
        _pwrite_byte 0x62 $((BLKSZ * f)) $BLKSZ "$TESTDIR/file3.chk" >> "$seqres.full"
 done
index a441aeec1e8a460f0032b2fe365484dd7ec51398..b88297efaca62e00306ab893c1f575f5b0c3be5f 100755 (executable)
@@ -79,7 +79,7 @@ md5sum "$TESTDIR/file3" | _filter_scratch
 md5sum "$TESTDIR/file3.chk" | _filter_scratch
 
 echo "directio CoW across the transition"
-seq 1 2 $NR | while read f; do
+seq 1 2 $((NR-1)) | while read f; do
        _pwrite_byte 0x62 $((BLKSZ * f)) $BLKSZ "$TESTDIR/file3" >> "$seqres.full"
        _pwrite_byte 0x62 $((BLKSZ * f)) $BLKSZ "$TESTDIR/file3.chk" >> "$seqres.full"
 done
index 83e7b238a382785e9039d7db9b4bc7ce410bf28f..464a4d433b36838439408c6898b142b7e25c27fb 100755 (executable)
@@ -79,7 +79,7 @@ md5sum "$TESTDIR/file3" | _filter_scratch
 md5sum "$TESTDIR/file3.chk" | _filter_scratch
 
 echo "CoW across the transition"
-seq 1 2 $NR | while read f; do
+seq 1 2 $((NR-1)) | while read f; do
        _pwrite_byte 0x62 $((BLKSZ * f)) $BLKSZ "$TESTDIR/file3" >> "$seqres.full"
        _pwrite_byte 0x62 $((BLKSZ * f)) $BLKSZ "$TESTDIR/file3.chk" >> "$seqres.full"
 done
index c8c47a268350559c3b5a8d7895cc11bba5718dfc..3b7c59ca07bba736e88363306d4083b6c3808e41 100755 (executable)
@@ -65,9 +65,9 @@ NR_BLKS=$((4 * BLKSZ / 12))
 _pwrite_byte 0x61 0 $((BLKSZ * NR_BLKS)) "$TESTDIR/file1" >> "$seqres.full"
 
 echo "Reflink every other block"
-seq 1 $((NR_BLKS / 2)) | while read nr; do
-       _reflink_range  "$TESTDIR/file1" $((nr * 2 * BLKSZ)) \
-                       "$TESTDIR/file2" $((nr * 2 * BLKSZ)) $BLKSZ >> "$seqres.full"
+seq 1 2 $((NR_BLKS - 1)) | while read nr; do
+       _reflink_range  "$TESTDIR/file1" $((nr * BLKSZ)) \
+                       "$TESTDIR/file2" $((nr * BLKSZ)) $BLKSZ >> "$seqres.full"
 done
 
 echo "Create metadump file"
index e20cd3f94f747420c08ccbcc18cbbbcb2cce6416..45be9f499eefc33ff82168e11af38c1226c6ab73 100644 (file)
@@ -70,7 +70,7 @@ cmp -s "$TESTDIR/file1" "$TESTDIR/file2" || echo "file1 and file2 do not match"
 cmp -s "$TESTDIR/file2" "$TESTDIR/file2.chk" || echo "file2 and file2.chk do not match"
 
 echo "CoW every other block"
-seq 1 2 $NR | while read f; do
+seq 1 2 $((NR - 1)) | while read f; do
        _pwrite_byte 0x62 $((f * BLKSZ)) $BLKSZ "$TESTDIR/file2" >> "$seqres.full"
        _pwrite_byte 0x62 $((f * BLKSZ)) $BLKSZ "$TESTDIR/file2.chk" >> "$seqres.full"
 done