]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: repair the PG_DEBUG_REFS build
authorGreg Farnum <gfarnum@redhat.com>
Mon, 10 Jul 2017 20:31:21 +0000 (13:31 -0700)
committerGreg Farnum <gfarnum@redhat.com>
Mon, 10 Jul 2017 20:31:21 +0000 (13:31 -0700)
Signed-off-by: Greg Farnum <gfarnum@redhat.com>
(cherry picked from commit ec4185d1980b48b01687a177248d0894f326dc37)

Conflicts:
src/osd/OSD.cc
src/osd/Session.h

src/common/tracked_int_ptr.hpp
src/osd/OSD.cc
src/osd/OSD.h
src/osd/PG.cc

index e0e423835e7ab4f6c0e807aea13f0b544c75105e..86f67ddb9ba9a33fd7f93216e446951d3e5ed2b6 100644 (file)
@@ -50,18 +50,14 @@ public:
     TrackedIntPtr o(rhs.ptr);
     swap(o);
   }
-  const T &operator*() const {
+  T &operator*() const {
     return *ptr;
   }
-  T &operator*() {
-    return *ptr;
-  }
-  const T *operator->() const {
-    return ptr;
-  }
-  T *operator->() {
+  T *operator->() const {
     return ptr;
   }
+  T *get() const { return ptr; }
+
   operator bool() const {
     return ptr != NULL;
   }
@@ -71,6 +67,13 @@ public:
   bool operator==(const TrackedIntPtr &lhs) const {
     return ptr == lhs.ptr;
   }
+
+  void reset() {
+    if (ptr) 
+      put_with_id(ptr, id);
+    ptr = nullptr;
+    id = 0;
+  }
 };
 
 #endif
index 038bfee213296fb14d72cf8bfbc11bcfb0dcf81e..25f7307959c7526a7d28cbe177cc4de5b5c521d1 100644 (file)
@@ -291,6 +291,41 @@ OSDService::~OSDService()
   delete objecter;
 }
 
+
+
+#ifdef PG_DEBUG_REFS
+void OSDService::add_pgid(spg_t pgid, PG *pg){
+  Mutex::Locker l(pgid_lock);
+  if (!pgid_tracker.count(pgid)) {
+    live_pgs[pgid] = pg;
+  }
+  pgid_tracker[pgid]++;
+}
+void OSDService::remove_pgid(spg_t pgid, PG *pg)
+{
+  Mutex::Locker l(pgid_lock);
+  assert(pgid_tracker.count(pgid));
+  assert(pgid_tracker[pgid] > 0);
+  pgid_tracker[pgid]--;
+  if (pgid_tracker[pgid] == 0) {
+    pgid_tracker.erase(pgid);
+    live_pgs.erase(pgid);
+  }
+}
+void OSDService::dump_live_pgids()
+{
+  Mutex::Locker l(pgid_lock);
+  derr << "live pgids:" << dendl;
+  for (map<spg_t, int>::const_iterator i = pgid_tracker.cbegin();
+       i != pgid_tracker.cend();
+       ++i) {
+    derr << "\t" << *i << dendl;
+    live_pgs[i->first]->dump_live_ids();
+  }
+}
+#endif
+
+
 void OSDService::_start_split(spg_t parent, const set<spg_t> &children)
 {
   for (set<spg_t>::const_iterator i = children.begin();
@@ -9102,7 +9137,7 @@ struct C_CompleteSplits : public Context {
         ++i) {
       osd->pg_map_lock.get_write();
       (*i)->lock();
-      PG *pg = (*i).get();
+      PG *pg = i->get();
       osd->add_newly_split_pg(pg, &rctx);
       if (!((*i)->deleting)) {
         set<spg_t> to_complete;
@@ -9110,7 +9145,7 @@ struct C_CompleteSplits : public Context {
         osd->service.complete_split(to_complete);
       }
       osd->pg_map_lock.put_write();
-      osd->dispatch_context_transaction(rctx, &**i);
+      osd->dispatch_context_transaction(rctx, pg);
       (*i)->unlock();
       osd->wake_pg_waiters((*i)->info.pgid);
     }
index c09cd2d81f4bfe24e580185508cdf5d0ff29a9e3..8fa969d3a3e5a2e4d69bf1cd3ae41b35195c4365 100644 (file)
@@ -1149,33 +1149,9 @@ public:
   Mutex pgid_lock;
   map<spg_t, int> pgid_tracker;
   map<spg_t, PG*> live_pgs;
-  void add_pgid(spg_t pgid, PG *pg) {
-    Mutex::Locker l(pgid_lock);
-    if (!pgid_tracker.count(pgid)) {
-      live_pgs[pgid] = pg;
-    }
-    pgid_tracker[pgid]++;
-  }
-  void remove_pgid(spg_t pgid, PG *pg) {
-    Mutex::Locker l(pgid_lock);
-    assert(pgid_tracker.count(pgid));
-    assert(pgid_tracker[pgid] > 0);
-    pgid_tracker[pgid]--;
-    if (pgid_tracker[pgid] == 0) {
-      pgid_tracker.erase(pgid);
-      live_pgs.erase(pgid);
-    }
-  }
-  void dump_live_pgids() {
-    Mutex::Locker l(pgid_lock);
-    derr << "live pgids:" << dendl;
-    for (map<spg_t, int>::const_iterator i = pgid_tracker.cbegin();
-        i != pgid_tracker.cend();
-        ++i) {
-      derr << "\t" << *i << dendl;
-      live_pgs[i->first]->dump_live_ids();
-    }
-  }
+  void add_pgid(spg_t pgid, PG *pg);
+  void remove_pgid(spg_t pgid, PG *pg);
+  void dump_live_pgids();
 #endif
 
   explicit OSDService(OSD *osd);
index 068d337fe58b015e87c1698b4d10ef09d15dbb80..e785d1bcbce6e8c0665a0a71333951d36f9d7103 100644 (file)
@@ -100,7 +100,7 @@ void PG::put(const char* tag)
   {
     Mutex::Locker l(_ref_id_lock);
     auto tag_counts_entry = _tag_counts.find(tag);
-    assert(_tag_counts_entry != _tag_counts.end());
+    assert(tag_counts_entry != _tag_counts.end());
     --tag_counts_entry->second;
     if (tag_counts_entry->second == 0) {
       _tag_counts.erase(tag_counts_entry);