diff --git a/src/blockstore_flush.cpp b/src/blockstore_flush.cpp index 76452c84..63e5a14f 100644 --- a/src/blockstore_flush.cpp +++ b/src/blockstore_flush.cpp @@ -162,7 +162,8 @@ void journal_flusher_t::mark_trim_possible() if (trim_wanted > 0) { dequeuing = true; - journal_trim_counter++; + if (!journal_trim_counter) + journal_trim_counter = journal_trim_interval; bs->ringloop->wakeup(); } } diff --git a/src/blockstore_read.cpp b/src/blockstore_read.cpp index a1071226..7fec5add 100644 --- a/src/blockstore_read.cpp +++ b/src/blockstore_read.cpp @@ -286,7 +286,10 @@ void blockstore_impl_t::handle_read_event(ring_data_t *data, blockstore_op_t *op { auto used = --journal.used_sectors[rv.journal_sector-1]; if (used == 0) + { journal.used_sectors.erase(rv.journal_sector-1); + flusher->mark_trim_possible(); + } } } } diff --git a/src/blockstore_rollback.cpp b/src/blockstore_rollback.cpp index 4b4e94cf..c5199ac8 100644 --- a/src/blockstore_rollback.cpp +++ b/src/blockstore_rollback.cpp @@ -127,7 +127,6 @@ resume_4: { mark_rolled_back(*v); } - flusher->mark_trim_possible(); // Acknowledge op op->retval = 0; FINISH_OP(op); @@ -232,6 +231,7 @@ void blockstore_impl_t::erase_dirty(blockstore_dirty_db_t::iterator dirty_start, if (used == 0) { journal.used_sectors.erase(dirty_it->second.journal_sector); + flusher->mark_trim_possible(); } if (dsk.clean_entry_bitmap_size > sizeof(void*)) {