Commit 4065742a authored by Stefan Hajnoczi's avatar Stefan Hajnoczi
Browse files

raw-posix: add raw_get_aio_fd() for virtio-blk-data-plane

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: default avatarStefan Hajnoczi <>
parent 5928023c
......@@ -1776,6 +1776,40 @@ static BlockDriver bdrv_host_cdrom = {
#endif /* __FreeBSD__ */
* 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)
......@@ -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);
int raw_get_aio_fd(BlockDriverState *bs);
static inline int raw_get_aio_fd(BlockDriverState *bs)
return -ENOTSUP;
enum BlockAcctType {
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment