[Libsysio-commit] HEAD: libsysio/drivers/incore fs_incore.c
Brought to you by:
lward
|
From: Lee W. <lw...@us...> - 2003-10-13 01:04:44
|
Update of /cvsroot/libsysio/libsysio/drivers/incore
In directory sc8-pr-cvs1:/tmp/cvs-serv31768/drivers/incore
Modified Files:
fs_incore.c
Log Message:
The IO context record supported one call-back. It now supports a
chain. This was changed to accommodate the Sandia-PVFS driver. Also, it's
needed for the, coming, {read,write}_strided calls.
To add a callback to the chain use:
_sysio_ioctx_cb(struct ioctx *ioctx,
void (*func)(struct ioctx *, void *),
void *data)
Callbacks are added to the end of the existing chain. When called, by
_sysio_io_complete, they are run in order. So... If you're freeing
things using callbacks be careful not to depend on something in a
later callback that you previously free'd.
Also, _sysio_io_complete no longer waits for the driver. To call this, now,
is to signal completion.
Index: fs_incore.c
===================================================================
RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -w -b -B -p -r1.7 -r1.8
--- fs_incore.c 10 Oct 2003 18:50:31 -0000 1.7
+++ fs_incore.c 13 Oct 2003 01:04:34 -0000 1.8
@@ -143,11 +143,9 @@ static int _sysio_incore_dirop_link(stru
static int _sysio_incore_dirop_unlink(struct pnode *pno);
static int _sysio_incore_dirop_rename(struct pnode *old, struct pnode *new);
static int _sysio_incore_filop_ipreadv(struct inode *ino,
- struct io_arguments *ioargs,
- struct ioctx **ioctxp);
+ struct ioctx *ioctx);
static int _sysio_incore_filop_ipwritev(struct inode *ino,
- struct io_arguments *ioargs,
- struct ioctx **ioctxp);
+ struct ioctx *ioctx);
static int _sysio_incore_filop_iodone(struct ioctx *ioctx);
static int _sysio_incore_filop_fcntl(struct inode *ino, int cmd, va_list ap);
static int _sysio_incore_inop_sync(struct inode *ino);
@@ -172,12 +170,10 @@ static void _sysio_incore_illop(void);
(int (*)(struct pnode *, char *, size_t))_sysio_incore_e_inval
#define _sysio_incore_dirop_ipreadv \
(int (*)(struct inode *, \
- struct io_arguments *, \
- struct ioctx **))_sysio_incore_e_isdir
+ struct ioctx *))_sysio_incore_e_isdir
#define _sysio_incore_dirop_ipwritev \
(int (*)(struct inode *, \
- struct io_arguments *, \
- struct ioctx **))_sysio_incore_e_isdir
+ struct ioctx *))_sysio_incore_e_isdir
#define _sysio_incore_dirop_iodone \
(int (*)(struct ioctx *))_sysio_incore_illop
#define _sysio_incore_dirop_fcntl \
@@ -1490,18 +1486,12 @@ _sysio_incore_dirop_unlink(struct pnode
static int
incore_doio(ssize_t (*f)(struct incore_inode *, off_t, char *, size_t),
struct inode *ino,
- struct io_arguments *ioargs,
- struct ioctx **ioctxp)
+ struct ioctx *ioctx)
{
- struct ioctx *ioctx;
const struct iovec *iov;
size_t n;
ssize_t cc = 0;
- ioctx = _sysio_ioctx_new(ino, ioargs);
- if (!ioctx)
- return -ENOMEM;
-
iov = ioctx->ioctx_iovec;
for (n = ioctx->ioctx_iovlen, iov = ioctx->ioctx_iovec;
n--;
@@ -1522,7 +1512,6 @@ incore_doio(ssize_t (*f)(struct incore_i
ioctx->ioctx_errno = -cc;
}
- *ioctxp = ioctx;
return 0;
}
@@ -1545,11 +1534,10 @@ incore_read(struct incore_inode *icino,
static int
_sysio_incore_filop_ipreadv(struct inode *ino,
- struct io_arguments *ioargs,
- struct ioctx **ioctxp)
+ struct ioctx *ioctx)
{
- return incore_doio(incore_read, ino, ioargs, ioctxp);
+ return incore_doio(incore_read, ino, ioctx);
}
static ssize_t
@@ -1578,8 +1566,7 @@ incore_write(struct incore_inode *icino,
static int
_sysio_incore_filop_ipwritev(struct inode *ino,
- struct io_arguments *ioargs,
- struct ioctx **ioctxp)
+ struct ioctx *ioctx)
{
return incore_doio((ssize_t (*)(struct incore_inode *,
@@ -1587,8 +1574,7 @@ _sysio_incore_filop_ipwritev(struct inod
char *,
size_t))incore_write,
ino,
- ioargs,
- ioctxp);
+ ioctx);
}
static int
|