09ace81c1d
This adds AIO support to the ubd driver. The driver breaks a struct request into IO requests to the host, based on the hardware segments in the request and on any COW blocks covered by the request. The ubd IO thread is gone, since there is now an equivalent thread in the AIO module. There is provision for multiple outstanding requests now. Requests aren't retired until all pieces of it have been completed. The AIO requests have a shared count, which is decremented as IO operations come in until it reaches 0. This can be possibly moved to the request struct - haven't looked at this yet. Signed-off-by: Jeff Dike <jdike@addtoit.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
41 lines
727 B
C
41 lines
727 B
C
/*
|
|
* Copyright (C) 2004 Jeff Dike (jdike@karaya.com)
|
|
* Licensed under the GPL
|
|
*/
|
|
|
|
#ifndef AIO_H__
|
|
#define AIO_H__
|
|
|
|
enum aio_type { AIO_READ, AIO_WRITE, AIO_MMAP };
|
|
|
|
struct aio_thread_reply {
|
|
void *data;
|
|
int err;
|
|
};
|
|
|
|
struct aio_context {
|
|
enum aio_type type;
|
|
int fd;
|
|
void *data;
|
|
int len;
|
|
unsigned long long offset;
|
|
int reply_fd;
|
|
struct aio_context *next;
|
|
};
|
|
|
|
#define INIT_AIO(aio_type, aio_fd, aio_data, aio_len, aio_offset, \
|
|
aio_reply_fd) \
|
|
{ .type = aio_type, \
|
|
.fd = aio_fd, \
|
|
.data = aio_data, \
|
|
.len = aio_len, \
|
|
.offset = aio_offset, \
|
|
.reply_fd = aio_reply_fd }
|
|
|
|
#define INIT_AIO_CONTEXT { .reply_fd = -1, \
|
|
.next = NULL }
|
|
|
|
extern int submit_aio(struct aio_context *aio);
|
|
|
|
#endif
|