mirror of
https://github.com/versity/scoutfs.git
synced 2026-04-28 00:46:57 +00:00
The current block interface for allocating a dirty copy of a given stable block didn't cow. It moved the existing stable block into its new dirty location. This is fine for the btree which will never reference old stable blocks. It's not optimal for the allocator which is going to want to combine the previous stable allocator blocks with the current dirty allocator blocks to determine which free regions can satisfy allocations. If we invalidate the old stable cached copy it'll immediately read it back in. And it turns out that it was a little buggy in how it moved the stable block to its new dirty location. It didn't remove any old blocks at the new blkno. So we offer two high level interfaces for either moving or copying the contents of the dirty block. And we're sure to always invalidate old cached blocks at the new dirty blkno location. Signed-off-by: Zach Brown <zab@versity.com>