From: Jianjian Huo Date: Wed, 17 Feb 2016 05:36:21 +0000 (-0500) Subject: os/kstore: use std::atomic X-Git-Tag: v10.1.0~313^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c03ab962ae5ff8626be0853e2b6e8e25b1c419d7;p=ceph.git os/kstore: use std::atomic Signed-off-by: Jianjian Huo --- diff --git a/src/os/kstore/KStore.cc b/src/os/kstore/KStore.cc index 8ada042c8dfb..219150aa5a5a 100644 --- a/src/os/kstore/KStore.cc +++ b/src/os/kstore/KStore.cc @@ -403,15 +403,6 @@ static void get_omap_tail(uint64_t id, string *out) #undef dout_prefix #define dout_prefix *_dout << "kstore.onode(" << this << ") " -KStore::Onode::Onode(const ghobject_t& o, const string& k) - : nref(0), - oid(o), - key(k), - dirty(false), - exists(true), - flush_lock("KStore::Onode::flush_lock") { -} - void KStore::Onode::flush() { Mutex::Locker l(flush_lock); @@ -552,7 +543,7 @@ int KStore::OnodeHashLRU::trim(int max) --p; while (num > 0) { Onode *o = &*p; - int refs = o->nref.read(); + int refs = o->nref.load(); if (refs > 1) { dout(20) << __func__ << " " << o->oid << " has " << refs << " refs; stopping with " << num << " left to trim" << dendl; diff --git a/src/os/kstore/KStore.h b/src/os/kstore/KStore.h index ecddae5cfa7a..1bc857b2c2ab 100644 --- a/src/os/kstore/KStore.h +++ b/src/os/kstore/KStore.h @@ -19,6 +19,8 @@ #include +#include + #include "include/assert.h" #include "include/unordered_map.h" #include "include/memory.h" @@ -42,7 +44,7 @@ public: /// an in-memory object struct Onode { - atomic_t nref; ///< reference count + std::atomic_int nref; ///< reference count ghobject_t oid; string key; ///< key under PREFIX_OBJ where we are stored @@ -61,14 +63,21 @@ public: map pending_stripes; ///< unwritten stripes - Onode(const ghobject_t& o, const string& k); + Onode(const ghobject_t& o, const string& k) + : nref(0), + oid(o), + key(k), + dirty(false), + exists(true), + flush_lock("KStore::Onode::flush_lock") { + } void flush(); void get() { - nref.inc(); + ++nref; } void put() { - if (nref.dec() == 0) + if (--nref == 0) delete this; }