Fix r313495.
The file type DTYPE_VNODE can be assigned as a fallback if VOP_OPEN() did not initialized file type. This is a typical code path used by normal file systems. Also, change error returned for inappropriate file type used for O_EXLOCK to EOPNOTSUPP, as declared in the open(2) man page. Reported by: cy, dhw, Iblis Lin <iblis@hs.ntnu.edu.tw> Tested by: dhw Sponsored by: The FreeBSD Foundation MFC after: 13 days
This commit is contained in:
parent
c0e295def7
commit
e83a71c656
@ -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);
|
||||
|
@ -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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user