diff options
author | Christoph Hellwig <hch@lst.de> | 2009-08-20 16:58:19 +0200 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-08-27 20:30:22 -0500 |
commit | 9ef91a677110ec200d7b2904fc4bcae5a77329ad (patch) | |
tree | fb402ed4b586edc26b7f4e55b378736fd36111b1 /posix-aio-compat.h | |
parent | bf0cb498c581b6be7bf4c31f500487600abf2db5 (diff) |
raw-posix: refactor AIO support
Currently the raw-posix.c code contains a lot of knowledge about the
asynchronous I/O scheme that is mostly implemented in posix-aio-compat.c.
All this code does not really belong here and is getting a bit in the
way of implementing native AIO on Linux.
So instead move all the guts of the AIO implementation into
posix-aio-compat.c (which might need a better name, btw).
There's now a very small interface between the AIO providers and raw-posix.c:
- an init routine is called from raw_open_common to return an AIO context
for this drive. An AIO implementation may either re-use one context
for all drives, or use a different one for each as the Linux native
AIO support will do.
- an submit routine is called from the aio_reav/writev methods to submit
an AIO request
There are no indirect calls involved in this interface as we need to
decide which one to call manually. We will only call the Linux AIO native
init function if we were requested to by vl.c, and we will only call
the native submit function if we are asked to and the request is properly
aligned. That's also the reason why the alignment check actually does
the inverse move and now goes into raw-posix.c.
The old posix-aio-compat.h headers is removed now that most of it's
content is private to posix-aio-compat.c, and instead we add a new
block/raw-posix-aio.h headers is created containing only the tiny interface
between raw-posix.c and the AIO implementation.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'posix-aio-compat.h')
-rw-r--r-- | posix-aio-compat.h | 68 |
1 files changed, 0 insertions, 68 deletions
diff --git a/posix-aio-compat.h b/posix-aio-compat.h deleted file mode 100644 index 1c5dcbd920..0000000000 --- a/posix-aio-compat.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * QEMU posix-aio emulation - * - * Copyright IBM, Corp. 2008 - * - * Authors: - * Anthony Liguori <aliguori@us.ibm.com> - * - * This work is licensed under the terms of the GNU GPL, version 2. See - * the COPYING file in the top-level directory. - * - */ - -#ifndef QEMU_POSIX_AIO_COMPAT_H -#define QEMU_POSIX_AIO_COMPAT_H - -#include <sys/types.h> -#include <unistd.h> -#include <signal.h> - -#include "sys-queue.h" - -#define QEMU_PAIO_CANCELED 0x01 -#define QEMU_PAIO_NOTCANCELED 0x02 -#define QEMU_PAIO_ALLDONE 0x03 - -struct qemu_paiocb -{ - int aio_fildes; - union { - struct iovec *aio_iov; - void *aio_ioctl_buf; - }; - int aio_niov; - size_t aio_nbytes; -#define aio_ioctl_cmd aio_nbytes /* for QEMU_PAIO_IOCTL */ - int ev_signo; - off_t aio_offset; - unsigned aio_flags; -/* 512 byte alignment required for buffer, offset and length */ -#define QEMU_AIO_SECTOR_ALIGNED 0x01 - - /* private */ - TAILQ_ENTRY(qemu_paiocb) node; - int aio_type; -#define QEMU_PAIO_READ 0x01 -#define QEMU_PAIO_WRITE 0x02 -#define QEMU_PAIO_IOCTL 0x03 - ssize_t ret; - int active; -}; - -struct qemu_paioinit -{ - unsigned int aio_threads; - unsigned int aio_num; - unsigned int aio_idle_time; -}; - -int qemu_paio_init(struct qemu_paioinit *aioinit); -int qemu_paio_read(struct qemu_paiocb *aiocb); -int qemu_paio_write(struct qemu_paiocb *aiocb); -int qemu_paio_ioctl(struct qemu_paiocb *aiocb); -int qemu_paio_error(struct qemu_paiocb *aiocb); -ssize_t qemu_paio_return(struct qemu_paiocb *aiocb); -int qemu_paio_cancel(int fd, struct qemu_paiocb *aiocb); - -#endif |