mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 00:32:25 -04:00
Mostly revert a5970a529c: Make files opened with O_PATH to not block non-forced unmount
Problem is that open(O_PATH) on nullfs -o nocache is broken then, because there is no reference on the vnode after the open syscall exits. Reported and tested by: ambrisko Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week
This commit is contained in:
parent
a30eb84a5d
commit
bf13db086b
3 changed files with 2 additions and 7 deletions
|
|
@ -28,7 +28,7 @@
|
||||||
.\" @(#)open.2 8.2 (Berkeley) 11/16/93
|
.\" @(#)open.2 8.2 (Berkeley) 11/16/93
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd October 9, 2021
|
.Dd April 22, 2022
|
||||||
.Dt OPEN 2
|
.Dt OPEN 2
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
|
|
@ -351,9 +351,6 @@ But operations like
|
||||||
and any other that operate on file and not on file descriptor (except
|
and any other that operate on file and not on file descriptor (except
|
||||||
.Xr fstat 2 ),
|
.Xr fstat 2 ),
|
||||||
are not allowed.
|
are not allowed.
|
||||||
File opened with the
|
|
||||||
.Dv O_PATH
|
|
||||||
flag does not prevent non-forced unmount of the volume it belongs to.
|
|
||||||
.Pp
|
.Pp
|
||||||
A file descriptor created with the
|
A file descriptor created with the
|
||||||
.Dv O_PATH
|
.Dv O_PATH
|
||||||
|
|
|
||||||
|
|
@ -5138,7 +5138,7 @@ path_close(struct file *fp, struct thread *td)
|
||||||
{
|
{
|
||||||
MPASS(fp->f_type == DTYPE_VNODE);
|
MPASS(fp->f_type == DTYPE_VNODE);
|
||||||
fp->f_ops = &badfileops;
|
fp->f_ops = &badfileops;
|
||||||
vdrop(fp->f_vnode);
|
vrele(fp->f_vnode);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1219,8 +1219,6 @@ kern_openat(struct thread *td, int fd, const char *path, enum uio_seg pathseg,
|
||||||
if ((flags & O_PATH) != 0) {
|
if ((flags & O_PATH) != 0) {
|
||||||
finit(fp, (flags & FMASK) | (fp->f_flag & FKQALLOWED),
|
finit(fp, (flags & FMASK) | (fp->f_flag & FKQALLOWED),
|
||||||
DTYPE_VNODE, NULL, &path_fileops);
|
DTYPE_VNODE, NULL, &path_fileops);
|
||||||
vhold(vp);
|
|
||||||
vunref(vp);
|
|
||||||
} else {
|
} else {
|
||||||
finit_vnode(fp, flags, NULL, &vnops);
|
finit_vnode(fp, flags, NULL, &vnops);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue