aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorRobert Watson <rwatson@FreeBSD.org>2000-09-22 22:33:13 +0000
committerRobert Watson <rwatson@FreeBSD.org>2000-09-22 22:33:13 +0000
commit100d2c187c813509fe3b57970cd887db7e8521f9 (patch)
tree274d34e49ac801d20110118369a0f47f94a241f1 /sys
parent083d01f20daa36f8f86adcfa820767d031c3e2a8 (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/vfs_vnops.c23
-rw-r--r--sys/sys/vnode.h2
2 files changed, 25 insertions, 0 deletions
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index d45fc7837d82..427209f3bb64 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -953,3 +953,26 @@ vn_extattr_set(struct vnode *vp, int ioflg, const char *attrname, int buflen,
return (error);
}
+
+int
+vn_extattr_rm(struct vnode *vp, int ioflg, const char *attrname, struct proc *p)
+{
+ struct mount *mp;
+ int error;
+
+ if ((ioflg & IO_NODELOCKED) == 0) {
+ if ((error = vn_start_write(vp, &mp, V_WAIT)) != 0)
+ return (error);
+ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
+ }
+
+ /* authorize attribute removal as kernel */
+ error = VOP_SETEXTATTR(vp, attrname, NULL, NULL, p);
+
+ if ((ioflg & IO_NODELOCKED) == 0) {
+ vn_finished_write(mp);
+ VOP_UNLOCK(vp, 0, p);
+ }
+
+ return (error);
+}
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index 247d772eadf4..10b2ad4849e2 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -601,6 +601,8 @@ int vn_extattr_get __P((struct vnode *vp, int ioflg, const char *attrname,
int *buflen, char *buf, struct proc *p));
int vn_extattr_set __P((struct vnode *vp, int ioflg, const char *attrname,
int buflen, char *buf, struct proc *p));
+int vn_extattr_rm(struct vnode *vp, int ioflg, const char *attrname,
+ struct proc *p);
int vfs_cache_lookup __P((struct vop_lookup_args *ap));
int vfs_object_create __P((struct vnode *vp, struct proc *p,
struct ucred *cred));