diff options
| -rw-r--r-- | sys/kern/vfs_extattr.c | 6 | ||||
| -rw-r--r-- | sys/kern/vfs_syscalls.c | 6 | ||||
| -rw-r--r-- | sys/kern/vfs_vnops.c | 5 |
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); |
