From 70d107b880b7b76738d9ea9729e469a6716d2c56 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sat, 10 Mar 2018 14:52:45 -0600 Subject: [PATCH] os/filestore: fix do_copy_range replay bug The 'from' value is an fd, not an offset. We want 'r' to be the number of bytes copied, or len. It looks like this has been broken since 9499cdcd87ddac4a91abffe401baddb91f8a11d5 Fixes: http://tracker.ceph.com/issues/23298 Signed-off-by: Sage Weil (cherry picked from commit df7fa174ad604822c034226593ff1eb700506e4a) --- src/os/filestore/FileStore.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/os/filestore/FileStore.cc b/src/os/filestore/FileStore.cc index 8b596a723616..cd4972c1a9d5 100644 --- a/src/os/filestore/FileStore.cc +++ b/src/os/filestore/FileStore.cc @@ -3888,7 +3888,7 @@ int FileStore::_do_copy_range(int from, int to, uint64_t srcoff, uint64_t len, u if (r < 0 && replaying) { assert(r == -ERANGE); derr << __FUNC__ << ": short source tolerated because we are replaying" << dendl; - r = pos - from;; + r = len; } assert(replaying || pos == end); if (r >= 0 && !skip_sloppycrc && m_filestore_sloppy_crc) { -- 2.47.3