From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53101) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X7S7j-0001e6-2k for qemu-devel@nongnu.org; Wed, 16 Jul 2014 12:32:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X7S7c-0000zl-Bd for qemu-devel@nongnu.org; Wed, 16 Jul 2014 12:32:07 -0400 Received: from mail-pd0-f179.google.com ([209.85.192.179]:50060) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X7S7c-0000xp-77 for qemu-devel@nongnu.org; Wed, 16 Jul 2014 12:32:00 -0400 Received: by mail-pd0-f179.google.com with SMTP id ft15so1507156pdb.10 for ; Wed, 16 Jul 2014 09:31:59 -0700 (PDT) From: Ming Lei Date: Thu, 17 Jul 2014 00:31:11 +0800 Message-Id: <1405528281-23744-5-git-send-email-ming.lei@canonical.com> In-Reply-To: <1405528281-23744-1-git-send-email-ming.lei@canonical.com> References: <1405528281-23744-1-git-send-email-ming.lei@canonical.com> Subject: [Qemu-devel] [PATCH RFC 04/14] Revert "raw-posix: drop raw_get_aio_fd() since it is no longer used" List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, Paolo Bonzini , Stefan Hajnoczi Cc: Kevin Wolf , Ming Lei , Fam Zheng , "Michael S. Tsirkin" This reverts commit 76ef2cf5493a215efc351f48ae7094d6c183fcac. Reintroduce the helper of raw_get_aio_fd() for enabling coroutinue bypass mode in case of raw image. Signed-off-by: Ming Lei --- block/raw-posix.c | 34 ++++++++++++++++++++++++++++++++++ include/block/block.h | 9 +++++++++ 2 files changed, 43 insertions(+) diff --git a/block/raw-posix.c b/block/raw-posix.c index 2bcc73d..98b9626 100644 --- a/block/raw-posix.c +++ b/block/raw-posix.c @@ -2419,6 +2419,40 @@ static BlockDriver bdrv_host_cdrom = { }; #endif /* __FreeBSD__ */ +#ifdef CONFIG_LINUX_AIO +/** + * Return the file descriptor for Linux AIO + * + * This function is a layering violation and should be removed when it becomes + * possible to call the block layer outside the global mutex. It allows the + * caller to hijack the file descriptor so I/O can be performed outside the + * block layer. + */ +int raw_get_aio_fd(BlockDriverState *bs) +{ + BDRVRawState *s; + + if (!bs->drv) { + return -ENOMEDIUM; + } + + if (bs->drv == bdrv_find_format("raw")) { + bs = bs->file; + } + + /* raw-posix has several protocols so just check for raw_aio_readv */ + if (bs->drv->bdrv_aio_readv != raw_aio_readv) { + return -ENOTSUP; + } + + s = bs->opaque; + if (!s->use_aio) { + return -ENOTSUP; + } + return s->fd; +} +#endif /* CONFIG_LINUX_AIO */ + static void bdrv_file_init(void) { /* diff --git a/include/block/block.h b/include/block/block.h index 32d3676..8d15693 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -482,6 +482,15 @@ void bdrv_op_block_all(BlockDriverState *bs, Error *reason); void bdrv_op_unblock_all(BlockDriverState *bs, Error *reason); bool bdrv_op_blocker_is_empty(BlockDriverState *bs); +#ifdef CONFIG_LINUX_AIO +int raw_get_aio_fd(BlockDriverState *bs); +#else +static inline int raw_get_aio_fd(BlockDriverState *bs) +{ + return -ENOTSUP; +} +#endif + enum BlockAcctType { BDRV_ACCT_READ, BDRV_ACCT_WRITE, -- 1.7.9.5