]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/filestore: fix do_copy_range replay bug 20832/head
authorSage Weil <sage@redhat.com>
Sat, 10 Mar 2018 20:52:45 +0000 (14:52 -0600)
committerSage Weil <sage@redhat.com>
Sat, 10 Mar 2018 20:55:17 +0000 (14:55 -0600)
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 <sage@redhat.com>
src/os/filestore/FileStore.cc

index 29a7c444a59af8932345b8be0136fbaa8b7d67b1..5e8baa7d92d173136b4f7b9b5dfa3f3bf1fba987 100644 (file)
@@ -3939,7 +3939,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) {