Do not use pending_modified_blocks to check
This commit is contained in:
@@ -200,7 +200,7 @@ void blockstore_impl_t::loop()
|
||||
for (auto & block_num: pending_modified_blocks)
|
||||
{
|
||||
heap->start_block_write(block_num);
|
||||
modified_blocks.insert(block_num);
|
||||
modified_blocks[block_num] = true;
|
||||
}
|
||||
pending_modified_blocks.clear();
|
||||
if ((initial_ring_space - ringloop->space_left()) > 0)
|
||||
|
||||
@@ -117,7 +117,7 @@ public:
|
||||
uint8_t *zero_object = NULL;
|
||||
|
||||
std::vector<uint32_t> pending_modified_blocks;
|
||||
robin_hood::unordered_flat_set<uint32_t> modified_blocks;
|
||||
robin_hood::unordered_flat_map<uint32_t, bool> modified_blocks;
|
||||
|
||||
journal_flusher_t *flusher;
|
||||
int write_iodepth = 0;
|
||||
|
||||
@@ -13,15 +13,12 @@ bool blockstore_impl_t::enqueue_write(blockstore_op_t *op)
|
||||
|
||||
void blockstore_impl_t::prepare_meta_block_write(uint32_t modified_block)
|
||||
{
|
||||
//assert(modified_blocks.find(modified_block) == modified_blocks.end());
|
||||
for (auto & block_num: pending_modified_blocks)
|
||||
{
|
||||
if (block_num == modified_block)
|
||||
return;
|
||||
}
|
||||
if (modified_blocks.find(modified_block) != modified_blocks.end())
|
||||
return;
|
||||
io_uring_sqe *sqe = get_sqe();
|
||||
assert(sqe != NULL); // FIXME
|
||||
assert(sqe != NULL);
|
||||
pending_modified_blocks.push_back(modified_block);
|
||||
modified_blocks[modified_block] = false;
|
||||
ring_data_t *data = ((ring_data_t*)sqe->user_data);
|
||||
data->iov = (struct iovec){ heap->get_meta_block(modified_block), (size_t)dsk.meta_block_size };
|
||||
data->callback = [this, modified_block](ring_data_t *data)
|
||||
@@ -44,14 +41,7 @@ void blockstore_impl_t::prepare_meta_block_write(uint32_t modified_block)
|
||||
bool blockstore_impl_t::meta_block_is_pending(uint32_t modified_block)
|
||||
{
|
||||
auto mb_it = modified_blocks.find(modified_block);
|
||||
if (mb_it != modified_blocks.end())
|
||||
return true;
|
||||
for (auto & block_num: pending_modified_blocks)
|
||||
{
|
||||
if (block_num == modified_block)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
return mb_it != modified_blocks.end();
|
||||
}
|
||||
|
||||
bool blockstore_impl_t::intent_write_allowed(blockstore_op_t *op, heap_entry_t *obj)
|
||||
|
||||
Reference in New Issue
Block a user