Fix the fix :)
This commit is contained in:
@@ -364,7 +364,7 @@ bool journal_flusher_co::loop()
|
|||||||
else if (wait_state == 31) goto resume_31;
|
else if (wait_state == 31) goto resume_31;
|
||||||
else if (wait_state == 32) goto resume_32;
|
else if (wait_state == 32) goto resume_32;
|
||||||
else if (wait_state == 33) goto resume_33;
|
else if (wait_state == 33) goto resume_33;
|
||||||
|
else if (wait_state == 34) goto resume_34;
|
||||||
resume_0:
|
resume_0:
|
||||||
if (flusher->flush_queue.size() < flusher->min_flusher_count && !flusher->trim_wanted ||
|
if (flusher->flush_queue.size() < flusher->min_flusher_count && !flusher->trim_wanted ||
|
||||||
!flusher->flush_queue.size() || !flusher->dequeuing)
|
!flusher->flush_queue.size() || !flusher->dequeuing)
|
||||||
@@ -536,13 +536,6 @@ resume_2:
|
|||||||
return false;
|
return false;
|
||||||
if (old_clean_loc != UINT64_MAX && old_clean_loc != clean_loc)
|
if (old_clean_loc != UINT64_MAX && old_clean_loc != clean_loc)
|
||||||
{
|
{
|
||||||
resume_21:
|
|
||||||
inflight_meta_sector = flusher->inflight_meta_sectors.find(meta_old.sector);
|
|
||||||
if (inflight_meta_sector != flusher->inflight_meta_sectors.end())
|
|
||||||
{
|
|
||||||
wait_state = wait_base+20;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// zero out old metadata entry
|
// zero out old metadata entry
|
||||||
{
|
{
|
||||||
clean_disk_entry *old_entry = (clean_disk_entry*)((uint8_t*)meta_old.buf + meta_old.pos*bs->dsk.clean_entry_size);
|
clean_disk_entry *old_entry = (clean_disk_entry*)((uint8_t*)meta_old.buf + meta_old.pos*bs->dsk.clean_entry_size);
|
||||||
@@ -557,6 +550,12 @@ resume_2:
|
|||||||
memset((uint8_t*)meta_old.buf + meta_old.pos*bs->dsk.clean_entry_size, 0, bs->dsk.clean_entry_size);
|
memset((uint8_t*)meta_old.buf + meta_old.pos*bs->dsk.clean_entry_size, 0, bs->dsk.clean_entry_size);
|
||||||
if (meta_old.sector != meta_new.sector)
|
if (meta_old.sector != meta_new.sector)
|
||||||
{
|
{
|
||||||
|
resume_21:
|
||||||
|
if (flusher->inflight_meta_sectors.find(meta_old.sector) != flusher->inflight_meta_sectors.end())
|
||||||
|
{
|
||||||
|
wait_state = wait_base+21;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
flusher->inflight_meta_sectors.insert(meta_old.sector);
|
flusher->inflight_meta_sectors.insert(meta_old.sector);
|
||||||
resume_22:
|
resume_22:
|
||||||
if (!write_meta_block(meta_old, 22))
|
if (!write_meta_block(meta_old, 22))
|
||||||
@@ -571,8 +570,8 @@ resume_2:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
resume_24:
|
resume_24:
|
||||||
inflight_meta_sector = flusher->inflight_meta_sectors.find(meta_new.sector);
|
if (flusher->inflight_meta_sectors.find(meta_new.sector) != flusher->inflight_meta_sectors.end())
|
||||||
if (inflight_meta_sector != flusher->inflight_meta_sectors.end()) {
|
{
|
||||||
wait_state = wait_base+24;
|
wait_state = wait_base+24;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -786,8 +785,7 @@ bool journal_flusher_co::clear_incomplete_csum_block_bits(int wait_base)
|
|||||||
if (!wait_meta_reads(wait_base+0))
|
if (!wait_meta_reads(wait_base+0))
|
||||||
return false;
|
return false;
|
||||||
resume_2:
|
resume_2:
|
||||||
inflight_meta_sector = flusher->inflight_meta_sectors.find(meta_new.sector);
|
if (flusher->inflight_meta_sectors.find(meta_new.sector) != flusher->inflight_meta_sectors.end())
|
||||||
if (inflight_meta_sector != flusher->inflight_meta_sectors.end())
|
|
||||||
{
|
{
|
||||||
wait_state = wait_base+2;
|
wait_state = wait_base+2;
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -76,7 +76,6 @@ class journal_flusher_co
|
|||||||
uint8_t *new_clean_bitmap;
|
uint8_t *new_clean_bitmap;
|
||||||
|
|
||||||
uint64_t new_trim_pos;
|
uint64_t new_trim_pos;
|
||||||
std::unordered_set<uint64_t>::iterator inflight_meta_sector;
|
|
||||||
|
|
||||||
friend class journal_flusher_t;
|
friend class journal_flusher_t;
|
||||||
void scan_dirty();
|
void scan_dirty();
|
||||||
|
|||||||
Reference in New Issue
Block a user