From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:33570) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TZ5gg-0002Gw-7l for qemu-devel@nongnu.org; Thu, 15 Nov 2012 15:05:25 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TZ5gd-0006ef-5Y for qemu-devel@nongnu.org; Thu, 15 Nov 2012 15:05:22 -0500 Received: from e28smtp06.in.ibm.com ([122.248.162.6]:48318) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TZ5gc-00067h-Hb for qemu-devel@nongnu.org; Thu, 15 Nov 2012 15:05:19 -0500 Received: from /spool/local by e28smtp06.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Fri, 16 Nov 2012 01:34:10 +0530 Received: from d28av04.in.ibm.com (d28av04.in.ibm.com [9.184.220.66]) by d28relay01.in.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id qAFK479c27394298 for ; Fri, 16 Nov 2012 01:34:08 +0530 Received: from d28av04.in.ibm.com (loopback [127.0.0.1]) by d28av04.in.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id qAG1Xwan008552 for ; Fri, 16 Nov 2012 12:33:58 +1100 From: Anthony Liguori In-Reply-To: <1352992746-8767-2-git-send-email-stefanha@redhat.com> References: <1352992746-8767-1-git-send-email-stefanha@redhat.com> <1352992746-8767-2-git-send-email-stefanha@redhat.com> Date: Thu, 15 Nov 2012 14:03:59 -0600 Message-ID: <87ip96y6og.fsf@codemonkey.ws> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Subject: Re: [Qemu-devel] [PATCH 1/7] raw-posix: add raw_get_aio_fd() for virtio-blk-data-plane List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Hajnoczi , qemu-devel@nongnu.org Cc: Kevin Wolf , "Michael S. Tsirkin" , Khoa Huynh , Paolo Bonzini , Asias He Stefan Hajnoczi writes: > The raw_get_aio_fd() function allows virtio-blk-data-plane to get the > file descriptor of a raw image file with Linux AIO enabled. This > interface is really a layering violation that can be resolved once the > block layer is able to run outside the global mutex - at that point > virtio-blk-data-plane will switch from custom Linux AIO code to using > the block layer. > > Signed-off-by: Stefan Hajnoczi I think this creates user confusion because virtio-blk-data-plane can't actually take a BDS. So why not just make a string 'filename' property and open it directly in virtio-blk-data-plane? Then it's at least clear to the user and management tools what the device is capable of doing. Regards, Anthony Liguori > --- > block.h | 9 +++++++++ > block/raw-posix.c | 34 ++++++++++++++++++++++++++++++++++ > 2 files changed, 43 insertions(+) > > diff --git a/block.h b/block.h > index 722c620..2dc6aaf 100644 > --- a/block.h > +++ b/block.h > @@ -365,6 +365,15 @@ void bdrv_disable_copy_on_read(BlockDriverState *bs); > void bdrv_set_in_use(BlockDriverState *bs, int in_use); > int bdrv_in_use(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, > diff --git a/block/raw-posix.c b/block/raw-posix.c > index f2f0404..fc04981 100644 > --- a/block/raw-posix.c > +++ b/block/raw-posix.c > @@ -1768,6 +1768,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) > { > /* > -- > 1.8.0