Use placement new to initialise the blocks
This commit is contained in:
parent
5c82d50204
commit
d482a76bda
@ -81,8 +81,7 @@ namespace bcache {
|
|||||||
blocks_data_.reset(reinterpret_cast<unsigned char *>(data));
|
blocks_data_.reset(reinterpret_cast<unsigned char *>(data));
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
block *b = blocks + i;
|
block *b = new (blocks + i) block();
|
||||||
INIT_LIST_HEAD(&b->list_);
|
|
||||||
b->data_ = data + block_size * i;
|
b->data_ = data + block_size * i;
|
||||||
|
|
||||||
list_add(&b->list_, &free_);
|
list_add(&b->list_, &free_);
|
||||||
@ -384,6 +383,7 @@ namespace bcache {
|
|||||||
|
|
||||||
b->error_ = 0;
|
b->error_ = 0;
|
||||||
b->flags_ = 0;
|
b->flags_ = 0;
|
||||||
|
b->v_ = validator::ptr(new noop_validator);
|
||||||
|
|
||||||
b->index_ = index;
|
b->index_ = index;
|
||||||
setup_control_block(*b);
|
setup_control_block(*b);
|
||||||
|
@ -50,8 +50,12 @@ namespace bcache {
|
|||||||
public:
|
public:
|
||||||
block()
|
block()
|
||||||
: v_() {
|
: v_() {
|
||||||
|
INIT_LIST_HEAD(&list_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Do not give this class a destructor, it wont get
|
||||||
|
// called because we manage allocation ourselves.
|
||||||
|
|
||||||
uint64_t get_index() const {
|
uint64_t get_index() const {
|
||||||
return index_;
|
return index_;
|
||||||
}
|
}
|
||||||
@ -61,11 +65,11 @@ namespace bcache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void mark_dirty() {
|
void mark_dirty() {
|
||||||
flags_ |= BF_DIRTY;
|
set_flags(BF_DIRTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
void mark_flush() {
|
void mark_flush() {
|
||||||
flags_ |= BF_FLUSH;
|
set_flags(BF_FLUSH);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_flags(unsigned flags) {
|
void set_flags(unsigned flags) {
|
||||||
@ -172,7 +176,7 @@ namespace bcache {
|
|||||||
uint64_t nr_data_blocks_;
|
uint64_t nr_data_blocks_;
|
||||||
uint64_t nr_cache_blocks_;
|
uint64_t nr_cache_blocks_;
|
||||||
|
|
||||||
std::auto_ptr<unsigned char> blocks_memory_; // FIXME: change to a vector
|
std::auto_ptr<unsigned char> blocks_memory_;
|
||||||
std::auto_ptr<unsigned char> blocks_data_;
|
std::auto_ptr<unsigned char> blocks_data_;
|
||||||
|
|
||||||
io_context_t aio_context_;
|
io_context_t aio_context_;
|
||||||
|
Loading…
Reference in New Issue
Block a user