[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 |