--- src/sys/kern/vfs_vopops.c 2004/09/28 00:25:29 1.7 +++ src/sys/kern/vfs_vopops.c 2004/09/30 18:59:48 1.8 @@ -128,6 +128,13 @@ VDESC_NO_OFFSET, \ VDESC_NO_OFFSET) +#define VNODEOP_DESC_INIT_NCP_CRED(name) \ + VNODEOP_DESC_INIT(name, 0, NULL, \ + VDESC_NO_OFFSET, \ + __offsetof(VARGSSTRUCT(name), a_cred), \ + VDESC_NO_OFFSET, \ + VDESC_NO_OFFSET) + #define VNODEOP_DESC_INIT_DVP_VPP_CNP(name) \ static int VOFFNAME(name)[] = { \ __offsetof(VARGSSTRUCT(name), a_dvp), \ @@ -172,7 +179,7 @@ VNODEOP_DESC_INIT_SIMPLE(default); VNODEOP_DESC_INIT_VP(islocked); -VNODEOP_DESC_INIT_NCP(resolve); +VNODEOP_DESC_INIT_NCP_CRED(resolve); VNODEOP_DESC_INIT_DVP_VPP_CNP(lookup); VNODEOP_DESC_INIT_DVP_VPP_CNP(cachedlookup); VNODEOP_DESC_INIT_DVP_VPP_CNP(create); @@ -193,6 +200,7 @@ VNODEOP_DESC_INIT_VP(revoke); VNODEOP_DESC_INIT_VP_CRED(mmap); VNODEOP_DESC_INIT_VP(fsync); VNODEOP_DESC_INIT_DVP_VP_CNP(remove); +VNODEOP_DESC_INIT_NCP_CRED(nremove); VNODEOP_DESC_INIT_TDVP_VP_CNP(link); static int VOFFNAME(rename)[] = { @@ -284,7 +292,7 @@ vop_islocked(struct vop_ops *ops, struct } int -vop_resolve(struct vop_ops *ops, struct namecache *ncp) +vop_resolve(struct vop_ops *ops, struct namecache *ncp, struct ucred *cred) { struct vop_resolve_args ap; int error; @@ -292,6 +300,7 @@ vop_resolve(struct vop_ops *ops, struct ap.a_head.a_desc = &vop_resolve_desc; ap.a_head.a_ops = ops; ap.a_ncp = ncp; + ap.a_cred = cred; DO_OPS(ops, error, &ap, vop_resolve); return(error); @@ -650,6 +659,21 @@ vop_remove(struct vop_ops *ops, struct v } int +vop_nremove(struct vop_ops *ops, struct namecache *ncp, struct ucred *cred) +{ + struct vop_nremove_args ap; + int error; + + ap.a_head.a_desc = &vop_nremove_desc; + ap.a_head.a_ops = ops; + ap.a_ncp = ncp; + ap.a_cred = cred; + + DO_OPS(ops, error, &ap, vop_nremove); + return(error); +} + +int vop_link(struct vop_ops *ops, struct vnode *tdvp, struct namecache *par, struct vnode *vp, struct componentname *cnp) { @@ -1428,6 +1452,15 @@ vop_remove_ap(struct vop_remove_args *ap return(error); } +int +vop_nremove_ap(struct vop_nremove_args *ap) +{ + int error; + + DO_OPS(ap->a_head.a_ops, error, ap, vop_nremove); + return(error); +} + int vop_link_ap(struct vop_link_args *ap) {