CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: pooka Date: Fri Nov 13 13:36:54 UTC 2015 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vnops.c Log Message: Fix bug in readdir loop condition. Reading all dirents using a small buffer and multiple calls now works. Bug found by "Shamar" on #rumpkernel To generate a diff of this commit: cvs rdiff -u -r1.58 -r1.59 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.58 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.59 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.58 Sat Apr 4 13:28:36 2015 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Fri Nov 13 13:36:54 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.58 2015/04/04 13:28:36 riastradh Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.59 2015/11/13 13:36:54 pooka Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: sysvbfs_vnops.c,v 1.58 2015/04/04 13:28:36 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sysvbfs_vnops.c,v 1.59 2015/11/13 13:36:54 pooka Exp $"); #include #include @@ -642,15 +642,18 @@ sysvbfs_readdir(void *v) if ((i + n) > bfs->n_dirent) n = bfs->n_dirent - i; - for (file = >dirent[i]; i < n; file++) { - if (file->inode == 0) - continue; + DPRINTF("%s 1: %d %d %d\n", __func__, i, n, bfs->n_dirent); + for (file = >dirent[i]; n > 0; file++, i++) { if (i == bfs->max_dirent) { DPRINTF("%s: file system inconsistent.\n", __func__); break; } - i++; + if (file->inode == 0) + continue; + + /* ok, we have a live one here */ + n--; memset(dp, 0, sizeof(struct dirent)); dp->d_fileno = file->inode; dp->d_type = file->inode == BFS_ROOT_INODE ? DT_DIR : DT_REG; @@ -663,7 +666,7 @@ sysvbfs_readdir(void *v) return error; } } - DPRINTF("%s: %d %d %d\n", __func__, i, n, bfs->n_dirent); + DPRINTF("%s 2: %d %d %d\n", __func__, i, n, bfs->n_dirent); *ap->a_eofflag = (i == bfs->n_dirent); free(dp, M_BFS);
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: riastradh Date: Sat Apr 4 13:28:36 UTC 2015 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vnops.c Log Message: Make sure err is initialized. To generate a diff of this commit: cvs rdiff -u -r1.57 -r1.58 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.57 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.58 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.57 Sat Apr 4 12:34:45 2015 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Sat Apr 4 13:28:36 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.57 2015/04/04 12:34:45 riastradh Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.58 2015/04/04 13:28:36 riastradh Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.57 2015/04/04 12:34:45 riastradh Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.58 2015/04/04 13:28:36 riastradh Exp $); #include sys/param.h #include sys/kernel.h @@ -439,6 +439,7 @@ sysvbfs_read(void *arg) return EINVAL; } + err = 0; while (uio-uio_resid 0) { if ((sz = MIN(filesz - uio-uio_offset, uio-uio_resid)) == 0) break;
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: hannken Date: Fri Jan 2 16:51:02 UTC 2015 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vfsops.c Log Message: Add forgotten memset() to clear sysvbfs nodes before setting them up. To generate a diff of this commit: cvs rdiff -u -r1.45 -r1.46 src/sys/fs/sysvbfs/sysvbfs_vfsops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vfsops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.45 src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.46 --- src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.45 Fri Dec 26 15:23:21 2014 +++ src/sys/fs/sysvbfs/sysvbfs_vfsops.c Fri Jan 2 16:51:02 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vfsops.c,v 1.45 2014/12/26 15:23:21 hannken Exp $ */ +/* $NetBSD: sysvbfs_vfsops.c,v 1.46 2015/01/02 16:51:02 hannken Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.45 2014/12/26 15:23:21 hannken Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.46 2015/01/02 16:51:02 hannken Exp $); #include sys/types.h #include sys/param.h @@ -336,6 +336,7 @@ sysvbfs_loadvnode(struct mount *mp, stru } bnode = pool_get(sysvbfs_node_pool, PR_WAITOK); + memset(bnode, 0, sizeof(*bnode)); vp-v_tag = VT_SYSVBFS; vp-v_op = sysvbfs_vnodeop_p;
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: hannken Date: Fri Dec 26 15:22:15 UTC 2014 Modified Files: src/sys/fs/sysvbfs: bfs.c sysvbfs_vnops.c Log Message: Sysvbfs_rename: Call bfs_file_delete(bfs, to_name, true) before calling bfs_file_rename() and remove the bfs_file_delete() from bfs_file_rename(). After calling bfs_file_rename() it was too late to set tnode-removed as the inode already disappeared. To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/sys/fs/sysvbfs/bfs.c cvs rdiff -u -r1.54 -r1.55 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/bfs.c diff -u src/sys/fs/sysvbfs/bfs.c:1.17 src/sys/fs/sysvbfs/bfs.c:1.18 --- src/sys/fs/sysvbfs/bfs.c:1.17 Thu Jan 9 13:23:57 2014 +++ src/sys/fs/sysvbfs/bfs.c Fri Dec 26 15:22:15 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: bfs.c,v 1.17 2014/01/09 13:23:57 hannken Exp $ */ +/* $NetBSD: bfs.c,v 1.18 2014/12/26 15:22:15 hannken Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bfs.c,v 1.17 2014/01/09 13:23:57 hannken Exp $); +__KERNEL_RCSID(0, $NetBSD: bfs.c,v 1.18 2014/12/26 15:22:15 hannken Exp $); #define BFS_DEBUG #include sys/param.h @@ -344,7 +344,6 @@ bfs_file_rename(struct bfs *bfs, const c goto out; } - bfs_file_delete(bfs, to_name, false); strncpy(dirent-name, to_name, BFS_FILENAME_MAXLEN); bfs_writeback_dirent(bfs, dirent, false); Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.54 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.55 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.54 Fri Aug 8 19:14:45 2014 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Fri Dec 26 15:22:15 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.54 2014/08/08 19:14:45 gson Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.55 2014/12/26 15:22:15 hannken Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.54 2014/08/08 19:14:45 gson Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.55 2014/12/26 15:22:15 hannken Exp $); #include sys/param.h #include sys/kernel.h @@ -581,21 +581,23 @@ sysvbfs_rename(void *arg) goto out; } + /* + * Remove the target if it exists. + */ + if (tvp != NULL) { + error = bfs_file_delete(bfs, to_name, true); + if (error) + goto out; + } error = bfs_file_rename(bfs, from_name, to_name); out: - if (tvp) { - if (error == 0) { - struct sysvbfs_node *tbnode = tvp-v_data; - tbnode-removed = 1; - } - vput(tvp); - } - /* tdvp == tvp probably can't happen with this fs, but safety first */ if (tdvp == tvp) vrele(tdvp); else vput(tdvp); + if (tvp) + vput(tvp); vrele(fdvp); vrele(fvp);
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: hannken Date: Fri Dec 26 15:23:21 UTC 2014 Modified Files: src/sys/fs/sysvbfs: sysvbfs.c sysvbfs.h sysvbfs_vfsops.c sysvbfs_vnops.c Log Message: Change sysvbfs to vcache. To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/fs/sysvbfs/sysvbfs.c cvs rdiff -u -r1.9 -r1.10 src/sys/fs/sysvbfs/sysvbfs.h cvs rdiff -u -r1.44 -r1.45 src/sys/fs/sysvbfs/sysvbfs_vfsops.c cvs rdiff -u -r1.55 -r1.56 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs.c diff -u src/sys/fs/sysvbfs/sysvbfs.c:1.14 src/sys/fs/sysvbfs/sysvbfs.c:1.15 --- src/sys/fs/sysvbfs/sysvbfs.c:1.14 Fri Jul 25 08:20:52 2014 +++ src/sys/fs/sysvbfs/sysvbfs.c Fri Dec 26 15:23:21 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs.c,v 1.14 2014/07/25 08:20:52 dholland Exp $ */ +/* $NetBSD: sysvbfs.c,v 1.15 2014/12/26 15:23:21 hannken Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs.c,v 1.14 2014/07/25 08:20:52 dholland Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs.c,v 1.15 2014/12/26 15:23:21 hannken Exp $); #include sys/resource.h #include sys/param.h @@ -121,6 +121,7 @@ struct vfsops sysvbfs_vfsops = { .vfs_statvfs = sysvbfs_statvfs, .vfs_sync = sysvbfs_sync, .vfs_vget = sysvbfs_vget, + .vfs_loadvnode = sysvbfs_loadvnode, .vfs_fhtovp = sysvbfs_fhtovp, .vfs_vptofh = sysvbfs_vptofh, .vfs_init = sysvbfs_init, Index: src/sys/fs/sysvbfs/sysvbfs.h diff -u src/sys/fs/sysvbfs/sysvbfs.h:1.9 src/sys/fs/sysvbfs/sysvbfs.h:1.10 --- src/sys/fs/sysvbfs/sysvbfs.h:1.9 Thu May 27 23:40:12 2010 +++ src/sys/fs/sysvbfs/sysvbfs.h Fri Dec 26 15:23:21 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs.h,v 1.9 2010/05/27 23:40:12 pooka Exp $ */ +/* $NetBSD: sysvbfs.h,v 1.10 2014/12/26 15:23:21 hannken Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -53,15 +53,12 @@ struct sysvbfs_node { int update_atime; int update_mtime; int removed; - - LIST_ENTRY(sysvbfs_node) link; }; struct sysvbfs_mount { struct mount *mountp; struct vnode *devvp; /* block device mounted vnode */ struct bfs *bfs; - LIST_HEAD(, sysvbfs_node) bnode_head; }; /* v-node ops. */ Index: src/sys/fs/sysvbfs/sysvbfs_vfsops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.44 src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.45 --- src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.44 Sun Dec 7 23:48:04 2014 +++ src/sys/fs/sysvbfs/sysvbfs_vfsops.c Fri Dec 26 15:23:21 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vfsops.c,v 1.44 2014/12/07 23:48:04 justin Exp $ */ +/* $NetBSD: sysvbfs_vfsops.c,v 1.45 2014/12/26 15:23:21 hannken Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.44 2014/12/07 23:48:04 justin Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.45 2014/12/26 15:23:21 hannken Exp $); #include sys/types.h #include sys/param.h @@ -189,7 +189,6 @@ sysvbfs_mountfs(struct vnode *devvp, str VOP_CLOSE(devvp, oflags, NOCRED); goto out; } - LIST_INIT(bmp-bnode_head); mp-mnt_data = bmp; mp-mnt_stat.f_fsidx.__fsid_val[0] = (long)devvp-v_rdev; @@ -289,89 +288,58 @@ sysvbfs_statvfs(struct mount *mp, struct int sysvbfs_sync(struct mount *mp, int waitfor, kauth_cred_t cred) { - struct sysvbfs_mount *bmp = mp-mnt_data; - struct sysvbfs_node *bnode; - struct vnode *v; + struct vnode_iterator *marker; + struct vnode *vp; int err, error; DPRINTF(%s:\n, __func__); error = 0; - mutex_enter(mntvnode_lock); - for (bnode = LIST_FIRST(bmp-bnode_head); bnode != NULL; - bnode = LIST_NEXT(bnode, link)) { - v = bnode-vnode; - mutex_enter(v-v_interlock); - mutex_exit(mntvnode_lock); - err = vget(v, LK_EXCLUSIVE | LK_NOWAIT); - if (err == 0) { - err = VOP_FSYNC(v, cred, FSYNC_WAIT, 0, 0); - vput(v); + vfs_vnode_iterator_init(mp, marker); + while ((vp = vfs_vnode_iterator_next(marker, NULL, NULL)) != NULL) { + err = vn_lock(vp, LK_EXCLUSIVE); + if (err) { + vrele(vp); + continue; } + err = VOP_FSYNC(vp, cred, FSYNC_WAIT, 0, 0); + vput(vp); if (err != 0) error = err; - mutex_enter(mntvnode_lock); } - mutex_exit(mntvnode_lock); + vfs_vnode_iterator_destroy(marker); return error; } int -sysvbfs_vget(struct mount *mp, ino_t ino, struct vnode **vpp) +sysvbfs_loadvnode(struct mount *mp, struct vnode *vp, +const void *key, size_t key_len, const void **new_key) { - struct sysvbfs_mount *bmp = mp-mnt_data; - struct bfs *bfs = bmp-bfs; - struct vnode *vp; + struct sysvbfs_mount *bmp; + struct bfs *bfs; struct sysvbfs_node *bnode; struct bfs_inode *inode; - int error; + uint16_t ino; + + KASSERT(key_len == sizeof(ino)); + memcpy(ino, key, key_len); + + DPRINTF(%s: i-node=%u\n, __func__, ino); + + bmp =
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: justin Date: Sun Dec 7 23:48:04 UTC 2014 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vfsops.c Log Message: Simplify control flow Removes a variable and compiler warnings in some cases. To generate a diff of this commit: cvs rdiff -u -r1.43 -r1.44 src/sys/fs/sysvbfs/sysvbfs_vfsops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vfsops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.43 src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.44 --- src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.43 Wed Apr 16 18:55:19 2014 +++ src/sys/fs/sysvbfs/sysvbfs_vfsops.c Sun Dec 7 23:48:04 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vfsops.c,v 1.43 2014/04/16 18:55:19 maxv Exp $ */ +/* $NetBSD: sysvbfs_vfsops.c,v 1.44 2014/12/07 23:48:04 justin Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.43 2014/04/16 18:55:19 maxv Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.44 2014/12/07 23:48:04 justin Exp $); #include sys/types.h #include sys/param.h @@ -168,7 +168,6 @@ sysvbfs_mountfs(struct vnode *devvp, str kauth_cred_t cred = l-l_cred; struct sysvbfs_mount *bmp; int error, oflags; - bool devopen = false; vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY); error = vinvalbuf(devvp, V_SAVE, cred, l, 0, 0); @@ -181,13 +180,13 @@ sysvbfs_mountfs(struct vnode *devvp, str oflags |= FWRITE; if ((error = VOP_OPEN(devvp, oflags, NOCRED)) != 0) goto out; - devopen = true; bmp = malloc(sizeof(*bmp), M_SYSVBFS_VFS, M_WAITOK | M_ZERO); bmp-devvp = devvp; bmp-mountp = mp; if ((error = sysvbfs_bfs_init(bmp-bfs, devvp)) != 0) { free(bmp, M_SYSVBFS_VFS); + VOP_CLOSE(devvp, oflags, NOCRED); goto out; } LIST_INIT(bmp-bnode_head); @@ -202,8 +201,6 @@ sysvbfs_mountfs(struct vnode *devvp, str mp-mnt_fs_bshift = BFS_BSHIFT; out: - if (devopen error) - VOP_CLOSE(devvp, oflags, NOCRED); VOP_UNLOCK(devvp); return error; }
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: gson Date: Fri Aug 8 19:14:45 UTC 2014 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vnops.c Log Message: Whitespace fix To generate a diff of this commit: cvs rdiff -u -r1.53 -r1.54 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.53 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.54 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.53 Fri Feb 7 15:29:21 2014 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Fri Aug 8 19:14:45 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.53 2014/02/07 15:29:21 hannken Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.54 2014/08/08 19:14:45 gson Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.53 2014/02/07 15:29:21 hannken Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.54 2014/08/08 19:14:45 gson Exp $); #include sys/param.h #include sys/kernel.h @@ -450,7 +450,7 @@ sysvbfs_read(void *arg) DPRINTF(%s: read %ldbyte\n, __func__, sz); } - return sysvbfs_update(v, NULL, NULL, UPDATE_WAIT); + return sysvbfs_update(v, NULL, NULL, UPDATE_WAIT); } int
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: mlelstv Date: Wed Dec 25 11:15:49 UTC 2013 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vfsops.c Log Message: At least fetch mount data pointer before using it. Coverity CID 274767 To generate a diff of this commit: cvs rdiff -u -r1.41 -r1.42 src/sys/fs/sysvbfs/sysvbfs_vfsops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vfsops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.41 src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.42 --- src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.41 Thu Jun 14 01:08:22 2012 +++ src/sys/fs/sysvbfs/sysvbfs_vfsops.c Wed Dec 25 11:15:49 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vfsops.c,v 1.41 2012/06/14 01:08:22 agc Exp $ */ +/* $NetBSD: sysvbfs_vfsops.c,v 1.42 2013/12/25 11:15:49 mlelstv Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.41 2012/06/14 01:08:22 agc Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.42 2013/12/25 11:15:49 mlelstv Exp $); #include sys/types.h #include sys/param.h @@ -81,7 +81,7 @@ sysvbfs_mount(struct mount *mp, const ch return EINVAL; if (mp-mnt_flag MNT_GETARGS) { - if ((bmp = (void *)mp-mnt_data) == NULL) + if ((bmp = (struct sysvbfs_mount *)mp-mnt_data) == NULL) return EIO; args-fspec = NULL; *data_len = sizeof *args; @@ -116,6 +116,7 @@ sysvbfs_mount(struct mount *mp, const ch * Be sure we're still naming the same device * used for our initial mount */ + bmp = (struct sysvbfs_mount *)mp-mnt_data; if (devvp != bmp-devvp) error = EINVAL; }
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: hannken Date: Tue Dec 24 09:56:18 UTC 2013 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vnops.c Log Message: It is not the task of sysvbfs_open() to check for unlinked nodes. To generate a diff of this commit: cvs rdiff -u -r1.48 -r1.49 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.48 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.49 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.48 Wed May 15 16:44:03 2013 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Tue Dec 24 09:56:18 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.48 2013/05/15 16:44:03 pooka Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.49 2013/12/24 09:56:18 hannken Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.48 2013/05/15 16:44:03 pooka Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.49 2013/12/24 09:56:18 hannken Exp $); #include sys/param.h #include sys/kernel.h @@ -185,14 +185,10 @@ sysvbfs_open(void *arg) struct vnode *v = a-a_vp; struct sysvbfs_node *bnode = v-v_data; struct bfs_inode *inode = bnode-inode; - struct bfs *bfs = bnode-bmp-bfs; - struct bfs_dirent *dirent; DPRINTF(%s:\n, __func__); KDASSERT(v-v_type == VREG || v-v_type == VDIR); - if (!bfs_dirent_lookup_by_inode(bfs, inode-number, dirent)) - return ENOENT; bnode-update_atime = true; if ((a-a_mode FWRITE) !(a-a_mode O_APPEND)) { bnode-size = 0;
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: pooka Date: Wed May 15 16:44:03 UTC 2013 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vnops.c Log Message: Don't change a read-only file system. To generate a diff of this commit: cvs rdiff -u -r1.47 -r1.48 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.47 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.48 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.47 Mon Mar 18 19:35:40 2013 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Wed May 15 16:44:03 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.47 2013/03/18 19:35:40 plunky Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.48 2013/05/15 16:44:03 pooka Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.47 2013/03/18 19:35:40 plunky Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.48 2013/05/15 16:44:03 pooka Exp $); #include sys/param.h #include sys/kernel.h @@ -218,6 +218,10 @@ sysvbfs_close(void *arg) struct bfs_fileattr attr; DPRINTF(%s:\n, __func__); + + if (v-v_mount-mnt_flag MNT_RDONLY) + goto out; + uvm_vnp_setsize(v, bnode-size); memset(attr, 0xff, sizeof attr); /* Set VNOVAL all */ @@ -231,6 +235,7 @@ sysvbfs_close(void *arg) VOP_FSYNC(a-a_vp, a-a_cred, FSYNC_WAIT, 0, 0); + out: return 0; } @@ -877,6 +882,9 @@ sysvbfs_update(struct vnode *vp, const s struct sysvbfs_node *bnode = vp-v_data; struct bfs_fileattr attr; + if (vp-v_mount-mnt_flag MNT_RDONLY) + return 0; + DPRINTF(%s:\n, __func__); memset(attr, 0xff, sizeof attr); /* Set VNOVAL all */ if (bnode-update_atime) {
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: agc Date: Thu Jun 14 01:08:22 UTC 2012 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vfsops.c Log Message: calculate inode capacities using the correct values To generate a diff of this commit: cvs rdiff -u -r1.40 -r1.41 src/sys/fs/sysvbfs/sysvbfs_vfsops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vfsops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.40 src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.41 --- src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.40 Wed Jun 13 22:56:50 2012 +++ src/sys/fs/sysvbfs/sysvbfs_vfsops.c Thu Jun 14 01:08:22 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vfsops.c,v 1.40 2012/06/13 22:56:50 joerg Exp $ */ +/* $NetBSD: sysvbfs_vfsops.c,v 1.41 2012/06/14 01:08:22 agc Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.40 2012/06/13 22:56:50 joerg Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.41 2012/06/14 01:08:22 agc Exp $); #include sys/types.h #include sys/param.h @@ -277,8 +277,8 @@ sysvbfs_statvfs(struct mount *mp, struct f-f_bfree = free_block; f-f_bavail = f-f_bfree; f-f_bresvd = 0; - f-f_files = bfs-n_inode; - f-f_ffree = bfs-max_inode - f-f_files; + f-f_files = bfs-max_inode; + f-f_ffree = bfs-max_inode - bfs-n_inode; f-f_favail = f-f_ffree; f-f_fresvd = 0; copy_statvfs_info(f, mp);
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: agc Date: Mon Jun 11 21:11:41 UTC 2012 Modified Files: src/sys/fs/sysvbfs: bfs.c sysvbfs_vnops.c Log Message: cosmetic change: fix two casts to be of the appropriate type To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/sys/fs/sysvbfs/bfs.c cvs rdiff -u -r1.45 -r1.46 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/bfs.c diff -u src/sys/fs/sysvbfs/bfs.c:1.15 src/sys/fs/sysvbfs/bfs.c:1.16 --- src/sys/fs/sysvbfs/bfs.c:1.15 Tue May 8 14:28:55 2012 +++ src/sys/fs/sysvbfs/bfs.c Mon Jun 11 21:11:40 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: bfs.c,v 1.15 2012/05/08 14:28:55 tsutsui Exp $ */ +/* $NetBSD: bfs.c,v 1.16 2012/06/11 21:11:40 agc Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bfs.c,v 1.15 2012/05/08 14:28:55 tsutsui Exp $); +__KERNEL_RCSID(0, $NetBSD: bfs.c,v 1.16 2012/06/11 21:11:40 agc Exp $); #define BFS_DEBUG #include sys/param.h @@ -629,7 +629,7 @@ bfs_inode_set_attr(const struct bfs *bfs if (from != NULL) { if (from-uid != (uid_t)-1) to-uid = from-uid; - if (from-gid != (uid_t)-1) + if (from-gid != (gid_t)-1) to-gid = from-gid; if (from-mode != (mode_t)-1) to-mode = from-mode; Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.45 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.46 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.45 Tue May 8 14:28:55 2012 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Mon Jun 11 21:11:41 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.45 2012/05/08 14:28:55 tsutsui Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.46 2012/06/11 21:11:41 agc Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.45 2012/05/08 14:28:55 tsutsui Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.46 2012/06/11 21:11:41 agc Exp $); #include sys/param.h #include sys/kernel.h @@ -350,7 +350,7 @@ sysvbfs_setattr(void *arg) if (vap-va_flags != VNOVAL) return EOPNOTSUPP; - if (vap-va_uid != (uid_t)VNOVAL || vap-va_gid != (uid_t)VNOVAL) { + if (vap-va_uid != (uid_t)VNOVAL || vap-va_gid != (gid_t)VNOVAL) { uid_t uid = (vap-va_uid != (uid_t)VNOVAL) ? vap-va_uid : attr-uid; gid_t gid =
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: tsutsui Date: Tue May 8 14:28:55 UTC 2012 Modified Files: src/sys/fs/sysvbfs: bfs.c bfs.h sysvbfs_vnops.c Log Message: Move bfs_file_setsize() from bfs.c to sysvbfs_vnops.c (and rename it to sysvbfs_file_setsize()) because it's actually part of vnode ops and bfs.c is also pulled by standalone bootloaders which don't want vnode header mess. To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/sys/fs/sysvbfs/bfs.c cvs rdiff -u -r1.6 -r1.7 src/sys/fs/sysvbfs/bfs.h cvs rdiff -u -r1.44 -r1.45 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/bfs.c diff -u src/sys/fs/sysvbfs/bfs.c:1.14 src/sys/fs/sysvbfs/bfs.c:1.15 --- src/sys/fs/sysvbfs/bfs.c:1.14 Sun Mar 18 02:40:55 2012 +++ src/sys/fs/sysvbfs/bfs.c Tue May 8 14:28:55 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: bfs.c,v 1.14 2012/03/18 02:40:55 christos Exp $ */ +/* $NetBSD: bfs.c,v 1.15 2012/05/08 14:28:55 tsutsui Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bfs.c,v 1.14 2012/03/18 02:40:55 christos Exp $); +__KERNEL_RCSID(0, $NetBSD: bfs.c,v 1.15 2012/05/08 14:28:55 tsutsui Exp $); #define BFS_DEBUG #include sys/param.h @@ -57,7 +57,6 @@ MALLOC_JUSTDEFINE(M_BFS, sysvbfs core, #define __FREE(a, s, t) free(a) #endif #include fs/sysvbfs/bfs.h -#include fs/sysvbfs/sysvbfs.h #ifdef BFS_DEBUG #define DPRINTF(on, fmt, args...) if (on) printf(fmt, ##args) @@ -507,21 +506,6 @@ bfs_file_lookup(const struct bfs *bfs, c return true; } -void -bfs_file_setsize(struct vnode *v, size_t size) -{ - struct sysvbfs_node *bnode = v-v_data; - struct bfs_inode *inode = bnode-inode; - - bnode-size = size; - uvm_vnp_setsize(v, bnode-size); - inode-end_sector = bnode-data_block + - (ROUND_SECTOR(bnode-size) DEV_BSHIFT) - 1; - inode-eof_offset_byte = bnode-data_block * DEV_BSIZE + - bnode-size - 1; - bnode-update_mtime = true; -} - bool bfs_dirent_lookup_by_inode(const struct bfs *bfs, int inode, struct bfs_dirent **dirent) Index: src/sys/fs/sysvbfs/bfs.h diff -u src/sys/fs/sysvbfs/bfs.h:1.6 src/sys/fs/sysvbfs/bfs.h:1.7 --- src/sys/fs/sysvbfs/bfs.h:1.6 Sun Mar 18 02:40:55 2012 +++ src/sys/fs/sysvbfs/bfs.h Tue May 8 14:28:55 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: bfs.h,v 1.6 2012/03/18 02:40:55 christos Exp $ */ +/* $NetBSD: bfs.h,v 1.7 2012/05/08 14:28:55 tsutsui Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -155,7 +155,6 @@ int bfs_file_rename(struct bfs *, const bool bfs_file_lookup(const struct bfs *, const char *, int *, int *, size_t *); size_t bfs_file_size(const struct bfs_inode *); -void bfs_file_setsize(struct vnode *, size_t); bool bfs_dump(const struct bfs *); Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.44 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.45 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.44 Sun Apr 29 22:53:59 2012 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Tue May 8 14:28:55 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.44 2012/04/29 22:53:59 chs Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.45 2012/05/08 14:28:55 tsutsui Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.44 2012/04/29 22:53:59 chs Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.45 2012/05/08 14:28:55 tsutsui Exp $); #include sys/param.h #include sys/kernel.h @@ -60,6 +60,8 @@ __KERNEL_RCSID(0, $NetBSD: sysvbfs_vnop MALLOC_JUSTDEFINE(M_SYSVBFS_VNODE, sysvbfs vnode, sysvbfs vnode structures); MALLOC_DECLARE(M_BFS); +static void sysvbfs_file_setsize(struct vnode *, size_t); + int sysvbfs_lookup(void *arg) { @@ -373,7 +375,7 @@ sysvbfs_setattr(void *arg) case VREG: if (vp-v_mount-mnt_flag MNT_RDONLY) return EROFS; - bfs_file_setsize(vp, vap-va_size); + sysvbfs_file_setsize(vp, vap-va_size); break; default: return EOPNOTSUPP; @@ -479,7 +481,7 @@ sysvbfs_write(void *arg) return 0; if (bnode-size uio-uio_offset + uio-uio_resid) { - bfs_file_setsize(v, uio-uio_offset + uio-uio_resid); + sysvbfs_file_setsize(v, uio-uio_offset + uio-uio_resid); extended = true; } @@ -492,7 +494,7 @@ sysvbfs_write(void *arg) DPRINTF(%s: write %ldbyte\n, __func__, sz); } if (err) - bfs_file_setsize(v, bnode-size - uio-uio_resid); + sysvbfs_file_setsize(v, bnode-size - uio-uio_resid); VN_KNOTE(v, NOTE_WRITE | (extended ? NOTE_EXTEND : 0)); @@ -893,3 +895,18 @@ sysvbfs_update(struct vnode *vp, const s return 0; } + +static void +sysvbfs_file_setsize(struct vnode *v, size_t size) +{ + struct sysvbfs_node *bnode = v-v_data; + struct bfs_inode *inode = bnode-inode; + + bnode-size = size; + uvm_vnp_setsize(v, bnode-size); + inode-end_sector =
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: njoly Date: Fri Mar 30 18:27:55 UTC 2012 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vnops.c Log Message: sysvbfs do not support file flags; fail with EOPNOTSUPP. To generate a diff of this commit: cvs rdiff -u -r1.42 -r1.43 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.42 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.43 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.42 Sun Mar 18 02:40:55 2012 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Fri Mar 30 18:27:55 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.42 2012/03/18 02:40:55 christos Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.43 2012/03/30 18:27:55 njoly Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.42 2012/03/18 02:40:55 christos Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.43 2012/03/30 18:27:55 njoly Exp $); #include sys/param.h #include sys/kernel.h @@ -345,6 +345,9 @@ sysvbfs_setattr(void *arg) ((int)vap-va_bytes != VNOVAL) || (vap-va_gen != VNOVAL)) return EINVAL; + if (vap-va_flags != VNOVAL) + return EOPNOTSUPP; + if (vap-va_uid != (uid_t)VNOVAL || vap-va_gid != (uid_t)VNOVAL) { uid_t uid = (vap-va_uid != (uid_t)VNOVAL) ? vap-va_uid : attr-uid;
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: christos Date: Sun Mar 18 02:40:56 UTC 2012 Modified Files: src/sys/fs/sysvbfs: bfs.c bfs.h sysvbfs_vnops.c Log Message: handle file resizing. To generate a diff of this commit: cvs rdiff -u -r1.13 -r1.14 src/sys/fs/sysvbfs/bfs.c cvs rdiff -u -r1.5 -r1.6 src/sys/fs/sysvbfs/bfs.h cvs rdiff -u -r1.41 -r1.42 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/bfs.c diff -u src/sys/fs/sysvbfs/bfs.c:1.13 src/sys/fs/sysvbfs/bfs.c:1.14 --- src/sys/fs/sysvbfs/bfs.c:1.13 Mon Jul 26 09:43:26 2010 +++ src/sys/fs/sysvbfs/bfs.c Sat Mar 17 22:40:55 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: bfs.c,v 1.13 2010/07/26 13:43:26 njoly Exp $ */ +/* $NetBSD: bfs.c,v 1.14 2012/03/18 02:40:55 christos Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bfs.c,v 1.13 2010/07/26 13:43:26 njoly Exp $); +__KERNEL_RCSID(0, $NetBSD: bfs.c,v 1.14 2012/03/18 02:40:55 christos Exp $); #define BFS_DEBUG #include sys/param.h @@ -57,6 +57,7 @@ MALLOC_JUSTDEFINE(M_BFS, sysvbfs core, #define __FREE(a, s, t) free(a) #endif #include fs/sysvbfs/bfs.h +#include fs/sysvbfs/sysvbfs.h #ifdef BFS_DEBUG #define DPRINTF(on, fmt, args...) if (on) printf(fmt, ##args) @@ -506,6 +507,21 @@ bfs_file_lookup(const struct bfs *bfs, c return true; } +void +bfs_file_setsize(struct vnode *v, size_t size) +{ + struct sysvbfs_node *bnode = v-v_data; + struct bfs_inode *inode = bnode-inode; + + bnode-size = size; + uvm_vnp_setsize(v, bnode-size); + inode-end_sector = bnode-data_block + + (ROUND_SECTOR(bnode-size) DEV_BSHIFT) - 1; + inode-eof_offset_byte = bnode-data_block * DEV_BSIZE + + bnode-size - 1; + bnode-update_mtime = true; +} + bool bfs_dirent_lookup_by_inode(const struct bfs *bfs, int inode, struct bfs_dirent **dirent) Index: src/sys/fs/sysvbfs/bfs.h diff -u src/sys/fs/sysvbfs/bfs.h:1.5 src/sys/fs/sysvbfs/bfs.h:1.6 --- src/sys/fs/sysvbfs/bfs.h:1.5 Mon Apr 28 16:24:02 2008 +++ src/sys/fs/sysvbfs/bfs.h Sat Mar 17 22:40:55 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: bfs.h,v 1.5 2008/04/28 20:24:02 martin Exp $ */ +/* $NetBSD: bfs.h,v 1.6 2012/03/18 02:40:55 christos Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -142,6 +142,8 @@ struct sector_io_ops { bool (*write_n)(void *, uint8_t *, daddr_t, int); }; +struct vnode; + int bfs_init2(struct bfs **, int, struct sector_io_ops *, bool); void bfs_fini(struct bfs *); int bfs_file_read(const struct bfs *, const char *, void *, size_t, size_t *); @@ -153,10 +155,11 @@ int bfs_file_rename(struct bfs *, const bool bfs_file_lookup(const struct bfs *, const char *, int *, int *, size_t *); size_t bfs_file_size(const struct bfs_inode *); +void bfs_file_setsize(struct vnode *, size_t); + bool bfs_dump(const struct bfs *); /* filesystem ops */ -struct vnode; int sysvbfs_bfs_init(struct bfs **, struct vnode *); void sysvbfs_bfs_fini(struct bfs *); bool bfs_inode_lookup(const struct bfs *, ino_t, struct bfs_inode **); Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.41 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.42 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.41 Tue Mar 13 14:40:50 2012 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Sat Mar 17 22:40:55 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.41 2012/03/13 18:40:50 elad Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.42 2012/03/18 02:40:55 christos Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.41 2012/03/13 18:40:50 elad Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.42 2012/03/18 02:40:55 christos Exp $); #include sys/param.h #include sys/kernel.h @@ -359,11 +359,28 @@ sysvbfs_setattr(void *arg) attr-gid = gid; } + if (vap-va_size != VNOVAL) + switch (vp-v_type) { + case VDIR: + return EISDIR; + case VCHR: + case VBLK: + case VFIFO: + break; + case VREG: + if (vp-v_mount-mnt_flag MNT_RDONLY) +return EROFS; + bfs_file_setsize(vp, vap-va_size); + break; + default: + return EOPNOTSUPP; + } + if (vap-va_mode != (mode_t)VNOVAL) { mode_t mode = vap-va_mode; error = kauth_authorize_vnode(cred, KAUTH_VNODE_WRITE_SECURITY, - vp, NULL, genfs_can_chmod(vp-v_type, cred, attr-uid, attr-gid, - mode)); + vp, NULL, genfs_can_chmod(vp-v_type, cred, attr-uid, + attr-gid, mode)); if (error) return error; attr-mode = mode; @@ -373,7 +390,8 @@ sysvbfs_setattr(void *arg) (vap-va_mtime.tv_sec != VNOVAL) || (vap-va_ctime.tv_sec != VNOVAL)) { error = kauth_authorize_vnode(cred, KAUTH_VNODE_WRITE_TIMES, vp, - NULL, genfs_can_chtimes(vp, vap-va_vaflags, attr-uid, cred)); + NULL, genfs_can_chtimes(vp, vap-va_vaflags,
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: njoly Date: Fri Jan 27 21:46:42 UTC 2012 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vnops.c Log Message: Check credentials when setting uid, gid or mode attributes. To generate a diff of this commit: cvs rdiff -u -r1.39 -r1.40 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.39 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.40 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.39 Mon Dec 12 19:11:21 2011 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Fri Jan 27 21:46:42 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.39 2011/12/12 19:11:21 njoly Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.40 2012/01/27 21:46:42 njoly Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.39 2011/12/12 19:11:21 njoly Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.40 2012/01/27 21:46:42 njoly Exp $); #include sys/param.h #include sys/kernel.h @@ -331,6 +331,8 @@ sysvbfs_setattr(void *arg) struct bfs_inode *inode = bnode-inode; struct bfs_fileattr *attr = inode-attr; struct bfs *bfs = bnode-bmp-bfs; + kauth_cred_t cred = ap-a_cred; + int error; DPRINTF(%s:\n, __func__); if (vp-v_mount-mnt_flag MNT_RDONLY) @@ -342,12 +344,30 @@ sysvbfs_setattr(void *arg) ((int)vap-va_bytes != VNOVAL) || (vap-va_gen != VNOVAL)) return EINVAL; - if (vap-va_uid != (uid_t)VNOVAL) - attr-uid = vap-va_uid; - if (vap-va_gid != (uid_t)VNOVAL) - attr-gid = vap-va_gid; - if (vap-va_mode != (mode_t)VNOVAL) - attr-mode = vap-va_mode; + if (vap-va_uid != (uid_t)VNOVAL || vap-va_gid != (uid_t)VNOVAL) { + uid_t uid = + (vap-va_uid != (uid_t)VNOVAL) ? vap-va_uid : attr-uid; + gid_t gid = + (vap-va_gid != (gid_t)VNOVAL) ? vap-va_gid : attr-gid; + error = kauth_authorize_vnode(cred, + KAUTH_VNODE_CHANGE_OWNERSHIP, vp, NULL, + genfs_can_chown(vp, cred, attr-uid, attr-gid, uid, gid)); + if (error) + return error; + attr-uid = uid; + attr-gid = gid; + } + + if (vap-va_mode != (mode_t)VNOVAL) { + mode_t mode = vap-va_mode; + error = kauth_authorize_vnode(cred, KAUTH_VNODE_WRITE_SECURITY, + vp, NULL, genfs_can_chmod(vp, cred, attr-uid, attr-gid, + mode)); + if (error) + return error; + attr-mode = mode; + } + if (vap-va_atime.tv_sec != VNOVAL) attr-atime = vap-va_atime.tv_sec; if (vap-va_mtime.tv_sec != VNOVAL)
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: christos Date: Sun Nov 13 23:07:11 UTC 2011 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vfsops.c Log Message: remove unused call to DIOCGPART that was only used for debugging. malloc M_WAITOK, does not fail. To generate a diff of this commit: cvs rdiff -u -r1.37 -r1.38 src/sys/fs/sysvbfs/sysvbfs_vfsops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vfsops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.37 src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.38 --- src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.37 Wed Jul 13 15:51:29 2011 +++ src/sys/fs/sysvbfs/sysvbfs_vfsops.c Sun Nov 13 18:07:11 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vfsops.c,v 1.37 2011/07/13 19:51:29 njoly Exp $ */ +/* $NetBSD: sysvbfs_vfsops.c,v 1.38 2011/11/13 23:07:11 christos Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.37 2011/07/13 19:51:29 njoly Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.38 2011/11/13 23:07:11 christos Exp $); #include sys/types.h #include sys/param.h @@ -39,7 +39,6 @@ __KERNEL_RCSID(0, $NetBSD: sysvbfs_vfso #include sys/time.h #include sys/ucred.h #include sys/mount.h -#include sys/disklabel.h #include sys/fcntl.h #include sys/malloc.h #include sys/kauth.h @@ -163,7 +162,6 @@ sysvbfs_mountfs(struct vnode *devvp, str { kauth_cred_t cred = l-l_cred; struct sysvbfs_mount *bmp; - struct partinfo dpart; int error, oflags; bool devopen = false; @@ -180,16 +178,7 @@ sysvbfs_mountfs(struct vnode *devvp, str goto out; devopen = true; - /* Get partition information */ - if ((error = VOP_IOCTL(devvp, DIOCGPART, dpart, FREAD, cred)) != 0) { - goto out; - } - - bmp = malloc(sizeof(struct sysvbfs_mount), M_SYSVBFS_VFS, M_WAITOK); - if (bmp == NULL) { - error = ENOMEM; - goto out; - } + bmp = malloc(sizeof(*bmp), M_SYSVBFS_VFS, M_WAITOK | M_ZERO); bmp-devvp = devvp; bmp-mountp = mp; if ((error = sysvbfs_bfs_init(bmp-bfs, devvp)) != 0) { @@ -207,10 +196,6 @@ sysvbfs_mountfs(struct vnode *devvp, str mp-mnt_dev_bshift = BFS_BSHIFT; mp-mnt_fs_bshift = BFS_BSHIFT; - DPRINTF(%s: fstype=%d dtype=%d bsize=%d\n, __func__, - dpart.part-p_fstype, dpart.disklab-d_type, - dpart.disklab-d_secsize); - out: if (devopen error) VOP_CLOSE(devvp, oflags, NOCRED);
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: njoly Date: Wed Jul 13 19:51:29 UTC 2011 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vfsops.c Log Message: Add function name to a few debug messages. To generate a diff of this commit: cvs rdiff -u -r1.36 -r1.37 src/sys/fs/sysvbfs/sysvbfs_vfsops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vfsops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.36 src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.37 --- src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.36 Sun Jun 12 03:35:54 2011 +++ src/sys/fs/sysvbfs/sysvbfs_vfsops.c Wed Jul 13 19:51:29 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vfsops.c,v 1.36 2011/06/12 03:35:54 rmind Exp $ */ +/* $NetBSD: sysvbfs_vfsops.c,v 1.37 2011/07/13 19:51:29 njoly Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.36 2011/06/12 03:35:54 rmind Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.37 2011/07/13 19:51:29 njoly Exp $); #include sys/types.h #include sys/param.h @@ -207,8 +207,9 @@ mp-mnt_dev_bshift = BFS_BSHIFT; mp-mnt_fs_bshift = BFS_BSHIFT; - DPRINTF(fstype=%d dtype=%d bsize=%d\n, dpart.part-p_fstype, - dpart.disklab-d_type, dpart.disklab-d_secsize); + DPRINTF(%s: fstype=%d dtype=%d bsize=%d\n, __func__, + dpart.part-p_fstype, dpart.disklab-d_type, + dpart.disklab-d_secsize); out: if (devopen error) @@ -341,7 +342,7 @@ DPRINTF(%s: i-node=%lld\n, __func__, (long long)ino); /* Lookup requested i-node */ if (!bfs_inode_lookup(bfs, ino, inode)) { - DPRINTF(bfs_inode_lookup failed.\n); + DPRINTF(%s: bfs_inode_lookup failed.\n, __func__); return ENOENT; }
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: njoly Date: Mon Jan 31 18:48:50 UTC 2011 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vnops.c Log Message: In sysvbfs_lookup(), deny last component write operation on a read-only mount. Fix PR/44302: sysvbfs allows unlink on fs mounted MNT_RDONLY. Reviewed by pooka. To generate a diff of this commit: cvs rdiff -u -r1.35 -r1.36 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.35 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.36 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.35 Tue Nov 30 10:43:04 2010 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Mon Jan 31 18:48:50 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.35 2010/11/30 10:43:04 dholland Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.36 2011/01/31 18:48:50 njoly Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.35 2010/11/30 10:43:04 dholland Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.36 2011/01/31 18:48:50 njoly Exp $); #include sys/param.h #include sys/kernel.h @@ -85,10 +85,16 @@ *a-a_vpp = NULL; KASSERT((cnp-cn_flags ISDOTDOT) == 0); + if ((error = VOP_ACCESS(a-a_dvp, VEXEC, cnp-cn_cred)) != 0) { return error; /* directory permission. */ } + /* Deny last component write operation on a read-only mount */ + if ((cnp-cn_flags ISLASTCN) (v-v_mount-mnt_flag MNT_RDONLY) + (cnp-cn_nameiop == DELETE || cnp-cn_nameiop == RENAME)) + return EROFS; + if (namelen == 1 name[0] == '.') { /* . */ vref(v); *a-a_vpp = v;
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: njoly Date: Mon Jul 26 13:43:26 UTC 2010 Modified Files: src/sys/fs/sysvbfs: bfs.c Log Message: Make sysvbfs rename work for filenames longer than {NAME_MAX}. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/sys/fs/sysvbfs/bfs.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/bfs.c diff -u src/sys/fs/sysvbfs/bfs.c:1.12 src/sys/fs/sysvbfs/bfs.c:1.13 --- src/sys/fs/sysvbfs/bfs.c:1.12 Sun Apr 26 12:41:59 2009 +++ src/sys/fs/sysvbfs/bfs.c Mon Jul 26 13:43:26 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: bfs.c,v 1.12 2009/04/26 12:41:59 uch Exp $ */ +/* $NetBSD: bfs.c,v 1.13 2010/07/26 13:43:26 njoly Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bfs.c,v 1.12 2009/04/26 12:41:59 uch Exp $); +__KERNEL_RCSID(0, $NetBSD: bfs.c,v 1.13 2010/07/26 13:43:26 njoly Exp $); #define BFS_DEBUG #include sys/param.h @@ -337,10 +337,6 @@ struct bfs_dirent *dirent; int err = 0; - if (strlen(to_name) BFS_FILENAME_MAXLEN) { - err = ENAMETOOLONG; - goto out; - } if (!bfs_dirent_lookup_by_name(bfs, from_name, dirent)) { err = ENOENT; goto out;
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: njoly Date: Fri Jul 16 23:41:01 UTC 2010 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vnops.c Log Message: Small typo in comment. To generate a diff of this commit: cvs rdiff -u -r1.31 -r1.32 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.31 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.32 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.31 Thu Jun 24 13:03:10 2010 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Fri Jul 16 23:41:01 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.31 2010/06/24 13:03:10 hannken Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.32 2010/07/16 23:41:01 njoly Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.31 2010/06/24 13:03:10 hannken Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.32 2010/07/16 23:41:01 njoly Exp $); #include sys/param.h #include sys/kernel.h @@ -87,7 +87,7 @@ KASSERT((cnp-cn_flags ISDOTDOT) == 0); if ((error = VOP_ACCESS(a-a_dvp, VEXEC, cnp-cn_cred)) != 0) { - return error; /* directory permittion. */ + return error; /* directory permission. */ } if (namelen == 1 name[0] == '.') { /* . */
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: njoly Date: Sat Jul 17 00:13:42 UTC 2010 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vnops.c Log Message: Fix build with SYSVBFS_VNOPS_DEBUG. To generate a diff of this commit: cvs rdiff -u -r1.32 -r1.33 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.32 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.33 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.32 Fri Jul 16 23:41:01 2010 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Sat Jul 17 00:13:42 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.32 2010/07/16 23:41:01 njoly Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.33 2010/07/17 00:13:42 njoly Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.32 2010/07/16 23:41:01 njoly Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.33 2010/07/17 00:13:42 njoly Exp $); #include sys/param.h #include sys/kernel.h @@ -574,7 +574,7 @@ struct bfs_dirent *file; int i, n, error; - DPRINTF(%s: offset=%lld residue=%d\n, __func__, + DPRINTF(%s: offset=% PRId64 residue=%zu\n, __func__, uio-uio_offset, uio-uio_resid); KDASSERT(vp-v_type == VDIR); @@ -682,7 +682,8 @@ *a-a_vpp = bmp-devvp; *a-a_runp = 0; - DPRINTF(%s: %d + %lld\n, __func__, inode-start_sector, a-a_bn); + DPRINTF(%s: %d + % PRId64 \n, __func__, inode-start_sector, + a-a_bn); *a-a_bnp = blk;
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: njoly Date: Wed Jul 7 16:19:55 UTC 2010 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vfsops.c Log Message: Do set f_namemax at mount, to provide sensible value for statvfs(2) calls. To generate a diff of this commit: cvs rdiff -u -r1.32 -r1.33 src/sys/fs/sysvbfs/sysvbfs_vfsops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vfsops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.32 src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.33 --- src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.32 Thu Jun 24 13:03:10 2010 +++ src/sys/fs/sysvbfs/sysvbfs_vfsops.c Wed Jul 7 16:19:55 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vfsops.c,v 1.32 2010/06/24 13:03:10 hannken Exp $ */ +/* $NetBSD: sysvbfs_vfsops.c,v 1.33 2010/07/07 16:19:55 njoly Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.32 2010/06/24 13:03:10 hannken Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.33 2010/07/07 16:19:55 njoly Exp $); #include sys/types.h #include sys/param.h @@ -202,6 +202,7 @@ mp-mnt_stat.f_fsidx.__fsid_val[0] = (long)devvp-v_rdev; mp-mnt_stat.f_fsidx.__fsid_val[1] = makefstype(MOUNT_SYSVBFS); mp-mnt_stat.f_fsid = mp-mnt_stat.f_fsidx.__fsid_val[0]; + mp-mnt_stat.f_namemax = BFS_FILENAME_MAXLEN; mp-mnt_flag |= MNT_LOCAL; mp-mnt_dev_bshift = BFS_BSHIFT; mp-mnt_fs_bshift = BFS_BSHIFT;
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: pooka Date: Thu May 27 13:22:03 UTC 2010 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vnops.c Log Message: Release pathname buffers after use. To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.28 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.29 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.28 Wed May 26 21:27:00 2010 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Thu May 27 13:22:02 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.28 2010/05/26 21:27:00 pooka Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.29 2010/05/27 13:22:02 pooka Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.28 2010/05/26 21:27:00 pooka Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.29 2010/05/27 13:22:02 pooka Exp $); #include sys/param.h #include sys/kernel.h @@ -168,6 +168,9 @@ /* unlock parent directory */ vput(a-a_dvp); /* locked at sysvbfs_lookup(); */ + if (err || (a-a_cnp-cn_flags SAVESTART) == 0) + PNBUF_PUT(a-a_cnp-cn_pnbuf); + return err; } @@ -478,6 +481,9 @@ vput(vp); vput(dvp); + if (err || (ap-a_cnp-cn_flags SAVESTART) == 0) + PNBUF_PUT(ap-a_cnp-cn_pnbuf); + return err; }
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: pooka Date: Thu May 27 23:40:12 UTC 2010 Modified Files: src/sys/fs/sysvbfs: sysvbfs.h sysvbfs_vnops.c Log Message: Mark files removed in the in-memory structure. This allows us to do two things: 1) properly set recycle? in inactive 2) easily check if we are renaming a removed vnode. without the check, it was possible to enter a dirent in the file system for a removed (and hence scheduled to be vcleaned) vnode. this would lead to the succesful vget() of a clean vnode. the use of the cleaned vnode was, however, less succesful, except for purposes of crashing. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/sys/fs/sysvbfs/sysvbfs.h cvs rdiff -u -r1.29 -r1.30 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs.h diff -u src/sys/fs/sysvbfs/sysvbfs.h:1.8 src/sys/fs/sysvbfs/sysvbfs.h:1.9 --- src/sys/fs/sysvbfs/sysvbfs.h:1.8 Thu Sep 4 12:07:30 2008 +++ src/sys/fs/sysvbfs/sysvbfs.h Thu May 27 23:40:12 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs.h,v 1.8 2008/09/04 12:07:30 pooka Exp $ */ +/* $NetBSD: sysvbfs.h,v 1.9 2010/05/27 23:40:12 pooka Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -52,6 +52,7 @@ int update_ctime; int update_atime; int update_mtime; + int removed; LIST_ENTRY(sysvbfs_node) link; }; Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.29 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.30 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.29 Thu May 27 13:22:02 2010 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Thu May 27 23:40:12 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.29 2010/05/27 13:22:02 pooka Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.30 2010/05/27 23:40:12 pooka Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.29 2010/05/27 13:22:02 pooka Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.30 2010/05/27 23:40:12 pooka Exp $); #include sys/param.h #include sys/kernel.h @@ -481,6 +481,10 @@ vput(vp); vput(dvp); + if (err == 0) { + bnode-removed = 1; + } + if (err || (ap-a_cnp-cn_flags SAVESTART) == 0) PNBUF_PUT(ap-a_cnp-cn_pnbuf); @@ -518,11 +522,26 @@ KDASSERT(fvp-v_type == VREG); KDASSERT(tvp == NULL ? true : tvp-v_type == VREG); + KASSERT(tdvp == fdvp); + + /* + * Make sure the source hasn't been removed between lookup + * and target directory lock. + */ + if (bnode-removed) { + error = ENOENT; + goto out; + } error = bfs_file_rename(bfs, from_name, to_name); out: - if (tvp) + if (tvp) { + if (error == 0) { + struct sysvbfs_node *tbnode = tvp-v_data; + tbnode-removed = 1; + } vput(tvp); + } /* tdvp == tvp probably can't happen with this fs, but safety first */ if (tdvp == tvp) @@ -604,9 +623,13 @@ bool *a_recycle; } */ *a = arg; struct vnode *v = a-a_vp; + struct sysvbfs_node *bnode = v-v_data; DPRINTF(%s:\n, __func__); - *a-a_recycle = true; + if (bnode-removed) + *a-a_recycle = true; + else + *a-a_recycle = false; VOP_UNLOCK(v, 0); return 0;
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: pooka Date: Wed May 26 17:52:36 UTC 2010 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vnops.c Log Message: Initialize *vpp to NULL: relookup() requires it without initializing the value before the call (yea, changing relookup would probably be smart, but other file systems already initialize vpp, so I'm letting someone else experiment with tylenol od). To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.27 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.26 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.27 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.26 Fri Jan 8 11:35:09 2010 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Wed May 26 17:52:35 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.26 2010/01/08 11:35:09 pooka Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.27 2010/05/26 17:52:35 pooka Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.26 2010/01/08 11:35:09 pooka Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.27 2010/05/26 17:52:35 pooka Exp $); #include sys/param.h #include sys/kernel.h @@ -83,12 +83,13 @@ DPRINTF(%s: %s op=%d %d\n, __func__, name, nameiop, cnp-cn_flags); + *a-a_vpp = NULL; + KASSERT((cnp-cn_flags ISDOTDOT) == 0); if ((error = VOP_ACCESS(a-a_dvp, VEXEC, cnp-cn_cred)) != 0) { return error; /* directory permittion. */ } - if (namelen == 1 name[0] == '.') { /* . */ vref(v); *a-a_vpp = v;
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: pooka Date: Wed May 26 21:27:00 UTC 2010 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vnops.c Log Message: fix refcounting To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.27 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.28 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.27 Wed May 26 17:52:35 2010 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Wed May 26 21:27:00 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.27 2010/05/26 17:52:35 pooka Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.28 2010/05/26 21:27:00 pooka Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.27 2010/05/26 17:52:35 pooka Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.28 2010/05/26 21:27:00 pooka Exp $); #include sys/param.h #include sys/kernel.h @@ -493,7 +493,9 @@ struct componentname *a_tcnp; } */ *ap = arg; struct vnode *fvp = ap-a_fvp; + struct vnode *fdvp = ap-a_fdvp; struct vnode *tvp = ap-a_tvp; + struct vnode *tdvp = ap-a_tdvp; struct sysvbfs_node *bnode = fvp-v_data; struct bfs *bfs = bnode-bmp-bfs; const char *from_name = ap-a_fcnp-cn_nameptr; @@ -501,7 +503,7 @@ int error; DPRINTF(%s: %s-%s\n, __func__, from_name, to_name); - if ((fvp-v_mount != ap-a_tdvp-v_mount) || + if ((fvp-v_mount != tdvp-v_mount) || (tvp (fvp-v_mount != tvp-v_mount))) { error = EXDEV; printf(cross-device link\n); @@ -513,12 +515,17 @@ error = bfs_file_rename(bfs, from_name, to_name); out: - vput(ap-a_tdvp); if (tvp) - vput(ap-a_tvp); /* locked on entry */ - if (ap-a_tdvp != ap-a_fdvp) - vrele(ap-a_fdvp); - vrele(ap-a_fvp); /* unlocked and refcnt is incremented on entry. */ + vput(tvp); + + /* tdvp == tvp probably can't happen with this fs, but safety first */ + if (tdvp == tvp) + vrele(tdvp); + else + vput(tdvp); + + vrele(fdvp); + vrele(fvp); return 0; }
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: pooka Date: Tue Dec 1 09:28:02 UTC 2009 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vfsops.c Log Message: Call VOP_CLOSE() in mount error branch with the device locked to prevent crash when specfs attempts to unlock the vnode. To generate a diff of this commit: cvs rdiff -u -r1.30 -r1.31 src/sys/fs/sysvbfs/sysvbfs_vfsops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vfsops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.30 src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.31 --- src/sys/fs/sysvbfs/sysvbfs_vfsops.c:1.30 Mon Jun 29 05:08:17 2009 +++ src/sys/fs/sysvbfs/sysvbfs_vfsops.c Tue Dec 1 09:28:02 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vfsops.c,v 1.30 2009/06/29 05:08:17 dholland Exp $ */ +/* $NetBSD: sysvbfs_vfsops.c,v 1.31 2009/12/01 09:28:02 pooka Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.30 2009/06/29 05:08:17 dholland Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vfsops.c,v 1.31 2009/12/01 09:28:02 pooka Exp $); #include sys/types.h #include sys/param.h @@ -165,37 +165,36 @@ struct sysvbfs_mount *bmp; struct partinfo dpart; int error, oflags; + bool devopen = false; vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY); error = vinvalbuf(devvp, V_SAVE, cred, l, 0, 0); - VOP_UNLOCK(devvp, 0); if (error) - return error; + goto out; /* Open block device */ oflags = FREAD; if ((mp-mnt_flag MNT_RDONLY) == 0) oflags |= FWRITE; if ((error = VOP_OPEN(devvp, oflags, NOCRED)) != 0) - return error; + goto out; + devopen = true; /* Get partition information */ if ((error = VOP_IOCTL(devvp, DIOCGPART, dpart, FREAD, cred)) != 0) { - VOP_CLOSE(devvp, oflags, NOCRED); - return error; + goto out; } bmp = malloc(sizeof(struct sysvbfs_mount), M_SYSVBFS_VFS, M_WAITOK); if (bmp == NULL) { - VOP_CLOSE(devvp, oflags, NOCRED); - return ENOMEM; + error = ENOMEM; + goto out; } bmp-devvp = devvp; bmp-mountp = mp; if ((error = sysvbfs_bfs_init(bmp-bfs, devvp)) != 0) { - VOP_CLOSE(devvp, oflags, NOCRED); free(bmp, M_SYSVBFS_VFS); - return error; + goto out; } LIST_INIT(bmp-bnode_head); @@ -210,7 +209,11 @@ DPRINTF(fstype=%d dtype=%d bsize=%d\n, dpart.part-p_fstype, dpart.disklab-d_type, dpart.disklab-d_secsize); - return 0; + out: + if (devopen error) + VOP_CLOSE(devvp, oflags, NOCRED); + VOP_UNLOCK(devvp, 0); + return error; } int
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: pgoyette Date: Fri Jul 3 22:38:08 UTC 2009 Modified Files: src/sys/fs/sysvbfs: sysvbfs_vnops.c Log Message: Define error before using it. (Hello again, elad!) To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 src/sys/fs/sysvbfs/sysvbfs_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.23 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.24 --- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.23 Fri Jul 3 21:17:41 2009 +++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Fri Jul 3 22:38:08 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: sysvbfs_vnops.c,v 1.23 2009/07/03 21:17:41 elad Exp $ */ +/* $NetBSD: sysvbfs_vnops.c,v 1.24 2009/07/03 22:38:08 pgoyette Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.23 2009/07/03 21:17:41 elad Exp $); +__KERNEL_RCSID(0, $NetBSD: sysvbfs_vnops.c,v 1.24 2009/07/03 22:38:08 pgoyette Exp $); #include sys/param.h #include sys/kernel.h @@ -261,6 +261,7 @@ } */ *ap = arg; struct vnode *vp = ap-a_vp; struct sysvbfs_node *bnode = vp-v_data; + int error; DPRINTF(%s:\n, __func__);
CVS commit: src/sys/fs/sysvbfs
Module Name:src Committed By: uch Date: Sun Apr 26 12:41:59 UTC 2009 Modified Files: src/sys/fs/sysvbfs: bfs.c Log Message: added error check. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/sys/fs/sysvbfs/bfs.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/fs/sysvbfs/bfs.c diff -u src/sys/fs/sysvbfs/bfs.c:1.11 src/sys/fs/sysvbfs/bfs.c:1.12 --- src/sys/fs/sysvbfs/bfs.c:1.11 Mon Apr 28 20:24:02 2008 +++ src/sys/fs/sysvbfs/bfs.c Sun Apr 26 12:41:59 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: bfs.c,v 1.11 2008/04/28 20:24:02 martin Exp $ */ +/* $NetBSD: bfs.c,v 1.12 2009/04/26 12:41:59 uch Exp $ */ /*- * Copyright (c) 2004 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include sys/cdefs.h -__KERNEL_RCSID(0, $NetBSD: bfs.c,v 1.11 2008/04/28 20:24:02 martin Exp $); +__KERNEL_RCSID(0, $NetBSD: bfs.c,v 1.12 2009/04/26 12:41:59 uch Exp $); #define BFS_DEBUG #include sys/param.h @@ -256,10 +256,12 @@ p = buf; n = end - start; - bfs-io-read_n(bfs-io, p, start, n); + if (!bfs-io-read_n(bfs-io, p, start, n)) + return EIO; /* last sector */ n *= DEV_BSIZE; - bfs-io-read(bfs-io, tmpbuf, end); + if (!bfs-io-read(bfs-io, tmpbuf, end)) + return EIO; memcpy(p + n, tmpbuf, sz - n); if (read_size)