mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-17 10:26:15 +00:00
Use the f_vnode field to tell which file descriptors have a vnode.
This commit is contained in:
parent
b941a2beb7
commit
1226914c17
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=117222
@ -1016,28 +1016,22 @@ fpathconf(td, uap)
|
||||
td->td_retval[0] = async_io_version;
|
||||
goto out;
|
||||
}
|
||||
switch (fp->f_type) {
|
||||
case DTYPE_PIPE:
|
||||
case DTYPE_SOCKET:
|
||||
if (uap->name != _PC_PIPE_BUF) {
|
||||
error = EINVAL;
|
||||
} else {
|
||||
td->td_retval[0] = PIPE_BUF;
|
||||
error = 0;
|
||||
}
|
||||
break;
|
||||
case DTYPE_FIFO:
|
||||
case DTYPE_VNODE:
|
||||
vp = fp->f_vnode;
|
||||
vp = fp->f_vnode;
|
||||
if (vp != NULL) {
|
||||
mtx_lock(&Giant);
|
||||
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
|
||||
error = VOP_PATHCONF(vp, uap->name, td->td_retval);
|
||||
VOP_UNLOCK(vp, 0, td);
|
||||
mtx_unlock(&Giant);
|
||||
break;
|
||||
default:
|
||||
} else if (fp->f_type == DTYPE_PIPE || fp->f_type == DTYPE_SOCKET) {
|
||||
if (uap->name != _PC_PIPE_BUF) {
|
||||
error = EINVAL;
|
||||
} else {
|
||||
td->td_retval[0] = PIPE_BUF;
|
||||
error = 0;
|
||||
}
|
||||
} else {
|
||||
error = EOPNOTSUPP;
|
||||
break;
|
||||
}
|
||||
out:
|
||||
fdrop(fp, td);
|
||||
@ -1917,7 +1911,7 @@ _fgetvp(struct thread *td, int fd, struct vnode **vpp, int flags)
|
||||
*vpp = NULL;
|
||||
if ((error = _fget(td, fd, &fp, 0, 0)) != 0)
|
||||
return (error);
|
||||
if (fp->f_type != DTYPE_VNODE && fp->f_type != DTYPE_FIFO) {
|
||||
if (fp->f_vnode == NULL) {
|
||||
error = EINVAL;
|
||||
} else {
|
||||
*vpp = fp->f_vnode;
|
||||
|
@ -3442,7 +3442,7 @@ getvnode(fdp, fd, fpp)
|
||||
if ((u_int)fd >= fdp->fd_nfiles ||
|
||||
(fp = fdp->fd_ofiles[fd]) == NULL)
|
||||
error = EBADF;
|
||||
else if (fp->f_type != DTYPE_VNODE && fp->f_type != DTYPE_FIFO) {
|
||||
else if (fp->f_vnode == NULL) {
|
||||
fp = NULL;
|
||||
error = EINVAL;
|
||||
} else {
|
||||
@ -3454,6 +3454,7 @@ getvnode(fdp, fd, fpp)
|
||||
*fpp = fp;
|
||||
return (error);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get (NFS) file handle
|
||||
*/
|
||||
|
@ -3442,7 +3442,7 @@ getvnode(fdp, fd, fpp)
|
||||
if ((u_int)fd >= fdp->fd_nfiles ||
|
||||
(fp = fdp->fd_ofiles[fd]) == NULL)
|
||||
error = EBADF;
|
||||
else if (fp->f_type != DTYPE_VNODE && fp->f_type != DTYPE_FIFO) {
|
||||
else if (fp->f_vnode == NULL) {
|
||||
fp = NULL;
|
||||
error = EINVAL;
|
||||
} else {
|
||||
@ -3454,6 +3454,7 @@ getvnode(fdp, fd, fpp)
|
||||
*fpp = fp;
|
||||
return (error);
|
||||
}
|
||||
|
||||
/*
|
||||
* Get (NFS) file handle
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user