[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 09/20] block: add blk_in_drain() API
From: |
Stefan Hajnoczi |
Subject: |
[PATCH v3 09/20] block: add blk_in_drain() API |
Date: |
Thu, 20 Apr 2023 07:37:21 -0400 |
The BlockBackend quiesce_counter is greater than zero during drained
sections. Add an API to check whether the BlockBackend is in a drained
section.
The next patch will use this API.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
include/sysemu/block-backend-global-state.h | 1 +
block/block-backend.c | 7 +++++++
2 files changed, 8 insertions(+)
diff --git a/include/sysemu/block-backend-global-state.h
b/include/sysemu/block-backend-global-state.h
index 2b6d27db7c..ac7cbd6b5e 100644
--- a/include/sysemu/block-backend-global-state.h
+++ b/include/sysemu/block-backend-global-state.h
@@ -78,6 +78,7 @@ void blk_activate(BlockBackend *blk, Error **errp);
int blk_make_zero(BlockBackend *blk, BdrvRequestFlags flags);
void blk_aio_cancel(BlockAIOCB *acb);
int blk_commit_all(void);
+bool blk_in_drain(BlockBackend *blk);
void blk_drain(BlockBackend *blk);
void blk_drain_all(void);
void blk_set_on_error(BlockBackend *blk, BlockdevOnError on_read_error,
diff --git a/block/block-backend.c b/block/block-backend.c
index 9e0f48692a..e0a1d9ec0f 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -1270,6 +1270,13 @@ blk_check_byte_request(BlockBackend *blk, int64_t
offset, int64_t bytes)
return 0;
}
+/* Are we currently in a drained section? */
+bool blk_in_drain(BlockBackend *blk)
+{
+ GLOBAL_STATE_CODE(); /* change to IO_OR_GS_CODE(), if necessary */
+ return qatomic_read(&blk->quiesce_counter);
+}
+
/* To be called between exactly one pair of blk_inc/dec_in_flight() */
static void coroutine_fn blk_wait_while_drained(BlockBackend *blk)
{
--
2.39.2
- [PATCH v3 11/20] xen-block: implement BlockDevOps->drained_begin(), (continued)
- [PATCH v3 11/20] xen-block: implement BlockDevOps->drained_begin(), Stefan Hajnoczi, 2023/04/20
- [PATCH v3 04/20] block/export: only acquire AioContext once for vhost_user_server_stop(), Stefan Hajnoczi, 2023/04/20
- [PATCH v3 20/20] aio: remove aio_disable_external() API, Stefan Hajnoczi, 2023/04/20
- [PATCH v3 12/20] hw/xen: do not set is_external=true on evtchn fds, Stefan Hajnoczi, 2023/04/20
- [PATCH v3 15/20] block/fuse: do not set is_external=true on FUSE fd, Stefan Hajnoczi, 2023/04/20
- [PATCH v3 18/20] virtio-scsi: implement BlockDevOps->drained_begin(), Stefan Hajnoczi, 2023/04/20
- [PATCH v3 07/20] block/export: stop using is_external in vhost-user-blk server, Stefan Hajnoczi, 2023/04/20
- [PATCH v3 06/20] block/export: wait for vhost-user-blk requests when draining, Stefan Hajnoczi, 2023/04/20
- [PATCH v3 09/20] block: add blk_in_drain() API,
Stefan Hajnoczi <=
- [PATCH v3 16/20] virtio: make it possible to detach host notifier from any thread, Stefan Hajnoczi, 2023/04/20
- Re: [PATCH v3 00/20] block: remove aio_disable_external() API, Philippe Mathieu-Daudé, 2023/04/20