Thread: [Libsysio-commit] HEAD: libsysio/drivers/incore fs_incore.c (Page 2)
Brought to you by:
lward
From: Lee W. <lw...@us...> - 2007-04-30 23:24:16
|
Update of /cvsroot/libsysio/libsysio/drivers/incore In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv2987/drivers/incore Modified Files: fs_incore.c Log Message: Restore support of statvfs{,64}. Index: fs_incore.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -w -b -B -p -r1.29 -r1.30 --- fs_incore.c 30 Apr 2007 16:52:19 -0000 1.29 +++ fs_incore.c 30 Apr 2007 23:24:12 -0000 1.30 @@ -56,9 +56,7 @@ #include <sys/types.h> #include <dirent.h> #include <sys/stat.h> -#ifdef _HAVE_STATVFS #include <sys/statvfs.h> -#endif #include <sys/queue.h> #include "sysio.h" @@ -154,11 +152,9 @@ static int _sysio_incore_filop_ioctl(str unsigned long int request, va_list ap); static int _sysio_incore_dirop_mknod(struct pnode *pno, mode_t mode, dev_t dev); -#ifdef _HAVE_STATVFS static int _sysio_incore_inop_statvfs(struct pnode *pno, struct inode *ino, struct intnl_statvfs *buf); -#endif static void _sysio_incore_inop_gone(struct inode *ino); #define _sysio_incore_dirop_symlink \ @@ -206,9 +202,7 @@ static struct inode_ops _sysio_incore_di _sysio_incore_inop_sync, _sysio_incore_dirop_ioctl, _sysio_incore_dirop_mknod, -#ifdef _HAVE_STATVFS _sysio_incore_inop_statvfs, -#endif _sysio_incore_inop_gone }; @@ -261,9 +255,7 @@ static struct inode_ops _sysio_incore_fi _sysio_incore_inop_sync, _sysio_incore_filop_ioctl, _sysio_incore_filop_mknod, -#ifdef _HAVE_STATVFS _sysio_incore_inop_statvfs, -#endif _sysio_incore_inop_gone }; @@ -290,9 +282,7 @@ static struct inode_ops _sysio_incore_de _sysio_nodev_inop_sync, _sysio_nodev_inop_ioctl, _sysio_incore_filop_mknod, -#ifdef _HAVE_STATVFS _sysio_incore_inop_statvfs, -#endif _sysio_incore_inop_gone }; @@ -1697,17 +1687,14 @@ _sysio_incore_dirop_mknod(struct pnode * return incore_create(pno, &stat); } -#ifdef _HAVE_STATVFS static int _sysio_incore_inop_statvfs(struct pnode *pno, - struct inode *ino, + struct inode *ino __IS_UNUSED, struct intnl_statvfs *buf) { struct filesys *fs; - if (!ino) - ino = pno->p_base->pb_ino; - assert(ino); + assert(pno); fs = pno->p_base->pb_ino->i_fs; @@ -1716,9 +1703,9 @@ _sysio_incore_inop_statvfs(struct pnode /* * Mostly, we lie. */ - buf->f_bsize = fs->fs_bsize; + buf->f_bsize = getpagesize(); buf->f_frsize = buf->f_bsize; - buf->f_blocks = ~0; + buf->f_blocks = sizeof(char *) * ULONG_MAX; buf->f_blocks /= buf->f_bsize; buf->f_bfree = buf->f_blocks - 1; buf->f_bavail = buf->f_bfree; @@ -1726,12 +1713,11 @@ _sysio_incore_inop_statvfs(struct pnode buf->f_ffree = buf->f_files - 1; buf->f_favail = buf->f_ffree; buf->f_fsid = fs->fs_id; - buf->f_flag = 0; - buf->f_namemax = ULONG_MAX; + buf->f_flag = pno->p_mount->mnt_flags; + buf->f_namemax = 255; return 0; } -#endif void _sysio_incore_inop_gone(struct inode *ino) |
From: Lee W. <lw...@us...> - 2007-05-01 15:30:57
|
Update of /cvsroot/libsysio/libsysio/drivers/incore In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv31415 Modified Files: fs_incore.c Log Message: Changed the comment about uid and group specifier to reflect reality. Index: fs_incore.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v retrieving revision 1.30 retrieving revision 1.31 diff -u -w -b -B -p -r1.30 -r1.31 --- fs_incore.c 30 Apr 2007 23:24:12 -0000 1.30 +++ fs_incore.c 1 May 2007 15:30:52 -0000 1.31 @@ -535,7 +535,7 @@ _sysio_incore_fsswop_mount(const char *s * Source is a specification for the root attributes of this * new file system in the format: * - * <permissions>[+<owner>][-<group>] + * <permissions>[+<owner>][+<group>] */ ul = strtoul(source, &cp, 0); mode = (mode_t )ul & 07777; |
From: Ruth K. <rk...@us...> - 2007-05-09 23:16:25
|
Update of /cvsroot/libsysio/libsysio/drivers/incore In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv5699/drivers/incore Modified Files: fs_incore.c Log Message: add ifdef _HAVE_STATVFS Index: fs_incore.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -w -b -B -p -r1.31 -r1.32 --- fs_incore.c 1 May 2007 15:30:52 -0000 1.31 +++ fs_incore.c 9 May 2007 23:16:20 -0000 1.32 @@ -152,9 +152,11 @@ static int _sysio_incore_filop_ioctl(str unsigned long int request, va_list ap); static int _sysio_incore_dirop_mknod(struct pnode *pno, mode_t mode, dev_t dev); +#ifdef _HAVE_STATVFS static int _sysio_incore_inop_statvfs(struct pnode *pno, struct inode *ino, struct intnl_statvfs *buf); +#endif static void _sysio_incore_inop_gone(struct inode *ino); #define _sysio_incore_dirop_symlink \ @@ -202,7 +204,9 @@ static struct inode_ops _sysio_incore_di _sysio_incore_inop_sync, _sysio_incore_dirop_ioctl, _sysio_incore_dirop_mknod, +#ifdef _HAVE_STATVFS _sysio_incore_inop_statvfs, +#endif _sysio_incore_inop_gone }; @@ -255,7 +259,9 @@ static struct inode_ops _sysio_incore_fi _sysio_incore_inop_sync, _sysio_incore_filop_ioctl, _sysio_incore_filop_mknod, +#ifdef _HAVE_STATVFS _sysio_incore_inop_statvfs, +#endif _sysio_incore_inop_gone }; @@ -282,7 +288,9 @@ static struct inode_ops _sysio_incore_de _sysio_nodev_inop_sync, _sysio_nodev_inop_ioctl, _sysio_incore_filop_mknod, +#ifdef _HAVE_STATVFS _sysio_incore_inop_statvfs, +#endif _sysio_incore_inop_gone }; @@ -1687,6 +1695,7 @@ _sysio_incore_dirop_mknod(struct pnode * return incore_create(pno, &stat); } +#ifdef _HAVE_STATVFS static int _sysio_incore_inop_statvfs(struct pnode *pno, struct inode *ino __IS_UNUSED, @@ -1718,6 +1727,7 @@ _sysio_incore_inop_statvfs(struct pnode return 0; } +#endif void _sysio_incore_inop_gone(struct inode *ino) |
From: Lee W. <lw...@us...> - 2007-07-02 18:58:48
|
Update of /cvsroot/libsysio/libsysio/drivers/incore In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv18012/drivers/incore Modified Files: fs_incore.c Log Message: Altered tracing support to include a format now. Re-introducing _HAVE_STATVFS6 for binary compatibility. Index: fs_incore.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v retrieving revision 1.32 retrieving revision 1.33 diff -u -w -b -B -p -r1.32 -r1.33 --- fs_incore.c 9 May 2007 23:16:20 -0000 1.32 +++ fs_incore.c 2 Jul 2007 18:58:15 -0000 1.33 @@ -56,7 +56,9 @@ #include <sys/types.h> #include <dirent.h> #include <sys/stat.h> +#ifdef _HAVE_STATVFS #include <sys/statvfs.h> +#endif #include <sys/queue.h> #include "sysio.h" |
From: Lee W. <lw...@us...> - 2007-09-21 19:41:40
|
Update of /cvsroot/libsysio/libsysio/drivers/incore In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv759/drivers/incore Modified Files: fs_incore.c Log Message: The pnode base name cache is now maintained as a hashed table of trees, instead of lists. The pnode base record was re-organized. The qstr name record and parent were grouped under a pnodE_base_key sub-record and the new field named pb_key. As well, the LIST_ENTRY for pb_names was removed and a struct tree record added, reflecting the conversion to trees from lists in the hash table slots. + Fixed an issue in inode.c where the pnode base nodes were being reclaimed wholesale, instead of partially, on every call to the garbage collector. Index: fs_incore.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v retrieving revision 1.33 retrieving revision 1.34 diff -u -w -b -B -p -r1.33 -r1.34 --- fs_incore.c 2 Jul 2007 18:58:15 -0000 1.33 +++ fs_incore.c 21 Sep 2007 19:41:37 -0000 1.34 @@ -835,7 +835,7 @@ _sysio_incore_dirop_lookup(struct pnode icino = I2IC(ino); INCORE_LD_INIT(&lookup_data, ULONG_MAX, - &pno->p_base->pb_name); + &pno->p_base->pb_key.pbk_name); de = incore_directory_probe(icino->ici_data, icino->ici_st.st_size, @@ -1228,7 +1228,7 @@ _sysio_incore_dirop_mkdir(struct pnode * */ err = incore_directory_insert(parent, - &pno->p_base->pb_name, + &pno->p_base->pb_key.pbk_name, stat.st_ino, INCORE_D_TYPEOF(S_IFDIR)); @@ -1299,11 +1299,11 @@ _sysio_incore_dirop_rmdir(struct pnode * struct incore_inode *icino = I2IC(ino); int err; - if (!pno->p_base->pb_name.len || - (pno->p_base->pb_name.name[0] == '.' && - (pno->p_base->pb_name.len == 1 || - (pno->p_base->pb_name.len == 2 && - pno->p_base->pb_name.name[1] == '.')))) + if (!pno->p_base->pb_key.pbk_name.len || + (pno->p_base->pb_key.pbk_name.name[0] == '.' && + (pno->p_base->pb_key.pbk_name.len == 1 || + (pno->p_base->pb_key.pbk_name.len == 2 && + pno->p_base->pb_key.pbk_name.name[1] == '.')))) return -EINVAL; if (!S_ISDIR(icino->ici_st.st_mode)) @@ -1315,7 +1315,7 @@ _sysio_incore_dirop_rmdir(struct pnode * pno->p_base->pb_ino = NULL; err = incore_unlink_entry(I2IC(pno->p_parent->p_base->pb_ino), - &pno->p_base->pb_name); + &pno->p_base->pb_key.pbk_name); return err; } @@ -1355,7 +1355,7 @@ incore_create(struct pnode *pno, struct */ err = incore_directory_insert(I2IC(dino), - &pno->p_base->pb_name, + &pno->p_base->pb_key.pbk_name, stat->st_ino, INCORE_D_TYPEOF(icino->ici_st.st_mode)); if (err) { @@ -1429,7 +1429,7 @@ _sysio_incore_dirop_link(struct pnode *o */ err = incore_directory_insert(I2IC(new->p_parent->p_base->pb_ino), - &new->p_base->pb_name, + &new->p_base->pb_key.pbk_name, icino->ici_st.st_ino, INCORE_D_TYPEOF(icino->ici_st.st_mode)); if (err) @@ -1457,7 +1457,7 @@ _sysio_incore_dirop_rename(struct pnode return -ENOTEMPTY; err = incore_unlink_entry(I2IC(new->p_parent->p_base->pb_ino), - &new->p_base->pb_name); + &new->p_base->pb_key.pbk_name); if (err) return err; } @@ -1467,7 +1467,7 @@ _sysio_incore_dirop_rename(struct pnode */ err = incore_directory_insert(I2IC(new->p_parent->p_base->pb_ino), - &new->p_base->pb_name, + &new->p_base->pb_key.pbk_name, icino->ici_st.st_ino, INCORE_D_TYPEOF(icino->ici_st.st_mode)); if (err) @@ -1477,7 +1477,7 @@ _sysio_incore_dirop_rename(struct pnode */ err = incore_unlink_entry(I2IC(old->p_parent->p_base->pb_ino), - &old->p_base->pb_name); + &old->p_base->pb_key.pbk_name); if (err) abort(); @@ -1507,7 +1507,7 @@ _sysio_incore_dirop_unlink(struct pnode err = incore_unlink_entry(I2IC(pno->p_parent->p_base->pb_ino), - &pno->p_base->pb_name); + &pno->p_base->pb_key.pbk_name); return err; } |
From: Lee W. <lw...@us...> - 2007-09-24 19:00:19
|
Update of /cvsroot/libsysio/libsysio/drivers/incore In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv10952/drivers/incore Modified Files: fs_incore.c Log Message: All the drivers, in their mount routines, do something like: rootpb = _sysio_pb_new(&noname, NULL, rootino); err = _sysio_do_mount(..., rootpb, ...); This is clumsy. Crafted a convenience function called _sysio_mounti to do this for them. This simplifies the whole process a bit. Don't have to clean up the root pb node on error, for instance. The function is called exactly like _sysio_do_mount but with a ptr to the root inode instead of a ptr to the root pb node. Index: fs_incore.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v retrieving revision 1.34 retrieving revision 1.35 diff -u -w -b -B -p -r1.34 -r1.35 --- fs_incore.c 21 Sep 2007 19:41:37 -0000 1.34 +++ fs_incore.c 24 Sep 2007 19:00:02 -0000 1.35 @@ -537,9 +537,7 @@ _sysio_incore_fsswop_mount(const char *s struct incore_inode *icino; struct filesys *fs; struct inode *rooti; - struct pnode_base *rootpb; struct mount *mnt; - static struct qstr noname = { NULL, 0, 0 }; /* * Source is a specification for the root attributes of this @@ -585,7 +583,6 @@ _sysio_incore_fsswop_mount(const char *s dev = _sysio_dev_alloc(); mnt = NULL; - rootpb = NULL; rooti = NULL; fs = NULL; icino = NULL; @@ -650,23 +647,13 @@ _sysio_incore_fsswop_mount(const char *s err = -ENOMEM; goto error; } - rootpb = _sysio_pb_new(&noname, NULL, rooti); - if (!rootpb) { - err = -ENOMEM; - goto error; - } /* * Have path-node specified by the given source argument. Let the * system finish the job, now. */ mnt = NULL; - err = - _sysio_do_mount(fs, - rootpb, - flags, - tocover, - &mnt); + err = _sysio_mounti(fs, rooti, flags, tocover, &mnt); if (err) goto error; @@ -677,10 +664,6 @@ _sysio_incore_fsswop_mount(const char *s error: if (mnt && _sysio_do_unmount(mnt) != 0) abort(); - if (rootpb) { - _sysio_pb_gone(rootpb); - rooti = NULL; - } if (rooti) I_RELE(rooti); if (fs) { |
From: Lee W. <lw...@us...> - 2008-12-06 22:16:43
|
Update of /cvsroot/libsysio/libsysio/drivers/incore In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv26562/drivers/incore Modified Files: fs_incore.c Log Message: In do_mnt(), must put the directory being covered whether the mount succeded or not. Fixed. Index: fs_incore.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -w -b -B -p -r1.35 -r1.36 --- fs_incore.c 24 Sep 2007 19:00:02 -0000 1.35 +++ fs_incore.c 6 Dec 2008 21:56:25 -0000 1.36 @@ -125,38 +125,35 @@ static int _sysio_incore_dirop_lookup(st struct intent *intnt, const char *path); static int _sysio_incore_inop_getattr(struct pnode *pno, - struct inode *ino, struct intnl_stat *stbuf); static int _sysio_incore_inop_setattr(struct pnode *pno, - struct inode *ino, unsigned mask, struct intnl_stat *stbuf); -static ssize_t _sysio_incore_dirop_filldirentries(struct inode *ino, +static ssize_t _sysio_incore_dirop_filldirentries(struct pnode *pno, _SYSIO_OFF_T *posp, char *buf, size_t nbytes); static int _sysio_incore_dirop_mkdir(struct pnode *pno, mode_t mode); static int _sysio_incore_dirop_rmdir(struct pnode *pno); static int _sysio_incore_inop_open(struct pnode *pno, int flags, mode_t mode); -static int _sysio_incore_inop_close(struct inode *ino); +static int _sysio_incore_inop_close(struct pnode *pno); static int _sysio_incore_dirop_link(struct pnode *old, struct pnode *new); 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_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, +static int _sysio_incore_filop_read(struct ioctx *ioctx); +static int _sysio_incore_filop_write(struct ioctx *ioctx); +static _SYSIO_OFF_T _sysio_incore_filop_pos(struct pnode *pno, _SYSIO_OFF_T off); static int _sysio_incore_filop_iodone(struct ioctx *ioctx); -static int _sysio_incore_filop_fcntl(struct inode *ino, +static int _sysio_incore_filop_fcntl(struct pnode *pno, int cmd, va_list ap, int *rtn); -static int _sysio_incore_inop_sync(struct inode *ino); -static int _sysio_incore_filop_ioctl(struct inode *ino, +static int _sysio_incore_inop_sync(struct pnode *pno); +static int _sysio_incore_filop_ioctl(struct pnode *pno, unsigned long int request, va_list ap); static int _sysio_incore_dirop_mknod(struct pnode *pno, mode_t mode, dev_t dev); #ifdef _HAVE_STATVFS static int _sysio_incore_inop_statvfs(struct pnode *pno, - struct inode *ino, struct intnl_statvfs *buf); #endif static void _sysio_incore_inop_gone(struct inode *ino); @@ -166,20 +163,18 @@ static void _sysio_incore_inop_gone(stru #define _sysio_incore_dirop_readlink \ (int (*)(struct pnode *, char *, size_t))_sysio_do_enosys #define _sysio_incore_dirop_read \ - (int (*)(struct inode *, \ - struct ioctx *))_sysio_do_eisdir + (int (*)(struct ioctx *))_sysio_do_eisdir #define _sysio_incore_dirop_write \ - (int (*)(struct inode *, \ - struct ioctx *))_sysio_do_eisdir + (int (*)(struct ioctx *))_sysio_do_eisdir #define _sysio_incore_dirop_pos \ - (_SYSIO_OFF_T (*)(struct inode *, \ + (_SYSIO_OFF_T (*)(struct pnode *, \ _SYSIO_OFF_T))_sysio_do_eisdir #define _sysio_incore_dirop_iodone \ (int (*)(struct ioctx *))_sysio_do_illop #define _sysio_incore_dirop_fcntl \ - (int (*)(struct inode *, int, va_list, int *))_sysio_do_eisdir + (int (*)(struct pnode *, int, va_list, int *))_sysio_do_eisdir #define _sysio_incore_dirop_ioctl \ - (int (*)(struct inode *, \ + (int (*)(struct pnode *, \ unsigned long int, \ va_list))_sysio_do_eisdir @@ -217,7 +212,7 @@ static int _sysio_incore_filop_lookup(st struct intent *intnt, const char *path); #define _sysio_incore_filop_filldirentries \ - (ssize_t (*)(struct inode *, \ + (ssize_t (*)(struct pnode *, \ _SYSIO_OFF_T *, \ char *, \ size_t))_sysio_do_illop @@ -497,7 +492,6 @@ incore_directory_new(struct incore_files &incore_dir_template, sizeof(incore_dir_template)); de = icino->ici_data; - de->d_ino = st->st_ino; de = (struct intnl_dirent *)((char *)de + #ifdef _DIRENT_HAVE_D_OFF @@ -506,7 +500,7 @@ incore_directory_new(struct incore_files de->d_reclen #endif ); - de->d_ino = parent->ici_st.st_ino; + de->d_ino = st->st_ino; /* * Set creation time to modify time set by truncate. @@ -656,6 +650,7 @@ _sysio_incore_fsswop_mount(const char *s err = _sysio_mounti(fs, rooti, flags, tocover, &mnt); if (err) goto error; + I_PUT(rooti); *mntp = mnt; @@ -665,7 +660,7 @@ error: if (mnt && _sysio_do_unmount(mnt) != 0) abort(); if (rooti) - I_RELE(rooti); + I_PUT(rooti); if (fs) { FS_RELE(fs); goto out; @@ -891,32 +886,26 @@ _sysio_incore_filop_lookup(struct pnode static int _sysio_incore_inop_getattr(struct pnode *pno, - struct inode *ino, struct intnl_stat *stbuf) { struct incore_inode *icino; - if (!ino) - ino = pno->p_base->pb_ino; - icino = I2IC(ino); + icino = I2IC(pno->p_base->pb_ino); *stbuf = icino->ici_st; return 0; } static int _sysio_incore_inop_setattr(struct pnode *pno, - struct inode *ino, unsigned mask, struct intnl_stat *stbuf) { struct incore_inode *icino; int err; - if (!ino) - ino = pno->p_base->pb_ino; - if (!ino) + if (!pno->p_base->pb_ino) return -EBADF; - icino = I2IC(ino); + icino = I2IC(pno->p_base->pb_ino); err = 0; if (mask & SETATTR_LEN) { @@ -939,7 +928,7 @@ _sysio_incore_inop_setattr(struct pnode icino->ici_st.st_gid = stbuf->st_gid; icino->ici_st.st_ctime = time(NULL); - ino->i_stbuf = icino->ici_st; + pno->p_base->pb_ino->i_stbuf = icino->ici_st; out: return err; } @@ -988,12 +977,12 @@ incore_directory_enumerate(struct intnl_ } static ssize_t -_sysio_incore_dirop_filldirentries(struct inode *ino, +_sysio_incore_dirop_filldirentries(struct pnode *pno, _SYSIO_OFF_T *posp, char *buf, size_t nbytes) { - struct incore_inode *icino = I2IC(ino); + struct incore_inode *icino = I2IC(pno->p_base->pb_ino); off_t off; struct intnl_dirent *de; struct copy_info copy_info; @@ -1220,9 +1209,9 @@ _sysio_incore_dirop_mkdir(struct pnode * I_RELE(ino); _sysio_i_gone(ino); return err; - } + } else + I_PUT(ino); - pno->p_base->pb_ino = ino; return 0; } @@ -1303,7 +1292,7 @@ _sysio_incore_dirop_rmdir(struct pnode * } static int -incore_create(struct pnode *pno, struct intnl_stat *stat) +incore_create(struct pnode *pno, struct intnl_stat *stat, struct inode **inop) { struct inode *dino, *ino; struct incore_inode *icino; @@ -1347,7 +1336,7 @@ incore_create(struct pnode *pno, struct return err; } - pno->p_base->pb_ino = ino; + *inop = ino; return 0; } @@ -1356,6 +1345,8 @@ _sysio_incore_inop_open(struct pnode *pn { struct intnl_stat stat; ino_t inum; + int err; + struct inode *ino; /* * File exists. Nothing to do. @@ -1383,11 +1374,16 @@ _sysio_incore_inop_open(struct pnode *pn stat.st_ctime = stat.st_mtime = stat.st_atime = 0; stat.st_ino = inum; - return incore_create(pno, &stat); + err = incore_create(pno, &stat, &ino); + if (err) + return err; + assert(ino); + I_PUT(ino); + return 0; } static int -_sysio_incore_inop_close(struct inode *ino __IS_UNUSED) +_sysio_incore_inop_close(struct pnode *pno __IS_UNUSED) { return 0; @@ -1496,7 +1492,6 @@ _sysio_incore_dirop_unlink(struct pnode static int doio(ssize_t (*f)(void *, size_t, _SYSIO_OFF_T, struct incore_inode *), - struct inode *ino, struct ioctx *ioctx) { @@ -1504,7 +1499,7 @@ doio(ssize_t (*f)(void *, size_t, _SYSIO _sysio_doio(ioctx->ioctx_xtv, ioctx->ioctx_xtvlen, ioctx->ioctx_iov, ioctx->ioctx_iovlen, (ssize_t (*)(void *, size_t, _SYSIO_OFF_T, void *))f, - I2IC(ino)); + I2IC(ioctx->ioctx_pno->p_base->pb_ino)); if (ioctx->ioctx_cc < 0) { ioctx->ioctx_errno = -ioctx->ioctx_cc; ioctx->ioctx_cc = -1; @@ -1534,11 +1529,11 @@ incore_read(void *buf, size_t nbytes, } static int -_sysio_incore_filop_read(struct inode *ino, struct ioctx *ioctx) +_sysio_incore_filop_read(struct ioctx *ioctx) { - return doio(incore_read, ino, ioctx); + return doio(incore_read, ioctx); } static ssize_t @@ -1573,18 +1568,17 @@ incore_write(const void *buf, size_t nby } static int -_sysio_incore_filop_write(struct inode *ino, struct ioctx *ioctx) +_sysio_incore_filop_write(struct ioctx *ioctx) { return doio((ssize_t (*)(void *, size_t, _SYSIO_OFF_T, struct incore_inode *))incore_write, - ino, ioctx); } static _SYSIO_OFF_T -_sysio_incore_filop_pos(struct inode *ino __IS_UNUSED, _SYSIO_OFF_T off) +_sysio_incore_filop_pos(struct pnode *pno __IS_UNUSED, _SYSIO_OFF_T off) { return off; @@ -1601,7 +1595,7 @@ _sysio_incore_filop_iodone(struct ioctx } static int -_sysio_incore_filop_fcntl(struct inode *ino __IS_UNUSED, +_sysio_incore_filop_fcntl(struct pnode *pno __IS_UNUSED, int cmd __IS_UNUSED, va_list ap __IS_UNUSED, int *rtn) @@ -1615,7 +1609,7 @@ _sysio_incore_filop_fcntl(struct inode * } static int -_sysio_incore_inop_sync(struct inode *ino __IS_UNUSED) +_sysio_incore_inop_sync(struct pnode *pno __IS_UNUSED) { /* @@ -1625,7 +1619,7 @@ _sysio_incore_inop_sync(struct inode *in } static int -_sysio_incore_filop_ioctl(struct inode *ino __IS_UNUSED, +_sysio_incore_filop_ioctl(struct pnode *pno __IS_UNUSED, unsigned long int request __IS_UNUSED, va_list ap __IS_UNUSED) { @@ -1642,6 +1636,8 @@ _sysio_incore_dirop_mknod(struct pnode * mode_t m; struct intnl_stat stat; ino_t inum; + int err; + struct inode *ino; assert(!pno->p_base->pb_ino); @@ -1677,13 +1673,16 @@ _sysio_incore_dirop_mknod(struct pnode * stat.st_ctime = stat.st_mtime = stat.st_atime = 0; stat.st_ino = inum; - return incore_create(pno, &stat); + err = incore_create(pno, &stat, &ino); + if (err) + return err; + I_PUT(ino); + return 0; } #ifdef _HAVE_STATVFS static int _sysio_incore_inop_statvfs(struct pnode *pno, - struct inode *ino __IS_UNUSED, struct intnl_statvfs *buf) { struct filesys *fs; |
From: Lee W. <lw...@us...> - 2008-12-06 23:29:01
|
Update of /cvsroot/libsysio/libsysio/drivers/incore In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv8263 Modified Files: fs_incore.c Log Message: Ported to the new pnode-only infrastructure changes. Index: fs_incore.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -w -b -B -p -r1.35 -r1.36 --- fs_incore.c 24 Sep 2007 19:00:02 -0000 1.35 +++ fs_incore.c 6 Dec 2008 23:28:55 -0000 1.36 @@ -96,9 +96,16 @@ struct incore_inode { #define I2IC(ino) ((struct incore_inode *)(ino)->i_private) struct incore_filesys { + ino_t icfs_nxtnum; /* next inum */ LIST_HEAD(, incore_inode) icfs_icinodes; /* all i-nodes list */ }; +#define ICFS_INIT(_icfs) \ + do { \ + (_icfs)->icfs_nxtnum = 1; \ + LIST_INIT(&(_icfs)->icfs_icinodes); \ + } while (0) + /* * Given pointer to filesys, return pointer to incore-filesys. */ @@ -125,38 +132,35 @@ static int _sysio_incore_dirop_lookup(st struct intent *intnt, const char *path); static int _sysio_incore_inop_getattr(struct pnode *pno, - struct inode *ino, struct intnl_stat *stbuf); static int _sysio_incore_inop_setattr(struct pnode *pno, - struct inode *ino, unsigned mask, struct intnl_stat *stbuf); -static ssize_t _sysio_incore_dirop_filldirentries(struct inode *ino, +static ssize_t _sysio_incore_dirop_filldirentries(struct pnode *pno, _SYSIO_OFF_T *posp, char *buf, size_t nbytes); static int _sysio_incore_dirop_mkdir(struct pnode *pno, mode_t mode); static int _sysio_incore_dirop_rmdir(struct pnode *pno); static int _sysio_incore_inop_open(struct pnode *pno, int flags, mode_t mode); -static int _sysio_incore_inop_close(struct inode *ino); +static int _sysio_incore_inop_close(struct pnode *pno); static int _sysio_incore_dirop_link(struct pnode *old, struct pnode *new); 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_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, +static int _sysio_incore_filop_read(struct ioctx *ioctx); +static int _sysio_incore_filop_write(struct ioctx *ioctx); +static _SYSIO_OFF_T _sysio_incore_filop_pos(struct pnode *pno, _SYSIO_OFF_T off); static int _sysio_incore_filop_iodone(struct ioctx *ioctx); -static int _sysio_incore_filop_fcntl(struct inode *ino, +static int _sysio_incore_filop_fcntl(struct pnode *pno, int cmd, va_list ap, int *rtn); -static int _sysio_incore_inop_sync(struct inode *ino); -static int _sysio_incore_filop_ioctl(struct inode *ino, +static int _sysio_incore_inop_sync(struct pnode *pno); +static int _sysio_incore_filop_ioctl(struct pnode *pno, unsigned long int request, va_list ap); static int _sysio_incore_dirop_mknod(struct pnode *pno, mode_t mode, dev_t dev); #ifdef _HAVE_STATVFS static int _sysio_incore_inop_statvfs(struct pnode *pno, - struct inode *ino, struct intnl_statvfs *buf); #endif static void _sysio_incore_inop_gone(struct inode *ino); @@ -166,20 +170,18 @@ static void _sysio_incore_inop_gone(stru #define _sysio_incore_dirop_readlink \ (int (*)(struct pnode *, char *, size_t))_sysio_do_enosys #define _sysio_incore_dirop_read \ - (int (*)(struct inode *, \ - struct ioctx *))_sysio_do_eisdir + (int (*)(struct ioctx *))_sysio_do_eisdir #define _sysio_incore_dirop_write \ - (int (*)(struct inode *, \ - struct ioctx *))_sysio_do_eisdir + (int (*)(struct ioctx *))_sysio_do_eisdir #define _sysio_incore_dirop_pos \ - (_SYSIO_OFF_T (*)(struct inode *, \ + (_SYSIO_OFF_T (*)(struct pnode *, \ _SYSIO_OFF_T))_sysio_do_eisdir #define _sysio_incore_dirop_iodone \ (int (*)(struct ioctx *))_sysio_do_illop #define _sysio_incore_dirop_fcntl \ - (int (*)(struct inode *, int, va_list, int *))_sysio_do_eisdir + (int (*)(struct pnode *, int, va_list, int *))_sysio_do_eisdir #define _sysio_incore_dirop_ioctl \ - (int (*)(struct inode *, \ + (int (*)(struct pnode *, \ unsigned long int, \ va_list))_sysio_do_eisdir @@ -217,7 +219,7 @@ static int _sysio_incore_filop_lookup(st struct intent *intnt, const char *path); #define _sysio_incore_filop_filldirentries \ - (ssize_t (*)(struct inode *, \ + (ssize_t (*)(struct pnode *, \ _SYSIO_OFF_T *, \ char *, \ size_t))_sysio_do_illop @@ -398,12 +400,11 @@ _sysio_incore_init() } static ino_t -incore_inum_alloc() +incore_inum_alloc(struct incore_filesys *icfs) { - static ino_t nxtnum = 1; - assert(nxtnum); - return nxtnum++; + assert(icfs->icfs_nxtnum); + return icfs->icfs_nxtnum++; } static struct incore_inode * @@ -596,15 +597,14 @@ _sysio_incore_fsswop_mount(const char *s err = -ENOMEM; goto error; } - (void )memset(icfs, 0, sizeof(struct incore_filesys)); - LIST_INIT(&icfs->icfs_icinodes); + ICFS_INIT(icfs); /* * Create root i-node. */ (void )memset(&stat, 0, sizeof(stat)); stat.st_dev = dev; - inum = incore_inum_alloc(); + inum = incore_inum_alloc(icfs); #ifdef HAVE__ST_INO stat.__st_ino = inum; #endif @@ -654,6 +654,8 @@ _sysio_incore_fsswop_mount(const char *s */ mnt = NULL; err = _sysio_mounti(fs, rooti, flags, tocover, &mnt); + I_PUT(rooti); + rooti = NULL; if (err) goto error; @@ -891,28 +893,25 @@ _sysio_incore_filop_lookup(struct pnode static int _sysio_incore_inop_getattr(struct pnode *pno, - struct inode *ino, struct intnl_stat *stbuf) { struct incore_inode *icino; - if (!ino) - ino = pno->p_base->pb_ino; - icino = I2IC(ino); + assert(pno->p_base->pb_ino); + icino = I2IC(pno->p_base->pb_ino); *stbuf = icino->ici_st; return 0; } static int _sysio_incore_inop_setattr(struct pnode *pno, - struct inode *ino, unsigned mask, struct intnl_stat *stbuf) { + struct inode *ino; struct incore_inode *icino; int err; - if (!ino) ino = pno->p_base->pb_ino; if (!ino) return -EBADF; @@ -988,16 +987,18 @@ incore_directory_enumerate(struct intnl_ } static ssize_t -_sysio_incore_dirop_filldirentries(struct inode *ino, +_sysio_incore_dirop_filldirentries(struct pnode *pno, _SYSIO_OFF_T *posp, char *buf, size_t nbytes) { - struct incore_inode *icino = I2IC(ino); + struct incore_inode *icino; off_t off; struct intnl_dirent *de; struct copy_info copy_info; + assert(pno->p_base->pb_ino); + icino = I2IC(pno->p_base->pb_ino); if (*posp >= icino->ici_st.st_size) return 0; @@ -1172,7 +1173,7 @@ _sysio_incore_dirop_mkdir(struct pnode * (void )memset(&stat, 0, sizeof(stat)); stat.st_dev = pno->p_parent->p_base->pb_ino->i_fs->fs_dev; - inum = incore_inum_alloc(); + inum = incore_inum_alloc(FS2ICFS(ino->i_fs)); #ifdef HAVE__ST_INO stat.__st_ino = inum; #endif @@ -1222,7 +1223,7 @@ _sysio_incore_dirop_mkdir(struct pnode * return err; } - pno->p_base->pb_ino = ino; + I_PUT(ino); return 0; } @@ -1295,7 +1296,6 @@ _sysio_incore_dirop_rmdir(struct pnode * if (icino->ici_st.st_nlink > 2) return -ENOTEMPTY; - pno->p_base->pb_ino = NULL; err = incore_unlink_entry(I2IC(pno->p_parent->p_base->pb_ino), &pno->p_base->pb_key.pbk_name); @@ -1347,7 +1347,7 @@ incore_create(struct pnode *pno, struct return err; } - pno->p_base->pb_ino = ino; + I_PUT(ino); return 0; } @@ -1368,7 +1368,7 @@ _sysio_incore_inop_open(struct pnode *pn */ (void )memset(&stat, 0, sizeof(stat)); stat.st_dev = pno->p_parent->p_base->pb_ino->i_fs->fs_dev; - inum = incore_inum_alloc(); + inum = incore_inum_alloc(FS2ICFS(pno->p_parent->p_base->pb_ino->i_fs)); #ifdef HAVE__ST_INO stat.__st_ino = inum; #endif @@ -1387,7 +1387,7 @@ _sysio_incore_inop_open(struct pnode *pn } static int -_sysio_incore_inop_close(struct inode *ino __IS_UNUSED) +_sysio_incore_inop_close(struct pnode *pno __IS_UNUSED) { return 0; @@ -1496,7 +1496,6 @@ _sysio_incore_dirop_unlink(struct pnode static int doio(ssize_t (*f)(void *, size_t, _SYSIO_OFF_T, struct incore_inode *), - struct inode *ino, struct ioctx *ioctx) { @@ -1504,7 +1503,7 @@ doio(ssize_t (*f)(void *, size_t, _SYSIO _sysio_doio(ioctx->ioctx_xtv, ioctx->ioctx_xtvlen, ioctx->ioctx_iov, ioctx->ioctx_iovlen, (ssize_t (*)(void *, size_t, _SYSIO_OFF_T, void *))f, - I2IC(ino)); + I2IC(ioctx->ioctx_pno->p_base->pb_ino)); if (ioctx->ioctx_cc < 0) { ioctx->ioctx_errno = -ioctx->ioctx_cc; ioctx->ioctx_cc = -1; @@ -1534,11 +1533,11 @@ incore_read(void *buf, size_t nbytes, } static int -_sysio_incore_filop_read(struct inode *ino, struct ioctx *ioctx) +_sysio_incore_filop_read(struct ioctx *ioctx) { - return doio(incore_read, ino, ioctx); + return doio(incore_read, ioctx); } static ssize_t @@ -1573,18 +1572,17 @@ incore_write(const void *buf, size_t nby } static int -_sysio_incore_filop_write(struct inode *ino, struct ioctx *ioctx) +_sysio_incore_filop_write(struct ioctx *ioctx) { return doio((ssize_t (*)(void *, size_t, _SYSIO_OFF_T, struct incore_inode *))incore_write, - ino, ioctx); } static _SYSIO_OFF_T -_sysio_incore_filop_pos(struct inode *ino __IS_UNUSED, _SYSIO_OFF_T off) +_sysio_incore_filop_pos(struct pnode *pno __IS_UNUSED, _SYSIO_OFF_T off) { return off; @@ -1601,7 +1599,7 @@ _sysio_incore_filop_iodone(struct ioctx } static int -_sysio_incore_filop_fcntl(struct inode *ino __IS_UNUSED, +_sysio_incore_filop_fcntl(struct pnode *pno __IS_UNUSED, int cmd __IS_UNUSED, va_list ap __IS_UNUSED, int *rtn) @@ -1615,7 +1613,7 @@ _sysio_incore_filop_fcntl(struct inode * } static int -_sysio_incore_inop_sync(struct inode *ino __IS_UNUSED) +_sysio_incore_inop_sync(struct pnode *pno __IS_UNUSED) { /* @@ -1625,7 +1623,7 @@ _sysio_incore_inop_sync(struct inode *in } static int -_sysio_incore_filop_ioctl(struct inode *ino __IS_UNUSED, +_sysio_incore_filop_ioctl(struct pnode *pno __IS_UNUSED, unsigned long int request __IS_UNUSED, va_list ap __IS_UNUSED) { @@ -1662,7 +1660,7 @@ _sysio_incore_dirop_mknod(struct pnode * */ (void )memset(&stat, 0, sizeof(stat)); stat.st_dev = pno->p_parent->p_base->pb_ino->i_fs->fs_dev; - inum = incore_inum_alloc(); + inum = incore_inum_alloc(FS2ICFS(pno->p_parent->p_base->pb_ino->i_fs)); #ifdef HAVE__ST_INO stat.__st_ino = inum; #endif @@ -1683,7 +1681,6 @@ _sysio_incore_dirop_mknod(struct pnode * #ifdef _HAVE_STATVFS static int _sysio_incore_inop_statvfs(struct pnode *pno, - struct inode *ino __IS_UNUSED, struct intnl_statvfs *buf) { struct filesys *fs; |
From: Lee W. <lw...@us...> - 2009-04-10 21:34:08
|
Update of /cvsroot/libsysio/libsysio/drivers/incore In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv20883/drivers/incore Modified Files: fs_incore.c Log Message: Reflect new filldirentries2 operation. Does not yet make use of it, relying on compatibility with old filldirentries. Index: fs_incore.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v retrieving revision 1.36 retrieving revision 1.37 diff -u -w -b -B -p -r1.36 -r1.37 --- fs_incore.c 6 Dec 2008 23:28:55 -0000 1.36 +++ fs_incore.c 10 Apr 2009 21:33:55 -0000 1.37 @@ -190,6 +190,7 @@ static struct inode_ops _sysio_incore_di _sysio_incore_inop_getattr, _sysio_incore_inop_setattr, _sysio_incore_dirop_filldirentries, + NULL, _sysio_incore_dirop_mkdir, _sysio_incore_dirop_rmdir, _sysio_incore_dirop_symlink, @@ -245,6 +246,7 @@ static struct inode_ops _sysio_incore_fi _sysio_incore_inop_getattr, _sysio_incore_inop_setattr, _sysio_incore_filop_filldirentries, + NULL, _sysio_incore_filop_mkdir, _sysio_incore_filop_rmdir, _sysio_incore_filop_symlink, @@ -274,6 +276,7 @@ static struct inode_ops _sysio_incore_de _sysio_incore_inop_getattr, _sysio_incore_inop_setattr, _sysio_incore_filop_filldirentries, + NULL, _sysio_incore_filop_mkdir, _sysio_incore_filop_rmdir, _sysio_incore_filop_symlink, |
From: Lee W. <lw...@us...> - 2009-05-05 17:01:02
|
Update of /cvsroot/libsysio/libsysio/drivers/incore In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv30476/drivers/incore Modified Files: fs_incore.c Log Message: Modified to reflect the new, required, perms_check operation. The generic dev returns -EBADF, of course. The incore and native drivers just use the default core policy routine. Index: fs_incore.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -w -b -B -p -r1.37 -r1.38 --- fs_incore.c 10 Apr 2009 21:33:55 -0000 1.37 +++ fs_incore.c 5 May 2009 16:35:29 -0000 1.38 @@ -212,6 +212,7 @@ static struct inode_ops _sysio_incore_di #ifdef _HAVE_STATVFS _sysio_incore_inop_statvfs, #endif + _sysio_p_generic_perms_check, _sysio_incore_inop_gone }; @@ -268,6 +269,7 @@ static struct inode_ops _sysio_incore_fi #ifdef _HAVE_STATVFS _sysio_incore_inop_statvfs, #endif + _sysio_p_generic_perms_check, _sysio_incore_inop_gone }; @@ -298,6 +300,7 @@ static struct inode_ops _sysio_incore_de #ifdef _HAVE_STATVFS _sysio_incore_inop_statvfs, #endif + _sysio_p_generic_perms_check, _sysio_incore_inop_gone }; |
From: Lee W. <lw...@us...> - 2009-12-07 22:00:34
|
Update of /cvsroot/libsysio/libsysio/drivers/incore In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv2260/drivers/incore Modified Files: fs_incore.c Log Message: Added ifsync and ifdatasync. These are asynchronous versions of the standard calls. In fact, the core has been reworked so that the async versions are the core implementation. For backward compatibility, if your driver has old versions you may set the new inop_isync ad inop_idatasync fields to NULL and retain the old interface and, synchronous, semantics. The existing fields were renamed to inop_old_sync and inop_old_datasync and will be deprecated in the future. One important, related, change is that the ioctx record has a new field, called ioctx_args, which is a void * type. It's only used to pass the real function to call aby the code that is faking the async API but using the old fsync and fdatasync. Index: fs_incore.c =================================================================== RCS file: /cvsroot/libsysio/libsysio/drivers/incore/fs_incore.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -w -b -B -p -r1.38 -r1.39 --- fs_incore.c 5 May 2009 16:35:29 -0000 1.38 +++ fs_incore.c 7 Dec 2009 22:00:23 -0000 1.39 @@ -205,7 +205,9 @@ static struct inode_ops _sysio_incore_di _sysio_incore_dirop_pos, _sysio_incore_dirop_iodone, _sysio_incore_dirop_fcntl, + NULL, _sysio_incore_inop_sync, + NULL, _sysio_incore_inop_sync, _sysio_incore_dirop_ioctl, _sysio_incore_dirop_mknod, @@ -262,7 +264,9 @@ static struct inode_ops _sysio_incore_fi _sysio_incore_filop_pos, _sysio_incore_filop_iodone, _sysio_incore_filop_fcntl, + NULL, _sysio_incore_inop_sync, + NULL, _sysio_incore_inop_sync, _sysio_incore_filop_ioctl, _sysio_incore_filop_mknod, @@ -293,7 +297,9 @@ static struct inode_ops _sysio_incore_de _sysio_nodev_inop_pos, _sysio_nodev_inop_iodone, _sysio_incore_filop_fcntl, + NULL, _sysio_incore_inop_sync, + NULL, _sysio_nodev_inop_sync, _sysio_nodev_inop_ioctl, _sysio_incore_filop_mknod, |