ubdsrv: cluster allocator

requirements

design

problems

refcnt blk is full

allocate two clusters

one is for new refcnt blk

another is for data

allocate one cluster for user

called from io context

mapping between cqe and refcnt block io

other io contexts waiting for this refcnt blk cache

refcnt blk cache free

need to flush dirty entries to disk first

after flushing is done, the refcnt blk cache needs to be freed

dirty dependency

refcnt table may has dirty data with this cache

qcow2 header needs to be flushed because of the dirty refcnt table

this flush shouldn't be delayed

run out of cache

how to track dirty entries?