Fix another rare journal flush stall

rm-left-on-dead
Vitaliy Filippov 2022-12-29 19:26:52 +03:00
parent cf5c562800
commit d7bd36dc32
3 changed files with 6 additions and 2 deletions

View File

@ -162,7 +162,8 @@ void journal_flusher_t::mark_trim_possible()
if (trim_wanted > 0) if (trim_wanted > 0)
{ {
dequeuing = true; dequeuing = true;
journal_trim_counter++; if (!journal_trim_counter)
journal_trim_counter = journal_trim_interval;
bs->ringloop->wakeup(); bs->ringloop->wakeup();
} }
} }

View File

@ -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]; auto used = --journal.used_sectors[rv.journal_sector-1];
if (used == 0) if (used == 0)
{
journal.used_sectors.erase(rv.journal_sector-1); journal.used_sectors.erase(rv.journal_sector-1);
flusher->mark_trim_possible();
}
} }
} }
} }

View File

@ -127,7 +127,6 @@ resume_4:
{ {
mark_rolled_back(*v); mark_rolled_back(*v);
} }
flusher->mark_trim_possible();
// Acknowledge op // Acknowledge op
op->retval = 0; op->retval = 0;
FINISH_OP(op); FINISH_OP(op);
@ -232,6 +231,7 @@ void blockstore_impl_t::erase_dirty(blockstore_dirty_db_t::iterator dirty_start,
if (used == 0) if (used == 0)
{ {
journal.used_sectors.erase(dirty_it->second.journal_sector); journal.used_sectors.erase(dirty_it->second.journal_sector);
flusher->mark_trim_possible();
} }
if (dsk.clean_entry_bitmap_size > sizeof(void*)) if (dsk.clean_entry_bitmap_size > sizeof(void*))
{ {