block/qcow2: proper locking on bitmap add/remove paths
commitd2c3080e41fd2c9bc36c996cc9d33804462ba803
authorVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Fri, 20 Sep 2019 08:25:43 +0000 (20 11:25 +0300)
committerJohn Snow <jsnow@redhat.com>
Thu, 17 Oct 2019 21:02:32 +0000 (17 17:02 -0400)
treefaa16eec6452d036d5762ca0329a4ecdcb0b1ab2
parentb56a1e31759b750e111b4dd35171007bf493fc89
block/qcow2: proper locking on bitmap add/remove paths

qmp_block_dirty_bitmap_add and do_block_dirty_bitmap_remove do acquire
aio context since 0a6c86d024c52b. But this is not enough: we also must
lock qcow2 mutex when access in-image metadata. Especially it concerns
freeing qcow2 clusters.

To achieve this, move qcow2_can_store_new_dirty_bitmap and
qcow2_remove_persistent_dirty_bitmap to coroutine context.

Since we work in coroutines in correct aio context, we don't need
context acquiring in blockdev.c anymore, drop it.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Message-id: 20190920082543.23444-4-vsementsov@virtuozzo.com
Signed-off-by: John Snow <jsnow@redhat.com>
block/dirty-bitmap.c
block/qcow2-bitmap.c
block/qcow2.c
block/qcow2.h
blockdev.c
include/block/block_int.h