]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: repair the PG_DEBUG_REFS build
authorGreg Farnum <gfarnum@redhat.com>
Wed, 24 May 2017 07:36:00 +0000 (00:36 -0700)
committerGreg Farnum <gfarnum@redhat.com>
Thu, 25 May 2017 18:42:01 +0000 (11:42 -0700)
Signed-off-by: Greg Farnum <gfarnum@redhat.com>
src/common/tracked_int_ptr.hpp
src/osd/OSD.cc
src/osd/OSD.h
src/osd/PG.cc
src/osd/Session.h

index dfc74934724579c6e7be7805d0b5c5bf150e9f32..5752906b18cddc038ecff0b82c858d80d16148f7 100644 (file)
@@ -44,18 +44,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;
   }
@@ -65,6 +61,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 01b8bd85974bb54068d046b7ca3cd8c438462da9..0c88a8714f438d17117df6d6bb11b005a77a0b73 100644 (file)
@@ -295,6 +295,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();
@@ -9077,7 +9112,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;
@@ -9085,7 +9120,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);
       osd->wake_pg_waiters(*i);
       (*i)->unlock();
     }
index 3ea99d9037c5cca68dd12e5ff59ccdeb9693bc3f..0b6cedd09f17fbfbd4cef83fbac644b685b745d7 100644 (file)
@@ -1248,33 +1248,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 fe248331e7c6139176caa903ad2fed37d649df65..70c3a3807173338469dc78ccbc642c89a999035b 100644 (file)
@@ -167,7 +167,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);
index 5abcb0da3d1291dfc58f83bdf0099dd97788d190..8e26a7262d212ea4680738047636cea08b8322e5 100644 (file)
@@ -27,7 +27,12 @@ typedef boost::intrusive_ptr<Session> SessionRef;
 struct Backoff;
 typedef boost::intrusive_ptr<Backoff> BackoffRef;
 class PG;
+#ifdef PG_DEBUG_REFS
+#include "common/tracked_int_ptr.hpp"
+typedef TrackedIntPtr<PG> PGRef;
+#else
 typedef boost::intrusive_ptr<PG> PGRef;
+#endif
 
 /*
  * A Backoff represents one instance of either a PG or an OID