[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v8 1/7] block: teach bdrv_debug_breakpoint skip filt
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[Qemu-devel] [PATCH v8 1/7] block: teach bdrv_debug_breakpoint skip filters with backing |
Date: |
Wed, 29 May 2019 18:46:48 +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>
---
block.c | 34 ++++++++++++++++++++++++++--------
1 file changed, 26 insertions(+), 8 deletions(-)
diff --git a/block.c b/block.c
index 1a73e310c1..e6e9770704 100644
--- a/block.c
+++ b/block.c
@@ -4982,14 +4982,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);
}
@@ -4998,11 +5019,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 v8 0/7] backup-top filter driver for backup, Vladimir Sementsov-Ogievskiy, 2019/05/29
- [Qemu-devel] [PATCH v8 3/7] block: allow not one child for implicit node, Vladimir Sementsov-Ogievskiy, 2019/05/29
- [Qemu-devel] [PATCH v8 6/7] block: add lock/unlock range functions, Vladimir Sementsov-Ogievskiy, 2019/05/29
- [Qemu-devel] [PATCH v8 5/7] block/io: refactor wait_serialising_requests, Vladimir Sementsov-Ogievskiy, 2019/05/29
- [Qemu-devel] [PATCH v8 2/7] block: swap operation order in bdrv_append, Vladimir Sementsov-Ogievskiy, 2019/05/29
- [Qemu-devel] [PATCH v8 1/7] block: teach bdrv_debug_breakpoint skip filters with backing,
Vladimir Sementsov-Ogievskiy <=
- [Qemu-devel] [PATCH v8 4/7] block: introduce backup-top filter driver, Vladimir Sementsov-Ogievskiy, 2019/05/29
- [Qemu-devel] [PATCH v8 7/7] block/backup: use backup-top instead of write notifiers, Vladimir Sementsov-Ogievskiy, 2019/05/29
- Re: [Qemu-devel] [PATCH v8 0/7] backup-top filter driver for backup, Vladimir Sementsov-Ogievskiy, 2019/05/30