[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 11/14] block: Convert bdrv_eject() to co_wrapper
From: |
Kevin Wolf |
Subject: |
[PATCH v2 11/14] block: Convert bdrv_eject() to co_wrapper |
Date: |
Fri, 13 Jan 2023 21:42:09 +0100 |
From: Emanuele Giuseppe Esposito <eesposit@redhat.com>
bdrv_eject() is categorized as an I/O function, and it currently
doesn't run in a coroutine. We should let it take a graph rdlock since
it traverses the block nodes graph, which however is only possible in a
coroutine.
The only caller of this function is blk_eject(). Therefore make
blk_eject() a co_wrapper, so that it always creates a new coroutine, and
then make bdrv_eject() coroutine_fn where the lock can be taken.
Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
include/block/block-io.h | 3 ++-
include/block/block_int-common.h | 2 +-
include/sysemu/block-backend-io.h | 4 +++-
block.c | 6 +++---
block/block-backend.c | 4 ++--
block/copy-on-read.c | 6 +++---
block/file-posix.c | 8 ++++----
block/filter-compress.c | 7 ++++---
block/raw-format.c | 6 +++---
9 files changed, 25 insertions(+), 21 deletions(-)
diff --git a/include/block/block-io.h b/include/block/block-io.h
index e27dc9787b..f3d49ea05f 100644
--- a/include/block/block-io.h
+++ b/include/block/block-io.h
@@ -144,7 +144,8 @@ bool coroutine_fn bdrv_co_is_inserted(BlockDriverState *bs);
bool co_wrapper bdrv_is_inserted(BlockDriverState *bs);
void bdrv_lock_medium(BlockDriverState *bs, bool locked);
-void bdrv_eject(BlockDriverState *bs, bool eject_flag);
+void coroutine_fn bdrv_co_eject(BlockDriverState *bs, bool eject_flag);
+
const char *bdrv_get_format_name(BlockDriverState *bs);
bool bdrv_supports_compressed_writes(BlockDriverState *bs);
diff --git a/include/block/block_int-common.h b/include/block/block_int-common.h
index a6ac8afd5b..1631a26427 100644
--- a/include/block/block_int-common.h
+++ b/include/block/block_int-common.h
@@ -712,7 +712,7 @@ struct BlockDriver {
/* removable device specific */
bool coroutine_fn (*bdrv_co_is_inserted)(BlockDriverState *bs);
- void (*bdrv_eject)(BlockDriverState *bs, bool eject_flag);
+ void coroutine_fn (*bdrv_co_eject)(BlockDriverState *bs, bool eject_flag);
void (*bdrv_lock_medium)(BlockDriverState *bs, bool locked);
/* to control generic scsi devices */
diff --git a/include/sysemu/block-backend-io.h
b/include/sysemu/block-backend-io.h
index a1eac6c00a..00209625e1 100644
--- a/include/sysemu/block-backend-io.h
+++ b/include/sysemu/block-backend-io.h
@@ -59,7 +59,9 @@ bool co_wrapper_mixed blk_is_inserted(BlockBackend *blk);
bool blk_is_available(BlockBackend *blk);
void blk_lock_medium(BlockBackend *blk, bool locked);
-void blk_eject(BlockBackend *blk, bool eject_flag);
+
+void coroutine_fn blk_co_eject(BlockBackend *blk, bool eject_flag);
+void co_wrapper blk_eject(BlockBackend *blk, bool eject_flag);
int64_t coroutine_fn blk_co_getlength(BlockBackend *blk);
int64_t co_wrapper_mixed blk_getlength(BlockBackend *blk);
diff --git a/block.c b/block.c
index 2707069ab6..d8415c9519 100644
--- a/block.c
+++ b/block.c
@@ -6820,13 +6820,13 @@ bool coroutine_fn bdrv_co_is_inserted(BlockDriverState
*bs)
/**
* If eject_flag is TRUE, eject the media. Otherwise, close the tray
*/
-void bdrv_eject(BlockDriverState *bs, bool eject_flag)
+void coroutine_fn bdrv_co_eject(BlockDriverState *bs, bool eject_flag)
{
BlockDriver *drv = bs->drv;
IO_CODE();
- if (drv && drv->bdrv_eject) {
- drv->bdrv_eject(bs, eject_flag);
+ if (drv && drv->bdrv_co_eject) {
+ drv->bdrv_co_eject(bs, eject_flag);
}
}
diff --git a/block/block-backend.c b/block/block-backend.c
index fc08400544..7320081814 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -2009,14 +2009,14 @@ void blk_lock_medium(BlockBackend *blk, bool locked)
}
}
-void blk_eject(BlockBackend *blk, bool eject_flag)
+void coroutine_fn blk_co_eject(BlockBackend *blk, bool eject_flag)
{
BlockDriverState *bs = blk_bs(blk);
char *id;
IO_CODE();
if (bs) {
- bdrv_eject(bs, eject_flag);
+ bdrv_co_eject(bs, eject_flag);
}
/* Whether or not we ejected on the backend,
diff --git a/block/copy-on-read.c b/block/copy-on-read.c
index 41777b87a4..43f09514dc 100644
--- a/block/copy-on-read.c
+++ b/block/copy-on-read.c
@@ -216,9 +216,9 @@ static int coroutine_fn
cor_co_pwritev_compressed(BlockDriverState *bs,
}
-static void cor_eject(BlockDriverState *bs, bool eject_flag)
+static void coroutine_fn cor_co_eject(BlockDriverState *bs, bool eject_flag)
{
- bdrv_eject(bs->file->bs, eject_flag);
+ bdrv_co_eject(bs->file->bs, eject_flag);
}
@@ -257,7 +257,7 @@ static BlockDriver bdrv_copy_on_read = {
.bdrv_co_pdiscard = cor_co_pdiscard,
.bdrv_co_pwritev_compressed = cor_co_pwritev_compressed,
- .bdrv_eject = cor_eject,
+ .bdrv_co_eject = cor_co_eject,
.bdrv_lock_medium = cor_lock_medium,
.has_variable_length = true,
diff --git a/block/file-posix.c b/block/file-posix.c
index f128071231..21f49f9782 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -3769,7 +3769,7 @@ static bool coroutine_fn
cdrom_co_is_inserted(BlockDriverState *bs)
return ret == CDS_DISC_OK;
}
-static void cdrom_eject(BlockDriverState *bs, bool eject_flag)
+static void coroutine_fn cdrom_co_eject(BlockDriverState *bs, bool eject_flag)
{
BDRVRawState *s = bs->opaque;
@@ -3827,7 +3827,7 @@ static BlockDriver bdrv_host_cdrom = {
/* removable device support */
.bdrv_co_is_inserted = cdrom_co_is_inserted,
- .bdrv_eject = cdrom_eject,
+ .bdrv_co_eject = cdrom_co_eject,
.bdrv_lock_medium = cdrom_lock_medium,
/* generic scsi device */
@@ -3890,7 +3890,7 @@ static bool coroutine_fn
cdrom_co_is_inserted(BlockDriverState *bs)
return raw_co_getlength(bs) > 0;
}
-static void cdrom_eject(BlockDriverState *bs, bool eject_flag)
+static void coroutine_fn cdrom_co_eject(BlockDriverState *bs, bool eject_flag)
{
BDRVRawState *s = bs->opaque;
@@ -3956,7 +3956,7 @@ static BlockDriver bdrv_host_cdrom = {
/* removable device support */
.bdrv_co_is_inserted = cdrom_co_is_inserted,
- .bdrv_eject = cdrom_eject,
+ .bdrv_co_eject = cdrom_co_eject,
.bdrv_lock_medium = cdrom_lock_medium,
};
#endif /* __FreeBSD__ */
diff --git a/block/filter-compress.c b/block/filter-compress.c
index 1515fe5103..97adb3de19 100644
--- a/block/filter-compress.c
+++ b/block/filter-compress.c
@@ -116,9 +116,10 @@ static void compress_refresh_limits(BlockDriverState *bs,
Error **errp)
}
-static void compress_eject(BlockDriverState *bs, bool eject_flag)
+static void coroutine_fn
+compress_co_eject(BlockDriverState *bs, bool eject_flag)
{
- bdrv_eject(bs->file->bs, eject_flag);
+ bdrv_co_eject(bs->file->bs, eject_flag);
}
@@ -142,7 +143,7 @@ static BlockDriver bdrv_compress = {
.bdrv_co_pdiscard = compress_co_pdiscard,
.bdrv_refresh_limits = compress_refresh_limits,
- .bdrv_eject = compress_eject,
+ .bdrv_co_eject = compress_co_eject,
.bdrv_lock_medium = compress_lock_medium,
.has_variable_length = true,
diff --git a/block/raw-format.c b/block/raw-format.c
index 08f5c74838..2585e9ef96 100644
--- a/block/raw-format.c
+++ b/block/raw-format.c
@@ -404,9 +404,9 @@ static int coroutine_fn raw_co_truncate(BlockDriverState
*bs, int64_t offset,
return bdrv_co_truncate(bs->file, offset, exact, prealloc, flags, errp);
}
-static void raw_eject(BlockDriverState *bs, bool eject_flag)
+static void coroutine_fn raw_co_eject(BlockDriverState *bs, bool eject_flag)
{
- bdrv_eject(bs->file->bs, eject_flag);
+ bdrv_co_eject(bs->file->bs, eject_flag);
}
static void raw_lock_medium(BlockDriverState *bs, bool locked)
@@ -630,7 +630,7 @@ BlockDriver bdrv_raw = {
.bdrv_refresh_limits = &raw_refresh_limits,
.bdrv_probe_blocksizes = &raw_probe_blocksizes,
.bdrv_probe_geometry = &raw_probe_geometry,
- .bdrv_eject = &raw_eject,
+ .bdrv_co_eject = &raw_co_eject,
.bdrv_lock_medium = &raw_lock_medium,
.bdrv_co_ioctl = &raw_co_ioctl,
.create_opts = &raw_create_opts,
--
2.38.1
- [PATCH v2 00/14] block: Move more functions to coroutines, Kevin Wolf, 2023/01/13
- [PATCH v2 02/14] block: Convert bdrv_io_plug() to co_wrapper, Kevin Wolf, 2023/01/13
- [PATCH v2 01/14] block-coroutine-wrapper: support void functions, Kevin Wolf, 2023/01/13
- [PATCH v2 03/14] block: Convert bdrv_io_unplug() to co_wrapper, Kevin Wolf, 2023/01/13
- [PATCH v2 04/14] block: Convert bdrv_is_inserted() to co_wrapper, Kevin Wolf, 2023/01/13
- [PATCH v2 05/14] block: Rename refresh_total_sectors to bdrv_refresh_total_sectors, Kevin Wolf, 2023/01/13
- [PATCH v2 06/14] block: Convert bdrv_refresh_total_sectors() to co_wrapper_mixed, Kevin Wolf, 2023/01/13
- [PATCH v2 07/14] block-backend: use bdrv_getlength instead of blk_getlength, Kevin Wolf, 2023/01/13
- [PATCH v2 08/14] block: use bdrv_co_refresh_total_sectors when possible, Kevin Wolf, 2023/01/13
- [PATCH v2 11/14] block: Convert bdrv_eject() to co_wrapper,
Kevin Wolf <=
- [PATCH v2 09/14] block: Convert bdrv_get_allocated_file_size() to co_wrapper, Kevin Wolf, 2023/01/13
- [PATCH v2 13/14] block: Convert bdrv_debug_event() to co_wrapper_mixed, Kevin Wolf, 2023/01/13
- [PATCH v2 10/14] block: Convert bdrv_get_info() to co_wrapper_mixed, Kevin Wolf, 2023/01/13
- [PATCH v2 12/14] block: Convert bdrv_lock_medium() to co_wrapper, Kevin Wolf, 2023/01/13
- [PATCH v2 14/14] block: Rename bdrv_load/save_vmstate() to bdrv_co_load/save_vmstate(), Kevin Wolf, 2023/01/13
- Re: [PATCH v2 00/14] block: Move more functions to coroutines, Emanuele Giuseppe Esposito, 2023/01/16