]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
hammer: ObjectCacher: fix bh_read_finish offset logic 11618/head
authorGreg Farnum <gfarnum@redhat.com>
Mon, 23 May 2016 22:14:21 +0000 (15:14 -0700)
committerAlexey Sheplyakov <asheplyakov@mirantis.com>
Mon, 21 Nov 2016 15:37:26 +0000 (18:37 +0300)
If we have an incoming read split across multiple BufferHeads, we want to
line up the BufferHead's bl with the incoming OSDOp's bl at the right offset. We
were erroneously using this nonsense calculation (always equal to zero!) when
a much simpler comparison of the BufferHead's logical object offset to the
incoming OSDOp's logical offset will do the trick nicely.

Fixes: http://tracker.ceph.com/issues/16002
Signed-off-by: Greg Farnum <gfarnum@redhat.com>
(cherry picked from commit 9ec6e7f608608088d51e449c9d375844631dcdde)

src/osdc/ObjectCacher.cc

index abac935d6020a9213821afe0cb6c26e2cf870b02..d68db6fdb558773b78fe20c2e76e3069d104108a 100644 (file)
@@ -787,7 +787,6 @@ void ObjectCacher::bh_read_finish(int64_t poolid, sobject_t oid, ceph_tid_t tid,
       if (bh->error < 0)
        err = bh->error;
 
-      loff_t oldpos = opos;
       opos = bh->end();
 
       if (r == -ENOENT) {
@@ -807,7 +806,7 @@ void ObjectCacher::bh_read_finish(int64_t poolid, sobject_t oid, ceph_tid_t tid,
        mark_error(bh);
       } else {
        bh->bl.substr_of(bl,
-                        oldpos-bh->start(),
+                        bh->start() - start,
                         bh->length());
        mark_clean(bh);
       }