[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v10 07/14] block: teach bdrv_debug_breakpoint skip f
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[Qemu-devel] [PATCH v10 07/14] block: teach bdrv_debug_breakpoint skip filters with backing |
Date: |
Fri, 30 Aug 2019 19:12:21 +0300 |
Teach bdrv_debug_breakpoint and bdrv_debug_remove_breakpoint skip
filters with backing. This is needed to implement and use in backup job
it's own backup_top filter driver (like mirror already has one), and
without this improvement, breakpoint removal will fail at least in 55
iotest.
Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
Reviewed-by: Max Reitz <address@hidden>
---
block.c | 34 ++++++++++++++++++++++++++--------
1 file changed, 26 insertions(+), 8 deletions(-)
diff --git a/block.c b/block.c
index 5944124845..1c7c199849 100644
--- a/block.c
+++ b/block.c
@@ -5164,14 +5164,35 @@ void bdrv_debug_event(BlockDriverState *bs,
BlkdebugEvent event)
bs->drv->bdrv_debug_event(bs, event);
}
-int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
- const char *tag)
+static BlockDriverState *bdrv_find_debug_node(BlockDriverState *bs)
{
while (bs && bs->drv && !bs->drv->bdrv_debug_breakpoint) {
- bs = bs->file ? bs->file->bs : NULL;
+ if (bs->file) {
+ bs = bs->file->bs;
+ continue;
+ }
+
+ if (bs->drv->is_filter && bs->backing) {
+ bs = bs->backing->bs;
+ continue;
+ }
+
+ break;
}
if (bs && bs->drv && bs->drv->bdrv_debug_breakpoint) {
+ assert(bs->drv->bdrv_debug_remove_breakpoint);
+ return bs;
+ }
+
+ return NULL;
+}
+
+int bdrv_debug_breakpoint(BlockDriverState *bs, const char *event,
+ const char *tag)
+{
+ bs = bdrv_find_debug_node(bs);
+ if (bs) {
return bs->drv->bdrv_debug_breakpoint(bs, event, tag);
}
@@ -5180,11 +5201,8 @@ int bdrv_debug_breakpoint(BlockDriverState *bs, const
char *event,
int bdrv_debug_remove_breakpoint(BlockDriverState *bs, const char *tag)
{
- while (bs && bs->drv && !bs->drv->bdrv_debug_remove_breakpoint) {
- bs = bs->file ? bs->file->bs : NULL;
- }
-
- if (bs && bs->drv && bs->drv->bdrv_debug_remove_breakpoint) {
+ bs = bdrv_find_debug_node(bs);
+ if (bs) {
return bs->drv->bdrv_debug_remove_breakpoint(bs, tag);
}
--
2.18.0
- [Qemu-devel] [PATCH v10 00/14] backup-top filter driver for backup, Vladimir Sementsov-Ogievskiy, 2019/08/30
- [Qemu-devel] [PATCH v10 07/14] block: teach bdrv_debug_breakpoint skip filters with backing,
Vladimir Sementsov-Ogievskiy <=
- [Qemu-devel] [PATCH v10 03/14] block/backup: improve comment about image fleecing, Vladimir Sementsov-Ogievskiy, 2019/08/30
- [Qemu-devel] [PATCH v10 12/14] block: add lock/unlock range functions, Vladimir Sementsov-Ogievskiy, 2019/08/30
- [Qemu-devel] [PATCH v10 01/14] block/backup: fix backup_cow_with_offload for last cluster, Vladimir Sementsov-Ogievskiy, 2019/08/30
- [Qemu-devel] [PATCH v10 06/14] block: move block_copy from block/backup.c to separate file, Vladimir Sementsov-Ogievskiy, 2019/08/30
- [Qemu-devel] [PATCH v10 02/14] block/backup: split shareable copying part from backup_do_cow, Vladimir Sementsov-Ogievskiy, 2019/08/30
- [Qemu-devel] [PATCH v10 09/14] iotests: 257: drop unused Drive.device field, Vladimir Sementsov-Ogievskiy, 2019/08/30
- [Qemu-devel] [PATCH v10 10/14] iotests: 257: drop device_add, Vladimir Sementsov-Ogievskiy, 2019/08/30
- [Qemu-devel] [PATCH v10 11/14] block/io: refactor wait_serialising_requests, Vladimir Sementsov-Ogievskiy, 2019/08/30
- [Qemu-devel] [PATCH v10 04/14] block/backup: introduce BlockCopyState, Vladimir Sementsov-Ogievskiy, 2019/08/30
- [Qemu-devel] [PATCH v10 05/14] block/backup: fix block-comment style, Vladimir Sementsov-Ogievskiy, 2019/08/30