[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 01/11] block: add new BlockDriver handler: bdrv_cancel_in_flight
From: |
Vladimir Sementsov-Ogievskiy |
Subject: |
[PATCH 01/11] block: add new BlockDriver handler: bdrv_cancel_in_flight |
Date: |
Wed, 18 Nov 2020 21:04:23 +0300 |
It will be used to stop retrying NBD requests on mirror cancel.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
include/block/block.h | 3 +++
include/block/block_int.h | 9 +++++++++
block/io.c | 11 +++++++++++
3 files changed, 23 insertions(+)
diff --git a/include/block/block.h b/include/block/block.h
index c9d7c58765..3990ee3677 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -836,4 +836,7 @@ int coroutine_fn bdrv_co_copy_range(BdrvChild *src,
uint64_t src_offset,
BdrvChild *dst, uint64_t dst_offset,
uint64_t bytes, BdrvRequestFlags
read_flags,
BdrvRequestFlags write_flags);
+
+void bdrv_cancel_in_flight(BlockDriverState *bs);
+
#endif
diff --git a/include/block/block_int.h b/include/block/block_int.h
index 95d9333be1..07a87ce5e7 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -344,6 +344,15 @@ struct BlockDriver {
bool want_zero, int64_t offset, int64_t bytes, int64_t *pnum,
int64_t *map, BlockDriverState **file);
+ /*
+ * This informs the driver that we are not more interested in in-flight
+ * requests results, so don't waste the time if possible.
+ *
+ * The example usage is to not wait for nbd target nodedreconnect timeout
on
+ * job-cancel.
+ */
+ void (*bdrv_cancel_in_flight)(BlockDriverState *bs);
+
/*
* Invalidate any cached meta-data.
*/
diff --git a/block/io.c b/block/io.c
index ec5e152bb7..5dcb6433f9 100644
--- a/block/io.c
+++ b/block/io.c
@@ -3288,3 +3288,14 @@ out:
return ret;
}
+
+void bdrv_cancel_in_flight(BlockDriverState *bs)
+{
+ if (!bs || !bs->drv) {
+ return;
+ }
+
+ if (bs->drv->bdrv_cancel_in_flight) {
+ bs->drv->bdrv_cancel_in_flight(bs);
+ }
+}
--
2.21.3
- [PATCH 00/11] mirror: cancel nbd reconnect, Vladimir Sementsov-Ogievskiy, 2020/11/18
- [PATCH 01/11] block: add new BlockDriver handler: bdrv_cancel_in_flight,
Vladimir Sementsov-Ogievskiy <=
- [PATCH 02/11] block/nbd: implement .bdrv_cancel_in_flight, Vladimir Sementsov-Ogievskiy, 2020/11/18
- [PATCH 03/11] block/raw-format: implement .bdrv_cancel_in_flight handler, Vladimir Sementsov-Ogievskiy, 2020/11/18
- [PATCH 04/11] job: add .cancel handler for the driver, Vladimir Sementsov-Ogievskiy, 2020/11/18
- [PATCH 05/11] block/mirror: implement .cancel job handler, Vladimir Sementsov-Ogievskiy, 2020/11/18
- [PATCH 06/11] iotests/264: fix style, Vladimir Sementsov-Ogievskiy, 2020/11/18
- [PATCH 07/11] iotests/264: move to python unittest, Vladimir Sementsov-Ogievskiy, 2020/11/18
- [PATCH 09/11] iotests/264: add mirror-cancel test-case, Vladimir Sementsov-Ogievskiy, 2020/11/18
- [PATCH 08/11] iotests.py: qemu_nbd_popen: remove pid file after use, Vladimir Sementsov-Ogievskiy, 2020/11/18
- [PATCH 11/11] iotests/264: add backup-cancel test-case, Vladimir Sementsov-Ogievskiy, 2020/11/18
- [PATCH 10/11] block/backup: implement .cancel job handler, Vladimir Sementsov-Ogievskiy, 2020/11/18