From: Sage Weil Date: Wed, 27 Jan 2016 19:00:51 +0000 (-0500) Subject: os/bluestore/BlueFS: use std::atomic X-Git-Tag: v10.0.4~101^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=bd694d4a6d6367c29c1935c906fe8059dd1368dc;p=ceph.git os/bluestore/BlueFS: use std::atomic Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index 562d477b6c95..bb9c4850dfb2 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -616,7 +616,7 @@ void BlueFS::_drop_link(FileRef file) --file->refs; if (file->refs == 0) { dout(20) << __func__ << " destroying " << file->fnode << dendl; - assert(file->num_reading.read() == 0); + assert(file->num_reading.load() == 0); log_t.op_file_remove(file->fnode.ino); for (auto& r : file->fnode.extents) { alloc[r.bdev]->release(r.offset, r.length); @@ -639,7 +639,7 @@ int BlueFS::_read_random( dout(10) << __func__ << " h " << h << " " << off << "~" << len << " from " << h->file->fnode << dendl; - h->file->num_reading.inc(); + ++h->file->num_reading; if (!h->ignore_eof && off + len > h->file->fnode.size) { @@ -671,7 +671,7 @@ int BlueFS::_read_random( } dout(20) << __func__ << " got " << ret << dendl; - h->file->num_reading.dec(); + --h->file->num_reading; return ret; } @@ -686,7 +686,7 @@ int BlueFS::_read( dout(10) << __func__ << " h " << h << " " << off << "~" << len << " from " << h->file->fnode << dendl; - h->file->num_reading.inc(); + ++h->file->num_reading; if (!h->ignore_eof && off + len > h->file->fnode.size) { @@ -753,7 +753,7 @@ int BlueFS::_read( dout(20) << __func__ << " got " << ret << dendl; assert(!outbl || (int)outbl->length() == ret); - h->file->num_reading.dec(); + --h->file->num_reading; return ret; } @@ -951,7 +951,7 @@ int BlueFS::_flush_range(FileWriter *h, uint64_t offset, uint64_t length) << " " << offset << "~" << length << " to " << h->file->fnode << dendl; assert(!h->file->deleted); - assert(h->file->num_readers.read() == 0); + assert(h->file->num_readers.load() == 0); if (offset + length <= h->pos) return 0; diff --git a/src/os/bluestore/BlueFS.h b/src/os/bluestore/BlueFS.h index 0ade7a9ec30d..a5b639b540c4 100644 --- a/src/os/bluestore/BlueFS.h +++ b/src/os/bluestore/BlueFS.h @@ -3,6 +3,7 @@ #ifndef CEPH_OS_BLUESTORE_BLUEFS_H #define CEPH_OS_BLUESTORE_BLUEFS_H +#include #include #include "bluefs_types.h" @@ -24,20 +25,23 @@ public: bool deleted; boost::intrusive::list_member_hook<> dirty_item; - atomic_t num_readers, num_writers; - atomic_t num_reading; + std::atomic_int num_readers, num_writers; + std::atomic_int num_reading; File() : RefCountedObject(NULL, 0), refs(0), dirty(false), locked(false), - deleted(false) + deleted(false), + num_readers(0), + num_writers(0), + num_reading(0) {} ~File() { - assert(num_readers.read() == 0); - assert(num_writers.read() == 0); - assert(num_reading.read() == 0); + assert(num_readers.load() == 0); + assert(num_writers.load() == 0); + assert(num_reading.load() == 0); assert(!locked); } @@ -81,14 +85,14 @@ public: FileWriter(FileRef f, unsigned num_bdev) : file(f), pos(0) { - file->num_writers.inc(); + ++file->num_writers; iocv.resize(num_bdev); for (unsigned i = 0; i < num_bdev; ++i) { iocv[i] = new IOContext(NULL); } } ~FileWriter() { - file->num_writers.dec(); + --file->num_writers; assert(iocv.empty()); // caller must call BlueFS::close_writer() } @@ -142,10 +146,10 @@ public: buf(mpf), random(rand), ignore_eof(ie) { - file->num_readers.inc(); + ++file->num_readers; } ~FileReader() { - file->num_readers.dec(); + --file->num_readers; } };