e79be6c6c4
cherry-picked cleanly from 6.0 development tree, fixes an issue with resizing RBD drives (and reportedly also on krbd or potentially other storage backends) with iothreads. Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
43 lines
1.3 KiB
Diff
43 lines
1.3 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Kevin Wolf <kwolf@redhat.com>
|
|
Date: Thu, 3 Dec 2020 18:23:10 +0100
|
|
Subject: [PATCH] block: Fix locking in qmp_block_resize()
|
|
|
|
The drain functions assume that we hold the AioContext lock of the
|
|
drained block node. Make sure to actually take the lock.
|
|
|
|
Cc: qemu-stable@nongnu.org
|
|
Fixes: eb94b81a94bce112e6b206df846c1551aaf6cab6
|
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
Message-Id: <20201203172311.68232-3-kwolf@redhat.com>
|
|
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
|
|
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
|
|
---
|
|
blockdev.c | 5 ++++-
|
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/blockdev.c b/blockdev.c
|
|
index fe6fb5dc1d..9a86e9fb4b 100644
|
|
--- a/blockdev.c
|
|
+++ b/blockdev.c
|
|
@@ -2481,14 +2481,17 @@ void coroutine_fn qmp_block_resize(bool has_device, const char *device,
|
|
goto out;
|
|
}
|
|
|
|
+ bdrv_co_lock(bs);
|
|
bdrv_drained_begin(bs);
|
|
+ bdrv_co_unlock(bs);
|
|
+
|
|
old_ctx = bdrv_co_enter(bs);
|
|
blk_truncate(blk, size, false, PREALLOC_MODE_OFF, 0, errp);
|
|
bdrv_co_leave(bs, old_ctx);
|
|
- bdrv_drained_end(bs);
|
|
|
|
out:
|
|
bdrv_co_lock(bs);
|
|
+ bdrv_drained_end(bs);
|
|
blk_unref(blk);
|
|
bdrv_co_unlock(bs);
|
|
}
|