diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index 70cdcdc6f75..1f2cceaf7a6 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -351,8 +351,8 @@ vn_open_vnode(struct vnode *vp, int fmode, struct ucred *cred, while ((fmode & (O_EXLOCK | O_SHLOCK)) != 0) { KASSERT(fp != NULL, ("open with flock requires fp")); - if (fp->f_type != DTYPE_VNODE) { - error = EBADF; + if (fp->f_type != DTYPE_NONE && fp->f_type != DTYPE_VNODE) { + error = EOPNOTSUPP; break; } lock_flags = VOP_ISLOCKED(vp); diff --git a/sys/sys/file.h b/sys/sys/file.h index 353c92f365a..c51f26a41d2 100644 --- a/sys/sys/file.h +++ b/sys/sys/file.h @@ -53,6 +53,7 @@ struct vnode; #endif /* _KERNEL */ +#define DTYPE_NONE 0 /* not yet initialized */ #define DTYPE_VNODE 1 /* file */ #define DTYPE_SOCKET 2 /* communications endpoint */ #define DTYPE_PIPE 3 /* pipe */