diff options
author | Niklas Hallqvist <niklas@cvs.openbsd.org> | 1996-02-27 08:09:04 +0000 |
---|---|---|
committer | Niklas Hallqvist <niklas@cvs.openbsd.org> | 1996-02-27 08:09:04 +0000 |
commit | cc3168f1451f2932dea676a480d95729d9900183 (patch) | |
tree | 32c98bb3688ab7410d3d97f643ef2f9ab90da2c7 /sys/miscfs/union/union_vnops.c | |
parent | 08747189dfbfeed5008511fba7bd5f54eabd6b9a (diff) |
From NetBSD: update to 960217 sources
Diffstat (limited to 'sys/miscfs/union/union_vnops.c')
-rw-r--r-- | sys/miscfs/union/union_vnops.c | 477 |
1 files changed, 279 insertions, 198 deletions
diff --git a/sys/miscfs/union/union_vnops.c b/sys/miscfs/union/union_vnops.c index fa4482484e5..d46d06f3f2e 100644 --- a/sys/miscfs/union/union_vnops.c +++ b/sys/miscfs/union/union_vnops.c @@ -1,4 +1,5 @@ -/* $NetBSD: union_vnops.c,v 1.25 1995/07/13 13:19:18 mycroft Exp $ */ +/* $OpenBSD: union_vnops.c,v 1.3 1996/02/27 08:09:03 niklas Exp $ */ +/* $NetBSD: union_vnops.c,v 1.28 1996/02/13 13:13:03 mycroft Exp $ */ /* * Copyright (c) 1992, 1993, 1994 The Regents of the University of California. @@ -54,11 +55,108 @@ #include <sys/queue.h> #include <miscfs/union/union.h> +/* + * Global vfs data structures + */ + +int union_lookup __P((void *)); +int union_create __P((void *)); +int union_whiteout __P((void *)); +int union_mknod __P((void *)); +int union_open __P((void *)); +int union_close __P((void *)); +int union_access __P((void *)); +int union_getattr __P((void *)); +int union_setattr __P((void *)); +int union_read __P((void *)); +int union_write __P((void *)); +int union_lease __P((void *)); +int union_ioctl __P((void *)); +int union_select __P((void *)); +int union_mmap __P((void *)); +int union_fsync __P((void *)); +int union_seek __P((void *)); +int union_remove __P((void *)); +int union_link __P((void *)); +int union_rename __P((void *)); +int union_mkdir __P((void *)); +int union_rmdir __P((void *)); +int union_symlink __P((void *)); +int union_readdir __P((void *)); +int union_readlink __P((void *)); +int union_abortop __P((void *)); +int union_inactive __P((void *)); +int union_reclaim __P((void *)); +int union_lock __P((void *)); +int union_unlock __P((void *)); +int union_bmap __P((void *)); +int union_print __P((void *)); +int union_islocked __P((void *)); +int union_pathconf __P((void *)); +int union_advlock __P((void *)); +int union_strategy __P((void *)); + +int (**union_vnodeop_p) __P((void *)); +struct vnodeopv_entry_desc union_vnodeop_entries[] = { + { &vop_default_desc, vn_default_error }, + { &vop_lookup_desc, union_lookup }, /* lookup */ + { &vop_create_desc, union_create }, /* create */ + { &vop_whiteout_desc, union_whiteout }, /* whiteout */ + { &vop_mknod_desc, union_mknod }, /* mknod */ + { &vop_open_desc, union_open }, /* open */ + { &vop_close_desc, union_close }, /* close */ + { &vop_access_desc, union_access }, /* access */ + { &vop_getattr_desc, union_getattr }, /* getattr */ + { &vop_setattr_desc, union_setattr }, /* setattr */ + { &vop_read_desc, union_read }, /* read */ + { &vop_write_desc, union_write }, /* write */ + { &vop_lease_desc, union_lease }, /* lease */ + { &vop_ioctl_desc, union_ioctl }, /* ioctl */ + { &vop_select_desc, union_select }, /* select */ + { &vop_mmap_desc, union_mmap }, /* mmap */ + { &vop_fsync_desc, union_fsync }, /* fsync */ + { &vop_seek_desc, union_seek }, /* seek */ + { &vop_remove_desc, union_remove }, /* remove */ + { &vop_link_desc, union_link }, /* link */ + { &vop_rename_desc, union_rename }, /* rename */ + { &vop_mkdir_desc, union_mkdir }, /* mkdir */ + { &vop_rmdir_desc, union_rmdir }, /* rmdir */ + { &vop_symlink_desc, union_symlink }, /* symlink */ + { &vop_readdir_desc, union_readdir }, /* readdir */ + { &vop_readlink_desc, union_readlink }, /* readlink */ + { &vop_abortop_desc, union_abortop }, /* abortop */ + { &vop_inactive_desc, union_inactive }, /* inactive */ + { &vop_reclaim_desc, union_reclaim }, /* reclaim */ + { &vop_lock_desc, union_lock }, /* lock */ + { &vop_unlock_desc, union_unlock }, /* unlock */ + { &vop_bmap_desc, union_bmap }, /* bmap */ + { &vop_strategy_desc, union_strategy }, /* strategy */ + { &vop_print_desc, union_print }, /* print */ + { &vop_islocked_desc, union_islocked }, /* islocked */ + { &vop_pathconf_desc, union_pathconf }, /* pathconf */ + { &vop_advlock_desc, union_advlock }, /* advlock */ +#ifdef notdef + { &vop_blkatoff_desc, union_blkatoff }, /* blkatoff */ + { &vop_valloc_desc, union_valloc }, /* valloc */ + { &vop_vfree_desc, union_vfree }, /* vfree */ + { &vop_truncate_desc, union_truncate }, /* truncate */ + { &vop_update_desc, union_update }, /* update */ + { &vop_bwrite_desc, union_bwrite }, /* bwrite */ +#endif + { (struct vnodeop_desc*)NULL, (int(*) __P((void *)))NULL } +}; +struct vnodeopv_desc union_vnodeop_opv_desc = + { &union_vnodeop_p, union_vnodeop_entries }; + #define FIXUP(un) { \ if (((un)->un_flags & UN_ULOCK) == 0) { \ union_fixup(un); \ } \ } +static void union_fixup __P((struct union_node *)); +static int union_lookup1 __P((struct vnode *, struct vnode **, + struct vnode **, struct componentname *)); + static void union_fixup(un) @@ -133,7 +231,7 @@ union_lookup1(udvp, dvpp, vpp, cnp) continue; } - if (error = VFS_ROOT(mp, &tdvp)) { + if ((error = VFS_ROOT(mp, &tdvp)) != 0) { vput(dvp); return (error); } @@ -147,14 +245,15 @@ union_lookup1(udvp, dvpp, vpp, cnp) } int -union_lookup(ap) +union_lookup(v) + void *v; +{ struct vop_lookup_args /* { struct vnodeop_desc *a_desc; struct vnode *a_dvp; struct vnode **a_vpp; struct componentname *a_cnp; - } */ *ap; -{ + } */ *ap = v; int error; int uerror, lerror; struct vnode *uppervp, *lowervp; @@ -163,9 +262,8 @@ union_lookup(ap) struct union_node *dun = VTOUNION(dvp); struct componentname *cnp = ap->a_cnp; int lockparent = cnp->cn_flags & LOCKPARENT; - int rdonly = cnp->cn_flags & RDONLY; struct union_mount *um = MOUNTTOUNIONMOUNT(dvp->v_mount); - struct ucred *saved_cred; + struct ucred *saved_cred = NULL; int iswhiteout; struct vattr va; @@ -406,14 +504,15 @@ union_lookup(ap) } int -union_create(ap) +union_create(v) + void *v; +{ struct vop_create_args /* { struct vnode *a_dvp; struct vnode **a_vpp; struct componentname *a_cnp; struct vattr *a_vap; - } */ *ap; -{ + } */ *ap = v; struct union_node *un = VTOUNION(ap->a_dvp); struct vnode *dvp; @@ -451,13 +550,14 @@ union_create(ap) } int -union_whiteout(ap) +union_whiteout(v) + void *v; +{ struct vop_whiteout_args /* { struct vnode *a_dvp; struct componentname *a_cnp; int a_flags; - } */ *ap; -{ + } */ *ap = v; struct union_node *un = VTOUNION(ap->a_dvp); if (un->un_uppervp == NULLVP) @@ -468,14 +568,15 @@ union_whiteout(ap) } int -union_mknod(ap) +union_mknod(v) + void *v; +{ struct vop_mknod_args /* { struct vnode *a_dvp; struct vnode **a_vpp; struct componentname *a_cnp; struct vattr *a_vap; - } */ *ap; -{ + } */ *ap = v; struct union_node *un = VTOUNION(ap->a_dvp); struct vnode *dvp; @@ -515,15 +616,16 @@ union_mknod(ap) } int -union_open(ap) +union_open(v) + void *v; +{ struct vop_open_args /* { struct vnodeop_desc *a_desc; struct vnode *a_vp; int a_mode; struct ucred *a_cred; struct proc *a_p; - } */ *ap; -{ + } */ *ap = v; struct union_node *un = VTOUNION(ap->a_vp); struct vnode *tvp; int mode = ap->a_mode; @@ -568,14 +670,15 @@ union_open(ap) } int -union_close(ap) +union_close(v) + void *v; +{ struct vop_close_args /* { struct vnode *a_vp; int a_fflag; struct ucred *a_cred; struct proc *a_p; - } */ *ap; -{ + } */ *ap = v; struct union_node *un = VTOUNION(ap->a_vp); struct vnode *vp; @@ -611,15 +714,16 @@ union_close(ap) * the user caused an implicit file copy. */ int -union_access(ap) +union_access(v) + void *v; +{ struct vop_access_args /* { struct vnodeop_desc *a_desc; struct vnode *a_vp; int a_mode; struct ucred *a_cred; struct proc *a_p; - } */ *ap; -{ + } */ *ap = v; struct union_node *un = VTOUNION(ap->a_vp); int error = EACCES; struct vnode *vp; @@ -652,14 +756,15 @@ union_access(ap) * track object sizes */ int -union_getattr(ap) +union_getattr(v) + void *v; +{ struct vop_getattr_args /* { struct vnode *a_vp; struct vattr *a_vap; struct ucred *a_cred; struct proc *a_p; - } */ *ap; -{ + } */ *ap = v; int error; struct union_node *un = VTOUNION(ap->a_vp); struct vnode *vp = un->un_uppervp; @@ -720,14 +825,15 @@ union_getattr(ap) } int -union_setattr(ap) +union_setattr(v) + void *v; +{ struct vop_setattr_args /* { struct vnode *a_vp; struct vattr *a_vap; struct ucred *a_cred; struct proc *a_p; - } */ *ap; -{ + } */ *ap = v; struct union_node *un = VTOUNION(ap->a_vp); int error; @@ -763,14 +869,15 @@ union_setattr(ap) } int -union_read(ap) +union_read(v) + void *v; +{ struct vop_read_args /* { struct vnode *a_vp; struct uio *a_uio; int a_ioflag; struct ucred *a_cred; - } */ *ap; -{ + } */ *ap = v; int error; struct vnode *vp = OTHERVP(ap->a_vp); int dolock = (vp == LOWERVP(ap->a_vp)); @@ -806,14 +913,15 @@ union_read(ap) } int -union_write(ap) +union_write(v) + void *v; +{ struct vop_read_args /* { struct vnode *a_vp; struct uio *a_uio; int a_ioflag; struct ucred *a_cred; - } */ *ap; -{ + } */ *ap = v; int error; struct vnode *vp; struct union_node *un = VTOUNION(ap->a_vp); @@ -839,14 +947,16 @@ union_write(ap) return (error); } -union_lease(ap) +int +union_lease(v) + void *v; +{ struct vop_lease_args /* { struct vnode *a_vp; struct proc *a_p; struct ucred *a_cred; int a_flag; - } */ *ap; -{ + } */ *ap = v; register struct vnode *vp = OTHERVP(ap->a_vp); ap->a_vp = vp; @@ -854,7 +964,9 @@ union_lease(ap) } int -union_ioctl(ap) +union_ioctl(v) + void *v; +{ struct vop_ioctl_args /* { struct vnode *a_vp; u_long a_command; @@ -862,8 +974,7 @@ union_ioctl(ap) int a_fflag; struct ucred *a_cred; struct proc *a_p; - } */ *ap; -{ + } */ *ap = v; register struct vnode *vp = OTHERVP(ap->a_vp); ap->a_vp = vp; @@ -871,15 +982,16 @@ union_ioctl(ap) } int -union_select(ap) +union_select(v) + void *v; +{ struct vop_select_args /* { struct vnode *a_vp; int a_which; int a_fflags; struct ucred *a_cred; struct proc *a_p; - } */ *ap; -{ + } */ *ap = v; register struct vnode *vp = OTHERVP(ap->a_vp); ap->a_vp = vp; @@ -887,14 +999,15 @@ union_select(ap) } int -union_mmap(ap) +union_mmap(v) + void *v; +{ struct vop_mmap_args /* { struct vnode *a_vp; int a_fflags; struct ucred *a_cred; struct proc *a_p; - } */ *ap; -{ + } */ *ap = v; register struct vnode *vp = OTHERVP(ap->a_vp); ap->a_vp = vp; @@ -902,14 +1015,15 @@ union_mmap(ap) } int -union_fsync(ap) +union_fsync(v) + void *v; +{ struct vop_fsync_args /* { struct vnode *a_vp; struct ucred *a_cred; int a_waitfor; struct proc *a_p; - } */ *ap; -{ + } */ *ap = v; int error = 0; struct vnode *targetvp = OTHERVP(ap->a_vp); @@ -930,14 +1044,15 @@ union_fsync(ap) } int -union_seek(ap) +union_seek(v) + void *v; +{ struct vop_seek_args /* { struct vnode *a_vp; off_t a_oldoff; off_t a_newoff; struct ucred *a_cred; - } */ *ap; -{ + } */ *ap = v; register struct vnode *vp = OTHERVP(ap->a_vp); ap->a_vp = vp; @@ -945,13 +1060,14 @@ union_seek(ap) } int -union_remove(ap) +union_remove(v) + void *v; +{ struct vop_remove_args /* { struct vnode *a_dvp; struct vnode *a_vp; struct componentname *a_cnp; - } */ *ap; -{ + } */ *ap = v; int error; struct union_node *dun = VTOUNION(ap->a_dvp); struct union_node *un = VTOUNION(ap->a_vp); @@ -990,24 +1106,25 @@ union_remove(ap) return (error); } -/* a_vp: directory in which to link - a_tdvp: new target of the link +/* a_dvp: directory in which to link + a_vp: new target of the link a_cnp: name for the link */ int -union_link(ap) +union_link(v) + void *v; +{ struct vop_link_args /* { + struct vnode *a_dvp; struct vnode *a_vp; - struct vnode *a_tdvp; struct componentname *a_cnp; - } */ *ap; -{ + } */ *ap = v; int error = 0; - struct union_node *un; + struct union_node *dun; + struct vnode *dvp; struct vnode *vp; - struct vnode *tdvp; - un = VTOUNION(ap->a_vp); + dun = VTOUNION(ap->a_dvp); #ifdef DIAGNOSTIC if (!(ap->a_cnp->cn_flags & LOCKPARENT)) { @@ -1015,21 +1132,22 @@ union_link(ap) error = EIO; /* need some error code for "caller is a bozo" */ } else #endif - if (ap->a_vp->v_op != ap->a_tdvp->v_op) { - tdvp = ap->a_tdvp; + if (ap->a_dvp->v_op != ap->a_vp->v_op) { + vp = ap->a_vp; } else { - struct union_node *tdun = VTOUNION(ap->a_tdvp); - if (tdun->un_uppervp == NULLVP) { + struct union_node *un = VTOUNION(ap->a_vp); + + if (un->un_uppervp == NULLVP) { /* * needs to be copied up before we can link it. */ - VOP_LOCK(ap->a_tdvp); - if (un->un_uppervp == tdun->un_dirvp) { - VOP_UNLOCK(ap->a_vp); + VOP_LOCK(ap->a_vp); + if (dun->un_uppervp == un->un_dirvp) { + VOP_UNLOCK(ap->a_dvp); } - error = union_copyup(tdun, 1, ap->a_cnp->cn_cred, + error = union_copyup(un, 1, ap->a_cnp->cn_cred, ap->a_cnp->cn_proc); - if (un->un_uppervp == tdun->un_dirvp) { + if (dun->un_uppervp == un->un_dirvp) { /* During copyup, we dropped the lock on the * dir and invalidated any saved namei lookup * state for the directory we'll be entering @@ -1040,51 +1158,53 @@ union_link(ap) * reset the state. */ vp = NULLVP; - if (un->un_uppervp == NULLVP || + if (dun->un_uppervp == NULLVP || /* * relookup starts with an unlocked node, * and since LOCKPARENT is set returns * the starting directory locked. */ - (error = relookup(ap->a_vp, - &vp, ap->a_cnp))) { - vrele(ap->a_vp); - VOP_UNLOCK(ap->a_tdvp); + (error = relookup(ap->a_dvp, + &dvp, ap->a_cnp))) { + vrele(ap->a_dvp); + VOP_UNLOCK(ap->a_vp); return EROFS; } - if (vp != NULLVP) { + if (dvp != NULLVP) { /* The name we want to create has mysteriously appeared (a race?) */ error = EEXIST; - VOP_UNLOCK(ap->a_tdvp); + VOP_UNLOCK(ap->a_vp); goto croak; } } - VOP_UNLOCK(ap->a_tdvp); + VOP_UNLOCK(ap->a_vp); } - tdvp = tdun->un_uppervp; + vp = un->un_uppervp; } - vp = un->un_uppervp; - if (vp == NULLVP) + dvp = dun->un_uppervp; + if (dvp == NULLVP) error = EROFS; if (error) { croak: - vput(ap->a_vp); + vput(ap->a_dvp); return (error); } - FIXUP(un); - VREF(vp); - un->un_flags |= UN_KLOCK; - vput(ap->a_vp); + FIXUP(dun); + VREF(dvp); + dun->un_flags |= UN_KLOCK; + vput(ap->a_dvp); - return (VOP_LINK(vp, tdvp, ap->a_cnp)); + return (VOP_LINK(dvp, vp, ap->a_cnp)); } int -union_rename(ap) +union_rename(v) + void *v; +{ struct vop_rename_args /* { struct vnode *a_fdvp; struct vnode *a_fvp; @@ -1092,8 +1212,7 @@ union_rename(ap) struct vnode *a_tdvp; struct vnode *a_tvp; struct componentname *a_tcnp; - } */ *ap; -{ + } */ *ap = v; int error; struct vnode *fdvp = ap->a_fdvp; @@ -1192,14 +1311,15 @@ bad: } int -union_mkdir(ap) +union_mkdir(v) + void *v; +{ struct vop_mkdir_args /* { struct vnode *a_dvp; struct vnode **a_vpp; struct componentname *a_cnp; struct vattr *a_vap; - } */ *ap; -{ + } */ *ap = v; struct union_node *un = VTOUNION(ap->a_dvp); struct vnode *dvp = un->un_uppervp; @@ -1237,13 +1357,14 @@ union_mkdir(ap) } int -union_rmdir(ap) +union_rmdir(v) + void *v; +{ struct vop_rmdir_args /* { struct vnode *a_dvp; struct vnode *a_vp; struct componentname *a_cnp; - } */ *ap; -{ + } */ *ap = v; int error; struct union_node *dun = VTOUNION(ap->a_dvp); struct union_node *un = VTOUNION(ap->a_vp); @@ -1283,22 +1404,22 @@ union_rmdir(ap) } int -union_symlink(ap) +union_symlink(v) + void *v; +{ struct vop_symlink_args /* { struct vnode *a_dvp; struct vnode **a_vpp; struct componentname *a_cnp; struct vattr *a_vap; char *a_target; - } */ *ap; -{ + } */ *ap = v; struct union_node *un = VTOUNION(ap->a_dvp); struct vnode *dvp = un->un_uppervp; if (dvp != NULLVP) { int error; struct vnode *vp; - struct mount *mp = ap->a_dvp->v_mount; FIXUP(un); VREF(dvp); @@ -1322,7 +1443,9 @@ union_symlink(ap) * eliminating duplicate names from the returned data stream. */ int -union_readdir(ap) +union_readdir(v) + void *v; +{ struct vop_readdir_args /* { struct vnodeop_desc *a_desc; struct vnode *a_vp; @@ -1331,8 +1454,7 @@ union_readdir(ap) int *a_eofflag; u_long *a_cookies; int a_ncookies; - } */ *ap; -{ + } */ *ap = v; register struct union_node *un = VTOUNION(ap->a_vp); register struct vnode *vp; @@ -1345,13 +1467,14 @@ union_readdir(ap) } int -union_readlink(ap) +union_readlink(v) + void *v; +{ struct vop_readlink_args /* { struct vnode *a_vp; struct uio *a_uio; struct ucred *a_cred; - } */ *ap; -{ + } */ *ap = v; int error; struct vnode *vp = OTHERVP(ap->a_vp); int dolock = (vp == LOWERVP(ap->a_vp)); @@ -1369,12 +1492,13 @@ union_readlink(ap) } int -union_abortop(ap) +union_abortop(v) + void *v; +{ struct vop_abortop_args /* { struct vnode *a_dvp; struct componentname *a_cnp; - } */ *ap; -{ + } */ *ap = v; int error; struct vnode *vp = OTHERVP(ap->a_dvp); struct union_node *un = VTOUNION(ap->a_dvp); @@ -1396,11 +1520,12 @@ union_abortop(ap) } int -union_inactive(ap) +union_inactive(v) + void *v; +{ struct vop_inactive_args /* { struct vnode *a_vp; - } */ *ap; -{ + } */ *ap = v; struct union_node *un = VTOUNION(ap->a_vp); /* @@ -1432,11 +1557,12 @@ union_inactive(ap) } int -union_reclaim(ap) +union_reclaim(v) + void *v; +{ struct vop_reclaim_args /* { struct vnode *a_vp; - } */ *ap; -{ + } */ *ap = v; union_freevp(ap->a_vp); @@ -1444,9 +1570,10 @@ union_reclaim(ap) } int -union_lock(ap) - struct vop_lock_args *ap; +union_lock(v) + void *v; { + struct vop_lock_args *ap = v; struct vnode *vp = ap->a_vp; struct union_node *un; @@ -1513,9 +1640,10 @@ start: */ int -union_unlock(ap) - struct vop_lock_args *ap; +union_unlock(v) + void *v; { + struct vop_lock_args *ap = v; struct union_node *un = VTOUNION(ap->a_vp); #ifdef DIAGNOSTIC @@ -1546,15 +1674,16 @@ union_unlock(ap) } int -union_bmap(ap) +union_bmap(v) + void *v; +{ struct vop_bmap_args /* { struct vnode *a_vp; daddr_t a_bn; struct vnode **a_vpp; daddr_t *a_bnp; int *a_runp; - } */ *ap; -{ + } */ *ap = v; int error; struct vnode *vp = OTHERVP(ap->a_vp); int dolock = (vp == LOWERVP(ap->a_vp)); @@ -1572,15 +1701,17 @@ union_bmap(ap) } int -union_print(ap) +union_print(v) + void *v; +{ struct vop_print_args /* { struct vnode *a_vp; - } */ *ap; -{ + } */ *ap = v; struct vnode *vp = ap->a_vp; printf("\ttag VT_UNION, vp=%x, uppervp=%x, lowervp=%x\n", - vp, UPPERVP(vp), LOWERVP(vp)); + (unsigned int) vp, (unsigned int) UPPERVP(vp), + (unsigned int) LOWERVP(vp)); if (UPPERVP(vp)) vprint("uppervp", UPPERVP(vp)); if (LOWERVP(vp)) @@ -1595,23 +1726,25 @@ union_print(ap) } int -union_islocked(ap) +union_islocked(v) + void *v; +{ struct vop_islocked_args /* { struct vnode *a_vp; - } */ *ap; -{ + } */ *ap = v; return ((VTOUNION(ap->a_vp)->un_flags & UN_LOCKED) ? 1 : 0); } int -union_pathconf(ap) +union_pathconf(v) + void *v; +{ struct vop_pathconf_args /* { struct vnode *a_vp; int a_name; register_t *a_retval; - } */ *ap; -{ + } */ *ap = v; int error; struct vnode *vp = OTHERVP(ap->a_vp); int dolock = (vp == LOWERVP(ap->a_vp)); @@ -1629,15 +1762,16 @@ union_pathconf(ap) } int -union_advlock(ap) +union_advlock(v) + void *v; +{ struct vop_advlock_args /* { struct vnode *a_vp; caddr_t a_id; int a_op; struct flock *a_fl; int a_flags; - } */ *ap; -{ + } */ *ap = v; register struct vnode *vp = OTHERVP(ap->a_vp); ap->a_vp = vp; @@ -1651,11 +1785,12 @@ union_advlock(ap) * This goes away with a merged VM/buffer cache. */ int -union_strategy(ap) +union_strategy(v) + void *v; +{ struct vop_strategy_args /* { struct buf *a_bp; - } */ *ap; -{ + } */ *ap = v; struct buf *bp = ap->a_bp; int error; struct vnode *savedvp; @@ -1677,57 +1812,3 @@ union_strategy(ap) return (error); } -/* - * Global vfs data structures - */ -int (**union_vnodeop_p)(); -struct vnodeopv_entry_desc union_vnodeop_entries[] = { - { &vop_default_desc, vn_default_error }, - { &vop_lookup_desc, union_lookup }, /* lookup */ - { &vop_create_desc, union_create }, /* create */ - { &vop_whiteout_desc, union_whiteout }, /* whiteout */ - { &vop_mknod_desc, union_mknod }, /* mknod */ - { &vop_open_desc, union_open }, /* open */ - { &vop_close_desc, union_close }, /* close */ - { &vop_access_desc, union_access }, /* access */ - { &vop_getattr_desc, union_getattr }, /* getattr */ - { &vop_setattr_desc, union_setattr }, /* setattr */ - { &vop_read_desc, union_read }, /* read */ - { &vop_write_desc, union_write }, /* write */ - { &vop_lease_desc, union_lease }, /* lease */ - { &vop_ioctl_desc, union_ioctl }, /* ioctl */ - { &vop_select_desc, union_select }, /* select */ - { &vop_mmap_desc, union_mmap }, /* mmap */ - { &vop_fsync_desc, union_fsync }, /* fsync */ - { &vop_seek_desc, union_seek }, /* seek */ - { &vop_remove_desc, union_remove }, /* remove */ - { &vop_link_desc, union_link }, /* link */ - { &vop_rename_desc, union_rename }, /* rename */ - { &vop_mkdir_desc, union_mkdir }, /* mkdir */ - { &vop_rmdir_desc, union_rmdir }, /* rmdir */ - { &vop_symlink_desc, union_symlink }, /* symlink */ - { &vop_readdir_desc, union_readdir }, /* readdir */ - { &vop_readlink_desc, union_readlink }, /* readlink */ - { &vop_abortop_desc, union_abortop }, /* abortop */ - { &vop_inactive_desc, union_inactive }, /* inactive */ - { &vop_reclaim_desc, union_reclaim }, /* reclaim */ - { &vop_lock_desc, union_lock }, /* lock */ - { &vop_unlock_desc, union_unlock }, /* unlock */ - { &vop_bmap_desc, union_bmap }, /* bmap */ - { &vop_strategy_desc, union_strategy }, /* strategy */ - { &vop_print_desc, union_print }, /* print */ - { &vop_islocked_desc, union_islocked }, /* islocked */ - { &vop_pathconf_desc, union_pathconf }, /* pathconf */ - { &vop_advlock_desc, union_advlock }, /* advlock */ -#ifdef notdef - { &vop_blkatoff_desc, union_blkatoff }, /* blkatoff */ - { &vop_valloc_desc, union_valloc }, /* valloc */ - { &vop_vfree_desc, union_vfree }, /* vfree */ - { &vop_truncate_desc, union_truncate }, /* truncate */ - { &vop_update_desc, union_update }, /* update */ - { &vop_bwrite_desc, union_bwrite }, /* bwrite */ -#endif - { (struct vnodeop_desc*)NULL, (int(*)())NULL } -}; -struct vnodeopv_desc union_vnodeop_opv_desc = - { &union_vnodeop_p, union_vnodeop_entries }; |