[Libsysio-commit] HEAD: libsysio/include dev.h inode.h
Brought to you by:
lward
From: Lee W. <lw...@us...> - 2004-04-16 20:38:43
|
Update of /cvsroot/libsysio/libsysio/include In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30430/include Modified Files: dev.h inode.h 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: dev.h =================================================================== RCS file: /cvsroot/libsysio/libsysio/include/dev.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -w -b -B -p -r1.6 -r1.7 --- dev.h 6 Feb 2004 20:07:29 -0000 1.6 +++ dev.h 16 Apr 2004 20:38:34 -0000 1.7 @@ -70,77 +70,79 @@ extern const struct inode_ops _sysio_nod (int (*)(struct pnode *, \ struct inode **, \ struct intent *, \ - const char *))_sysio_dev_illop + const char *))_sysio_do_illop #define _sysio_nodev_inop_getattr \ (int (*)(struct pnode *, \ struct inode *, \ - struct intnl_stat *))_sysio_dev_illop + struct intnl_stat *))_sysio_do_ebadf #define _sysio_nodev_inop_setattr \ (int (*)(struct pnode *, \ struct inode *, \ unsigned , \ - struct intnl_stat *))_sysio_dev_illop + struct intnl_stat *))_sysio_do_ebadf #define _sysio_nodev_getdirentries \ (ssize_t (*)(struct inode *, \ char *, \ size_t , \ - _SYSIO_OFF_T *))_sysio_dev_illop + _SYSIO_OFF_T *))_sysio_do_illop #define _sysio_nodev_inop_mkdir \ (int (*)(struct pnode *, \ - mode_t))_sysio_dev_illop + mode_t))_sysio_do_illop #define _sysio_nodev_inop_rmdir \ - (int (*)(struct pnode *))_sysio_dev_illop + (int (*)(struct pnode *))_sysio_do_illop #define _sysio_nodev_inop_symlink \ (int (*)(struct pnode *, \ - const char *))_sysio_dev_illop + const char *))_sysio_do_illop #define _sysio_nodev_inop_readlink \ (int (*)(struct pnode *, \ char *, \ - size_t))_sysio_dev_illop + size_t))_sysio_do_illop #define _sysio_nodev_inop_open \ (int (*)(struct pnode *, \ int, \ - mode_t))_sysio_dev_illop + mode_t))_sysio_do_enoent #define _sysio_nodev_inop_close \ - (int (*)(struct inode *))_sysio_dev_illop + (int (*)(struct inode *))_sysio_do_ebadf #define _sysio_nodev_inop_link \ - (int (*)(struct pnode *, struct pnode *))_sysio_dev_illop + (int (*)(struct pnode *, struct pnode *))_sysio_do_illop #define _sysio_nodev_inop_unlink \ - (int (*)(struct pnode *))_sysio_dev_illop + (int (*)(struct pnode *))_sysio_do_illop #define _sysio_nodev_inop_rename \ - (int (*)(struct pnode *, struct pnode *))_sysio_dev_illop + (int (*)(struct pnode *, struct pnode *))_sysio_do_illop #define _sysio_nodev_inop_read \ (int (*)(struct inode *, \ - struct ioctx *))_sysio_dev_illop + struct ioctx *))_sysio_do_ebadf #define _sysio_nodev_inop_write \ (int (*)(struct inode *, \ - struct ioctx *))_sysio_dev_illop + struct ioctx *))_sysio_do_ebadf +#define _sysio_nodev_inop_pos \ + (_SYSIO_OFF_T (*)(struct inode *, _SYSIO_OFF_T))_sysio_do_ebadf #define _sysio_nodev_inop_iodone \ - (int (*)(struct ioctx *))_sysio_dev_illop + (int (*)(struct ioctx *))_sysio_do_einval #define _sysio_nodev_inop_fcntl \ (int (*)(struct inode *, \ int, \ - va_list))_sysio_dev_illop + va_list))_sysio_do_ebadf #define _sysio_nodev_inop_sync \ - (int (*)(struct inode *))_sysio_dev_illop + (int (*)(struct inode *))_sysio_do_ebadf #define _sysio_nodev_inop_datasync \ - (int (*)(struct inode *))_sysio_dev_illop + (int (*)(struct inode *))_sysio_do_ebadf #define _sysio_nodev_inop_ioctl \ (int (*)(struct inode *, \ unsigned long int, \ - va_list))_sysio_dev_illop + va_list))_sysio_do_ebadf #define _sysio_nodev_inop_mknod \ (int (*)(struct pnode *, \ mode_t, \ - dev_t))_sysio_dev_illop + dev_t))_sysio_do_illop #ifdef _HAVE_STATVFS #define _sysio_nodev_inop_statvfs \ (int (*)(struct pnode *, \ struct inode *, \ - struct intnl_statvfs *))_sysio_dev_illop + struct intnl_statvfs *))_sysio_do_illop #endif #define _sysio_nodev_inop_gone \ - (void (*)(struct inode *ino))_sysio_dev_noop + (void (*)(struct inode *ino))_sysio_do_noop extern int _sysio_dev_init(void); extern dev_t _sysio_dev_alloc(void); @@ -148,5 +150,3 @@ extern struct inode_ops *_sysio_dev_look extern int _sysio_char_dev_register(int major, const char *name, struct inode_ops *ops); -extern int _sysio_dev_illop(void); -extern void _sysio_dev_noop(void); Index: inode.h =================================================================== RCS file: /cvsroot/libsysio/libsysio/include/inode.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -w -b -B -p -r1.15 -r1.16 --- inode.h 14 Feb 2004 19:42:58 -0000 1.15 +++ inode.h 16 Apr 2004 20:38:34 -0000 1.16 @@ -101,6 +101,7 @@ struct inode_ops { int (*inop_rename)(struct pnode *old, struct pnode *new); int (*inop_read)(struct inode *ino, struct ioctx *ioctx); int (*inop_write)(struct inode *ino, struct ioctx *ioctx); + _SYSIO_OFF_T (*inop_pos)(struct inode *ino, _SYSIO_OFF_T off); int (*inop_iodone)(struct ioctx *iocp); int (*inop_fcntl)(struct inode *ino, int cmd, va_list ap); int (*inop_sync)(struct inode *ino); @@ -453,6 +454,14 @@ extern int _sysio_setattr(struct pnode * struct inode *ino, unsigned mask, struct intnl_stat *stbuf); +extern void _sysio_do_noop(void); +extern void _sysio_do_illop(void); +extern int _sysio_do_ebadf(void); +extern int _sysio_do_einval(void); +extern int _sysio_do_enoent(void); +extern int _sysio_do_espipe(void); +extern int _sysio_do_eisdir(void); +extern int _sysio_do_enosys(void); extern int _sysio_path_walk(struct pnode *parent, struct nameidata *nd); #ifdef AUTOMOUNT_FILE_NAME extern void _sysio_next_component(const char *path, struct qstr *name); |