summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/kern/vfs_extattr.c6
-rw-r--r--sys/kern/vfs_syscalls.c6
-rw-r--r--sys/kern/vfs_vnops.c5
3 files changed, 12 insertions, 5 deletions
diff --git a/sys/kern/vfs_extattr.c b/sys/kern/vfs_extattr.c
index 3b45d4302cb5..000fa0aec697 100644
--- a/sys/kern/vfs_extattr.c
+++ b/sys/kern/vfs_extattr.c
@@ -4245,8 +4245,10 @@ extattr_delete_vp(struct vnode *vp, int attrnamespace, const char *attrname,
goto done;
#endif
- error = VOP_SETEXTATTR(vp, attrnamespace, attrname, NULL, td->td_ucred,
- td);
+ error = VOP_RMEXTATTR(vp, attrnamespace, attrname, td->td_ucred, td);
+ if (error == EOPNOTSUPP)
+ error = VOP_SETEXTATTR(vp, attrnamespace, attrname, NULL,
+ td->td_ucred, td);
#ifdef MAC
done:
#endif
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 3b45d4302cb5..000fa0aec697 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -4245,8 +4245,10 @@ extattr_delete_vp(struct vnode *vp, int attrnamespace, const char *attrname,
goto done;
#endif
- error = VOP_SETEXTATTR(vp, attrnamespace, attrname, NULL, td->td_ucred,
- td);
+ error = VOP_RMEXTATTR(vp, attrnamespace, attrname, td->td_ucred, td);
+ if (error == EOPNOTSUPP)
+ error = VOP_SETEXTATTR(vp, attrnamespace, attrname, NULL,
+ td->td_ucred, td);
#ifdef MAC
done:
#endif
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index 8d8f13d183c0..2b53323efa3e 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -1150,7 +1150,10 @@ vn_extattr_rm(struct vnode *vp, int ioflg, int attrnamespace,
}
/* authorize attribute removal as kernel */
- error = VOP_SETEXTATTR(vp, attrnamespace, attrname, NULL, NULL, td);
+ error = VOP_RMEXTATTR(vp, attrnamespace, attrname, NULL, td);
+ if (error == EOPNOTSUPP)
+ error = VOP_SETEXTATTR(vp, attrnamespace, attrname, NULL,
+ NULL, td);
if ((ioflg & IO_NODELOCKED) == 0) {
vn_finished_write(mp);