Hi,
See the cover letter from v1 for the general idea:
https://lists.nongnu.org/archive/html/qemu-block/2021-06/msg00843.html
Cover letter from v2, introducing RCU locking:
https://lists.nongnu.org/archive/html/qemu-block/2021-06/msg01060.html
v3:
- Patch 2:
- Add rcu_head object to BdrvBlockStatusCache, so we can use
g_free_rcu() to free it instead of synchronize_rcu()+g_free()
- Use qatomic_rcu_read() every time we read bs->block_status_cache
(except in bdrv_close(), where no concurrency is possible)
- Use RCU_READ_LOCK_GUARD() instead of WITH_RCU_READ_LOCK_GUARD() in
functions where we lock the whole scope anyway
- Same for QEMU_LOCK_GUARD() instead of WITH_QEMU_LOCK_GUARD() in
bdrv_bsc_fill()
- Drop from_cache variable in bdrv_co_block_status()
(was an artifact from v1, which had a different control flow and
needed this variable)
- Assert that local_map returned from a protocol driver’s
bdrv_co_block_status() implementation is equal to the offset we
passed to it (see comment there for why we should do this)
- Patch 3:
- Add note why block drivers should return larger *pnum values in
addition to just saying that it’s allowed