]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: ref ovec for CLONE, CLONERANGE
authorSage Weil <sage@redhat.com>
Thu, 10 Mar 2016 19:25:25 +0000 (14:25 -0500)
committerSage Weil <sage@redhat.com>
Fri, 11 Mar 2016 15:41:39 +0000 (10:41 -0500)
This keeps ovec up to date.  Marginally more efficient.

Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc

index 2b8407a15ab3084f173fb689c70e787d6579b2e2..2dcacdb7820a9a0e40fc5aefe3868905c8ce52c0 100644 (file)
@@ -4450,7 +4450,10 @@ void BlueStore::_txc_add_transaction(TransContext *txc, Transaction *t)
     case Transaction::OP_CLONE:
       {
         const ghobject_t& noid = i.get_oid(op->dest_oid);
-       OnodeRef no = c->get_onode(noid, true);
+       OnodeRef& no = ovec[op->dest_oid];
+       if (!no) {
+         no = c->get_onode(noid, true);
+       }
        r = _clone(txc, c, o, no);
       }
       break;
@@ -4462,7 +4465,10 @@ void BlueStore::_txc_add_transaction(TransContext *txc, Transaction *t)
     case Transaction::OP_CLONERANGE2:
       {
        const ghobject_t& noid = i.get_oid(op->dest_oid);
-       OnodeRef no = c->get_onode(noid, true);
+       OnodeRef& no = ovec[op->dest_oid];
+       if (!no) {
+         no = c->get_onode(noid, true);
+       }
         uint64_t srcoff = op->off;
         uint64_t len = op->len;
         uint64_t dstoff = op->dest_off;