From: fdmanana@kernel.org
To: fstests@vger.kernel.org
Cc: linux-btrfs@vger.kernel.org, Filipe Manana <fdmanana@suse.com>
Subject: [PATCH Resend] fstests: generic/158, test dedupe with destination offset past EOF
Date: Mon, 15 Feb 2016 10:53:55 +0000 [thread overview]
Message-ID: <1455533635-7655-1-git-send-email-fdmanana@kernel.org> (raw)
From: Filipe Manana <fdmanana@suse.com>
We were testing when the source file offset starts at EOF or beyond,
but not when the destination offset is beyond EOF or when the
destination offset is smaller than EOF but destination offset plus
dedup length is greater than EOF.
This is motivated by a bug in btrfs' extent_same (dedup) ioctl where
we allowed the destination offset to start at EOF and beyond (and
destination offset + length beyond EOF) for the case where the source
and destination files are the same (was not allowed for different
files used as source and destination). This also made the file's
metadata inconsistent when the dedup operation succeeded, which
happened when the source range corresponded to a file hole, prealloc
extent or a data extent filled with zeroes.
The btrfs issue is fixed by the following patch for the linux kernel:
"Btrfs: fix extent_same allowing destination offset beyond i_size"
Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
Resent since it was not picked in the last update.
Rebased against current master branch.
tests/generic/158 | 10 +++++++++-
tests/generic/158.out | 6 +++++-
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/tests/generic/158 b/tests/generic/158
index 0da5daa..38506c9 100755
--- a/tests/generic/158
+++ b/tests/generic/158
@@ -97,9 +97,17 @@ _dedupe_range $testdir1/file1 37 $testdir1/file1 59 23
echo "Try overlapping dedupe"
_dedupe_range $testdir1/file1 0 $testdir1/file1 1 $((blksz * 2))
-echo "Try dedupe past EOF"
+echo "Try dedupe from past EOF"
_dedupe_range $testdir1/file1 $(( (blks + 10) * blksz)) $testdir1/file1 0 $blksz
+echo "Try dedupe to past EOF, destination offset beyond EOF"
+_dedupe_range $testdir1/file1 0 $testdir1/file1 $(( (blks + 10) * blksz )) \
+ $blksz
+
+echo "Try dedupe to past EOF, destination offset behind EOF"
+_dedupe_range $testdir1/file1 0 $testdir1/file1 $(( (blks - 1) * blksz )) \
+ $(( blksz * 2 ))
+
echo "Try to dedupe a dir"
_dedupe_range $testdir1/dir1 0 $testdir1/file2 0 $blksz
diff --git a/tests/generic/158.out b/tests/generic/158.out
index 7f88403..9b82ddf 100644
--- a/tests/generic/158.out
+++ b/tests/generic/158.out
@@ -7,7 +7,11 @@ Try unaligned dedupe
dedupe: Invalid argument
Try overlapping dedupe
dedupe: Invalid argument
-Try dedupe past EOF
+Try dedupe from past EOF
+dedupe: Invalid argument
+Try dedupe to past EOF, destination offset beyond EOF
+dedupe: Invalid argument
+Try dedupe to past EOF, destination offset behind EOF
dedupe: Invalid argument
Try to dedupe a dir
XFS_IOC_FILE_EXTENT_SAME: Is a directory
--
2.7.0.rc3
reply other threads:[~2016-02-15 10:54 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1455533635-7655-1-git-send-email-fdmanana@kernel.org \
--to=fdmanana@kernel.org \
--cc=fdmanana@suse.com \
--cc=fstests@vger.kernel.org \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).