[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 07/23] block: Introduce .bdrv_co_ioctl() driver callb
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 07/23] block: Introduce .bdrv_co_ioctl() driver callback |
Date: |
Thu, 27 Oct 2016 20:08:51 +0200 |
This allows drivers to implement ioctls in a coroutine-based way.
Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
block/io.c | 16 ++++++++++------
include/block/block_int.h | 2 ++
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/block/io.c b/block/io.c
index 35fdcca..370c7d8 100644
--- a/block/io.c
+++ b/block/io.c
@@ -2502,17 +2502,21 @@ int bdrv_co_ioctl(BlockDriverState *bs, int req, void
*buf)
BlockAIOCB *acb;
tracked_request_begin(&tracked_req, bs, 0, 0, BDRV_TRACKED_IOCTL);
- if (!drv || !drv->bdrv_aio_ioctl) {
+ if (!drv || (!drv->bdrv_aio_ioctl && !drv->bdrv_co_ioctl)) {
co.ret = -ENOTSUP;
goto out;
}
- acb = drv->bdrv_aio_ioctl(bs, req, buf, bdrv_co_io_em_complete, &co);
- if (!acb) {
- co.ret = -ENOTSUP;
- goto out;
+ if (drv->bdrv_co_ioctl) {
+ co.ret = drv->bdrv_co_ioctl(bs, req, buf);
+ } else {
+ acb = drv->bdrv_aio_ioctl(bs, req, buf, bdrv_co_io_em_complete, &co);
+ if (!acb) {
+ co.ret = -ENOTSUP;
+ goto out;
+ }
+ qemu_coroutine_yield();
}
- qemu_coroutine_yield();
out:
tracked_request_end(&tracked_req);
return co.ret;
diff --git a/include/block/block_int.h b/include/block/block_int.h
index 3e79228..e96e9ad 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -244,6 +244,8 @@ struct BlockDriver {
BlockAIOCB *(*bdrv_aio_ioctl)(BlockDriverState *bs,
unsigned long int req, void *buf,
BlockCompletionFunc *cb, void *opaque);
+ int coroutine_fn (*bdrv_co_ioctl)(BlockDriverState *bs,
+ unsigned long int req, void *buf);
/* List of options for creating images, terminated by name == NULL */
QemuOptsList *create_opts;
--
1.8.3.1
- [Qemu-devel] [PULL 20/23] block: BdrvDirtyBitmap serialization interface, (continued)
- [Qemu-devel] [PULL 20/23] block: BdrvDirtyBitmap serialization interface, Kevin Wolf, 2016/10/24
- [Qemu-devel] [PULL 23/23] block/replication: Clarify 'top-id' parameter usage, Kevin Wolf, 2016/10/24
- Re: [Qemu-devel] [PULL 00/23] Block layer patches, Peter Maydell, 2016/10/24
- [Qemu-devel] [PULL 00/23] Block layer patches, Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 01/23] block: Use blk_co_flush() for all BB level flushes, Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 03/23] block: Remove bdrv_aio_pdiscard(), Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 02/23] block: Use blk_co_pdiscard() for all BB level discard, Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 04/23] block: Use blk_co_ioctl() for all BB level ioctls, Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 05/23] raw-posix: Don't use bdrv_ioctl(), Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 06/23] block: Remove bdrv_ioctl(), Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 07/23] block: Introduce .bdrv_co_ioctl() driver callback,
Kevin Wolf <=
- [Qemu-devel] [PULL 08/23] raw: Implement .bdrv_co_ioctl instead of .bdrv_aio_ioctl, Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 09/23] block: Remove bdrv_aio_ioctl(), Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 11/23] block/nbd: Drop trailing "." in error messages, Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 12/23] block/nbd: Reject port parameter without host, Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 13/23] block/nbd: Default port in nbd_refresh_filename(), Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 10/23] qemu-iotests: Fix typo for NFS with IMGOPTSSYNTAX, Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 15/23] block/nbd: Add nbd_has_filename_options_conflict(), Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 14/23] block/nbd: Use qdict_put(), Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 18/23] qapi: Allow blockdev-add for NBD, Kevin Wolf, 2016/10/27
- [Qemu-devel] [PULL 16/23] block/nbd: Accept SocketAddress, Kevin Wolf, 2016/10/27