[Libsysio-commit] HEAD: libsysio/drivers/incore fs_incore.c
Brought to you by:
lward
From: Lee W. <lw...@us...> - 2004-04-16 20:38:42
|
Update of /cvsroot/libsysio/libsysio/drivers/incore In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30430/drivers/incore Modified Files: fs_incore.c Log Message: New operation for the drivers to implement -- take note! The drivers now need to implement inop_pos which takes an inode and a _SYSIO_OFF_T and should return the resulting position as though it were lseek(FD2INO(fd), off, SEEK_SET). As usual a negative return value is the negated errno. Lseek is altered to use this. Changes in fs_native.c to utilize pread/pwrite whenever positioning is required instead of an lseek/io-op pair of calls. This addresses a race to yod. Index: fs_incore.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -w -b -B -p -r1.16 -r1.17 --- fs_incore.c 25 Feb 2004 16:23:58 -0000 1.16 +++ fs_incore.c 16 Apr 2004 20:38:33 -0000 1.17 @@ -144,6 +144,8 @@ static int _sysio_incore_dirop_unlink(st static int _sysio_incore_dirop_rename(struct pnode *old, struct pnode *new); static int _sysio_incore_filop_read(struct inode *ino, struct ioctx *ioctx); static int _sysio_incore_filop_write(struct inode *ino, struct ioctx *ioctx); +static _SYSIO_OFF_T _sysio_incore_filop_pos(struct inode *ino, + _SYSIO_OFF_T off); 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); @@ -157,29 +159,28 @@ static int _sysio_incore_inop_statvfs(st struct intnl_statvfs *buf); #endif static void _sysio_incore_inop_gone(struct inode *ino); -static int _sysio_incore_e_isdir(void); -static int _sysio_incore_e_inval(void); -static int _sysio_incore_e_nosys(void); -static void _sysio_incore_illop(void); #define _sysio_incore_dirop_symlink \ - (int (*)(struct pnode *, const char *))_sysio_incore_e_nosys + (int (*)(struct pnode *, const char *))_sysio_do_enosys #define _sysio_incore_dirop_readlink \ - (int (*)(struct pnode *, char *, size_t))_sysio_incore_e_inval + (int (*)(struct pnode *, char *, size_t))_sysio_do_einval #define _sysio_incore_dirop_read \ (int (*)(struct inode *, \ - struct ioctx *))_sysio_incore_e_isdir + struct ioctx *))_sysio_do_eisdir #define _sysio_incore_dirop_write \ (int (*)(struct inode *, \ - struct ioctx *))_sysio_incore_e_isdir + struct ioctx *))_sysio_do_eisdir +#define _sysio_incore_dirop_pos \ + (_SYSIO_OFF_T (*)(struct inode *, \ + _SYSIO_OFF_T))_sysio_do_eisdir #define _sysio_incore_dirop_iodone \ - (int (*)(struct ioctx *))_sysio_incore_illop + (int (*)(struct ioctx *))_sysio_do_illop #define _sysio_incore_dirop_fcntl \ - (int (*)(struct inode *, int, va_list))_sysio_incore_e_isdir + (int (*)(struct inode *, int, va_list))_sysio_do_eisdir #define _sysio_incore_dirop_ioctl \ (int (*)(struct inode *, \ unsigned long int, \ - va_list))_sysio_incore_e_isdir + va_list))_sysio_do_eisdir static struct inode_ops _sysio_incore_dir_ops = { _sysio_incore_dirop_lookup, @@ -197,6 +198,7 @@ static struct inode_ops _sysio_incore_di _sysio_incore_dirop_rename, _sysio_incore_dirop_read, _sysio_incore_dirop_write, + _sysio_incore_dirop_pos, _sysio_incore_dirop_iodone, _sysio_incore_dirop_fcntl, _sysio_incore_inop_sync, @@ -213,28 +215,28 @@ static struct inode_ops _sysio_incore_di (int (*)(struct pnode *, \ struct inode **, \ struct intent *, \ - const char *))_sysio_incore_illop + const char *))_sysio_do_illop #define _sysio_incore_filop_getdirentries \ (ssize_t (*)(struct inode *, \ char *, \ size_t, \ - _SYSIO_OFF_T *))_sysio_incore_illop + _SYSIO_OFF_T *))_sysio_do_illop #define _sysio_incore_filop_mkdir \ - (int (*)(struct pnode *, mode_t))_sysio_incore_illop + (int (*)(struct pnode *, mode_t))_sysio_do_illop #define _sysio_incore_filop_rmdir \ - (int (*)(struct pnode *))_sysio_incore_illop + (int (*)(struct pnode *))_sysio_do_illop #define _sysio_incore_filop_symlink \ - (int (*)(struct pnode *, const char *))_sysio_incore_illop + (int (*)(struct pnode *, const char *))_sysio_do_illop #define _sysio_incore_symlinkop_readlink \ - (int (*)(struct pnode *, char *, size_t))_sysio_incore_illop + (int (*)(struct pnode *, char *, size_t))_sysio_do_illop #define _sysio_incore_filop_link \ - (int (*)(struct pnode *old, struct pnode *new))_sysio_incore_illop + (int (*)(struct pnode *old, struct pnode *new))_sysio_do_illop #define _sysio_incore_filop_unlink \ - (int (*)(struct pnode *pno))_sysio_incore_illop + (int (*)(struct pnode *pno))_sysio_do_illop #define _sysio_incore_filop_rename \ - (int (*)(struct pnode *old, struct pnode *new))_sysio_incore_illop + (int (*)(struct pnode *old, struct pnode *new))_sysio_do_illop #define _sysio_incore_filop_mknod \ - (int (*)(struct pnode *pno, mode_t, dev_t))_sysio_incore_illop + (int (*)(struct pnode *pno, mode_t, dev_t))_sysio_do_illop static struct inode_ops _sysio_incore_file_ops = { _sysio_incore_filop_lookup, @@ -252,6 +254,7 @@ static struct inode_ops _sysio_incore_fi _sysio_incore_filop_rename, _sysio_incore_filop_read, _sysio_incore_filop_write, + _sysio_incore_filop_pos, _sysio_incore_filop_iodone, _sysio_incore_filop_fcntl, _sysio_incore_inop_sync, @@ -280,6 +283,7 @@ static struct inode_ops _sysio_incore_de _sysio_incore_filop_rename, _sysio_nodev_inop_read, _sysio_nodev_inop_write, + _sysio_nodev_inop_pos, _sysio_nodev_inop_iodone, _sysio_incore_filop_fcntl, _sysio_incore_inop_sync, @@ -1549,6 +1553,13 @@ _sysio_incore_filop_write(struct inode * ioctx); } +static _SYSIO_OFF_T +_sysio_incore_filop_pos(struct inode *ino __IS_UNUSED, _SYSIO_OFF_T off) +{ + + return off; +} + static int _sysio_incore_filop_iodone(struct ioctx *iocp __IS_UNUSED) { @@ -1680,34 +1691,3 @@ _sysio_incore_inop_gone(struct inode *in incore_i_destroy(icino); } - -static int -_sysio_incore_e_isdir(void) -{ - - return -EISDIR; -} - -static int -_sysio_incore_e_inval(void) -{ - - return -EINVAL; -} - -static int -_sysio_incore_e_nosys(void) -{ - - return -ENOSYS; -} - -static void -_sysio_incore_illop(void) -{ - - /* - * Uh-oh! Goodbye Bruce. - */ - abort(); -} |