#undef dout_prefix
#define dout_prefix *_dout << "bluefs "
+MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::File, bluefs_file, bluefs);
+MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::Dir, bluefs_dir, bluefs);
+MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileWriter, bluefs_file_writer, bluefs);
+MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileReaderBuffer,
+ bluefs_file_reader_buffer, bluefs);
+MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileReader, bluefs_file_reader, bluefs);
+MEMPOOL_DEFINE_OBJECT_FACTORY(BlueFS::FileLock, bluefs_file_lock, bluefs);
+
+
BlueFS::BlueFS()
: bdev(MAX_BDEV),
ioc(MAX_BDEV),
int ret = 0;
while (len > 0) {
uint64_t x_off = 0;
- vector<bluefs_extent_t>::iterator p = h->file->fnode.seek(off, &x_off);
+ auto p = h->file->fnode.seek(off, &x_off);
uint64_t l = MIN(p->length - x_off, len);
dout(20) << __func__ << " read buffered 0x"
<< std::hex << x_off << "~" << l << std::dec
buf->bl.clear();
buf->bl_off = off & super.block_mask();
uint64_t x_off = 0;
- vector<bluefs_extent_t>::iterator p =
- h->file->fnode.seek(buf->bl_off, &x_off);
+ auto p = h->file->fnode.seek(buf->bl_off, &x_off);
uint64_t want = ROUND_UP_TO(len + (off & ~super.block_mask()),
super.block_size);
want = MAX(want, buf->max_prefetch);
length = ROUND_UP_TO(length, super.block_size);
}
uint64_t x_off = 0;
- vector<bluefs_extent_t>::iterator p = f->fnode.seek(offset, &x_off);
+ auto p = f->fnode.seek(offset, &x_off);
while (length > 0 && p != f->fnode.extents.end()) {
uint64_t x_len = MIN(p->length - x_off, length);
bdev[p->bdev]->invalidate_cache(p->offset + x_off, x_len);
uint64_t need = bl.length() + g_conf->bluefs_max_log_runway;
dout(20) << __func__ << " need " << need << dendl;
- vector<bluefs_extent_t> old_extents;
+ mempool::bluefs::vector<bluefs_extent_t> old_extents;
old_extents.swap(log_file->fnode.extents);
while (log_file->fnode.get_allocated() < need) {
int r = _allocate(log_file->fnode.prefer_bdev,
dout(10) << __func__ << " remove 0x" << std::hex << old_log_jump_to << std::dec
<< " of " << log_file->fnode.extents << dendl;
uint64_t discarded = 0;
- vector<bluefs_extent_t> old_extents;
+ mempool::bluefs::vector<bluefs_extent_t> old_extents;
while (discarded < old_log_jump_to) {
assert(!log_file->fnode.extents.empty());
bluefs_extent_t& e = log_file->fnode.extents.front();
dout(20) << __func__ << " file now " << h->file->fnode << dendl;
uint64_t x_off = 0;
- vector<bluefs_extent_t>::iterator p = h->file->fnode.seek(offset, &x_off);
+ auto p = h->file->fnode.seek(offset, &x_off);
assert(p != h->file->fnode.extents.end());
dout(20) << __func__ << " in " << *p << " x_off 0x"
<< std::hex << x_off << std::dec << dendl;
}
}
-int BlueFS::_allocate(uint8_t id, uint64_t len, vector<bluefs_extent_t> *ev)
+int BlueFS::_allocate(uint8_t id, uint64_t len,
+ mempool::bluefs::vector<bluefs_extent_t> *ev)
{
dout(10) << __func__ << " len 0x" << std::hex << len << std::dec
<< " from " << (int)id << dendl;
};
struct File : public RefCountedObject {
+ MEMPOOL_CLASS_HELPERS();
+
bluefs_fnode_t fnode;
int refs;
uint64_t dirty_seq;
&File::dirty_item> > dirty_file_list_t;
struct Dir : public RefCountedObject {
- map<string,FileRef> file_map;
+ MEMPOOL_CLASS_HELPERS();
+
+ mempool::bluefs::map<string,FileRef> file_map;
Dir() : RefCountedObject(NULL, 0) {}
typedef boost::intrusive_ptr<Dir> DirRef;
struct FileWriter {
+ MEMPOOL_CLASS_HELPERS();
+
FileRef file;
uint64_t pos; ///< start offset for buffer
bufferlist buffer; ///< new data to write (at end of file)
};
struct FileReaderBuffer {
+ MEMPOOL_CLASS_HELPERS();
+
uint64_t bl_off; ///< prefetch buffer logical offset
bufferlist bl; ///< prefetch buffer
uint64_t pos; ///< current logical offset
};
struct FileReader {
+ MEMPOOL_CLASS_HELPERS();
+
FileRef file;
FileReaderBuffer buf;
bool random;
};
struct FileLock {
+ MEMPOOL_CLASS_HELPERS();
+
FileRef file;
explicit FileLock(FileRef f) : file(f) {}
};
PerfCounters *logger = nullptr;
// cache
- map<string, DirRef> dir_map; ///< dirname -> Dir
- ceph::unordered_map<uint64_t,FileRef> file_map; ///< ino -> File
+ mempool::bluefs::map<string, DirRef> dir_map; ///< dirname -> Dir
+ mempool::bluefs::unordered_map<uint64_t,FileRef> file_map; ///< ino -> File
// map of dirty files, files of same dirty_seq are grouped into list.
map<uint64_t, dirty_file_list_t> dirty_files;
FileRef _get_file(uint64_t ino);
void _drop_link(FileRef f);
- int _allocate(uint8_t bdev, uint64_t len, vector<bluefs_extent_t> *ev);
+ int _allocate(uint8_t bdev, uint64_t len,
+ mempool::bluefs::vector<bluefs_extent_t> *ev);
int _flush_range(FileWriter *h, uint64_t offset, uint64_t length);
int _flush(FileWriter *h, bool force);
int _fsync(FileWriter *h, std::unique_lock<std::mutex>& l);