]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: don't memcpy hobject_t in PrimaryLogPG::close_op_ctx(). 21029/head
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Fri, 23 Mar 2018 21:46:02 +0000 (22:46 +0100)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Sun, 25 Mar 2018 01:44:02 +0000 (03:44 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/osd/PrimaryLogPG.h
src/osd/osd_internal_types.h

index c9a8f880e45fe89e143f9e188d24726c5895596d..4f9952c491470221b93effb0850917764ed31cb5 100644 (file)
@@ -814,7 +814,7 @@ protected:
    */
   void release_object_locks(
     ObcLockManager &lock_manager) {
-    list<pair<hobject_t, list<OpRequestRef> > > to_req;
+    list<pair<ObjectContextRef, list<OpRequestRef> > > to_req;
     bool requeue_recovery = false;
     bool requeue_snaptrim = false;
     lock_manager.put_locks(
@@ -829,7 +829,7 @@ protected:
     if (!to_req.empty()) {
       // requeue at front of scrub blocking queue if we are blocked by scrub
       for (auto &&p: to_req) {
-       if (write_blocked_by_scrub(p.first.get_head())) {
+       if (write_blocked_by_scrub(p.first->obs.oi.soid.get_head())) {
           for (auto& op : p.second) {
             op->mark_delayed("waiting for scrub");
           }
index 4217767e677fd9bc62c84501e6a9bd00abbd25a4..57201627e1e34337c029997d832787963865a6c8 100644 (file)
@@ -434,10 +434,10 @@ public:
   }
 
   void put_locks(
-    list<pair<hobject_t, list<OpRequestRef> > > *to_requeue,
+    list<pair<ObjectContextRef, list<OpRequestRef> > > *to_requeue,
     bool *requeue_recovery,
     bool *requeue_snaptrimmer) {
-    for (auto p: locks) {
+    for (auto& p: locks) {
       list<OpRequestRef> _to_requeue;
       p.second.obc->put_lock_type(
        p.second.type,
@@ -445,10 +445,10 @@ public:
        requeue_recovery,
        requeue_snaptrimmer);
       if (to_requeue) {
-       to_requeue->push_back(
-         make_pair(
-           p.second.obc->obs.oi.soid,
-           std::move(_to_requeue)));
+        // We can safely std::move here as the whole `locks` is going
+        // to die just after the loop.
+       to_requeue->emplace_back(std::move(p.second.obc),
+                                std::move(_to_requeue));
       }
     }
     locks.clear();