diff options
Diffstat (limited to 'sys/miscfs/union/union_subr.c')
| -rw-r--r-- | sys/miscfs/union/union_subr.c | 86 |
1 files changed, 4 insertions, 82 deletions
diff --git a/sys/miscfs/union/union_subr.c b/sys/miscfs/union/union_subr.c index 7559b6e205fb5..c54d86b6a4192 100644 --- a/sys/miscfs/union/union_subr.c +++ b/sys/miscfs/union/union_subr.c @@ -35,19 +35,16 @@ * SUCH DAMAGE. * * @(#)union_subr.c 8.20 (Berkeley) 5/20/95 - * $Id: union_subr.c,v 1.35 1998/12/07 21:58:34 archie Exp $ + * $Id: union_subr.c,v 1.30 1998/05/07 04:58:36 msmith Exp $ */ #include <sys/param.h> #include <sys/systm.h> -#include <sys/kernel.h> #include <sys/vnode.h> #include <sys/namei.h> #include <sys/malloc.h> #include <sys/fcntl.h> -#include <sys/file.h> #include <sys/filedesc.h> -#include <sys/module.h> #include <sys/mount.h> #include <sys/stat.h> #include <vm/vm.h> @@ -307,9 +304,10 @@ union_allocvp(vpp, mp, undvp, dvp, cnp, uppervp, lowervp, docache) struct union_node *un = 0; struct vnode *xlowervp = NULLVP; struct union_mount *um = MOUNTTOUNIONMOUNT(mp); - int hash = 0; + int hash; int vflag; int try; + int klocked; if (uppervp == NULLVP && lowervp == NULLVP) panic("union: unidentifiable allocation"); @@ -773,7 +771,7 @@ union_relookup(um, dvp, vpp, cnp, cn, path, pathlen) vrele(dvp); else { zfree(namei_zone, cn->cn_pnbuf); - cn->cn_pnbuf = NULL; + cn->cn_pnbuf = '\0'; } return (error); @@ -1140,79 +1138,3 @@ out: VOP_UNLOCK(vp, 0, p); return (nvp); } - -/* - * Module glue to remove #ifdef UNION from vfs_syscalls.c - */ -static int -union_dircheck(struct proc *p, struct vnode **vp, struct file *fp) -{ - int error = 0; - - if ((*vp)->v_op == union_vnodeop_p) { - struct vnode *lvp; - - lvp = union_dircache(*vp, p); - if (lvp != NULLVP) { - struct vattr va; - - /* - * If the directory is opaque, - * then don't show lower entries - */ - error = VOP_GETATTR(*vp, &va, fp->f_cred, p); - if (va.va_flags & OPAQUE) { - vput(lvp); - lvp = NULL; - } - } - - if (lvp != NULLVP) { - error = VOP_OPEN(lvp, FREAD, fp->f_cred, p); - if (error) { - vput(lvp); - return (error); - } - VOP_UNLOCK(lvp, 0, p); - fp->f_data = (caddr_t) lvp; - fp->f_offset = 0; - error = vn_close(*vp, FREAD, fp->f_cred, p); - if (error) - return (error); - *vp = lvp; - return -1; /* goto unionread */ - } - } - if (((*vp)->v_flag & VROOT) && ((*vp)->v_mount->mnt_flag & MNT_UNION)) { - struct vnode *tvp = *vp; - *vp = (*vp)->v_mount->mnt_vnodecovered; - VREF(*vp); - fp->f_data = (caddr_t) *vp; - fp->f_offset = 0; - vrele(tvp); - return -1; /* goto unionread */ - } - return error; -} - -static int -union_modevent(module_t mod, int type, void *data) -{ - switch (type) { - case MOD_LOAD: - union_dircheckp = union_dircheck; - break; - case MOD_UNLOAD: - union_dircheckp = NULL; - break; - default: - break; - } - return 0; -} -static moduledata_t union_mod = { - "union_dircheck", - union_modevent, - NULL -}; -DECLARE_MODULE(union_dircheck, union_mod, SI_SUB_VFS, SI_ORDER_ANY); |
