diff --git a/src/blockstore_init.cpp b/src/blockstore_init.cpp index 506a36cd..dd848e24 100644 --- a/src/blockstore_init.cpp +++ b/src/blockstore_init.cpp @@ -912,7 +912,11 @@ void blockstore_init_journal::erase_dirty_object(blockstore_dirty_db_t::iterator ? clean_it->second.location : UINT64_MAX; if (exists && clean_loc == UINT64_MAX) { - bs->inode_space_stats[oid.inode] -= bs->block_size; + auto & sp = bs->inode_space_stats[oid.inode]; + if (sp > bs->block_size) + sp -= bs->block_size; + else + bs->inode_space_stats.erase(oid.inode); } bs->erase_dirty(dirty_it, dirty_end, clean_loc); // Remove it from the flusher's queue, too diff --git a/src/blockstore_stable.cpp b/src/blockstore_stable.cpp index ca2ba8db..c6f205da 100644 --- a/src/blockstore_stable.cpp +++ b/src/blockstore_stable.cpp @@ -200,7 +200,11 @@ void blockstore_impl_t::mark_stable(const obj_ver_id & v, bool forget_dirty) } else if (IS_DELETE(dirty_it->second.state)) { - inode_space_stats[dirty_it->first.oid.inode] -= block_size; + auto & sp = inode_space_stats[dirty_it->first.oid.inode]; + if (sp > block_size) + sp -= block_size; + else + inode_space_stats.erase(dirty_it->first.oid.inode); } } if (forget_dirty && (IS_BIG_WRITE(dirty_it->second.state) ||