* Shuffle some flags to make it easier to visually compare lists
of flags. * In the new mount case, make sure to clear the mount "action" flags. * Allow MNT_FORCE to be set by root on new mounts.
This commit is contained in:
parent
595fb05c30
commit
a58b40631e
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: vfs_syscalls.c,v 1.194 2003/09/13 08:32:14 jdolecek Exp $ */
|
||||
/* $NetBSD: vfs_syscalls.c,v 1.195 2003/10/13 18:02:20 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1989, 1993
|
||||
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.194 2003/09/13 08:32:14 jdolecek Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.195 2003/10/13 18:02:20 thorpej Exp $");
|
||||
|
||||
#include "opt_compat_netbsd.h"
|
||||
#include "opt_compat_43.h"
|
||||
@ -179,7 +179,7 @@ sys_mount(l, v, retval)
|
||||
SCARG(uap, flags) != MNT_GETARGS &&
|
||||
SCARG(uap, flags) !=
|
||||
(mp->mnt_flag | MNT_RDONLY |
|
||||
MNT_RELOAD | MNT_FORCE | MNT_UPDATE)) {
|
||||
MNT_RELOAD | MNT_FORCE | MNT_UPDATE)) {
|
||||
vput(vp);
|
||||
return (EPERM);
|
||||
}
|
||||
@ -298,7 +298,14 @@ sys_mount(l, v, retval)
|
||||
mp->mnt_vnodecovered = vp;
|
||||
mp->mnt_stat.f_owner = p->p_ucred->cr_uid;
|
||||
mp->mnt_unmounter = NULL;
|
||||
update:
|
||||
|
||||
/*
|
||||
* The underlying file system may refuse the mount for
|
||||
* various reasons. Allow root to force it to happen.
|
||||
*/
|
||||
if (p->p_ucred->cr_uid == 0)
|
||||
mp->mnt_flag |= SCARG(uap, flags) & MNT_FORCE;
|
||||
update:
|
||||
/*
|
||||
* Set the mount level flags.
|
||||
*/
|
||||
@ -306,13 +313,15 @@ update:
|
||||
mp->mnt_flag |= MNT_RDONLY;
|
||||
else if (mp->mnt_flag & MNT_RDONLY)
|
||||
mp->mnt_flag |= MNT_WANTRDWR;
|
||||
mp->mnt_flag &=~ (MNT_NOSUID | MNT_NOEXEC | MNT_NODEV |
|
||||
mp->mnt_flag &=
|
||||
~(MNT_NOSUID | MNT_NOEXEC | MNT_NODEV |
|
||||
MNT_SYNCHRONOUS | MNT_UNION | MNT_ASYNC | MNT_NOCOREDUMP |
|
||||
MNT_NOATIME | MNT_NODEVMTIME | MNT_SYMPERM | MNT_SOFTDEP);
|
||||
mp->mnt_flag |= SCARG(uap, flags) & (MNT_NOSUID | MNT_NOEXEC |
|
||||
MNT_NODEV | MNT_SYNCHRONOUS | MNT_UNION | MNT_ASYNC |
|
||||
MNT_NOCOREDUMP | MNT_IGNORE | MNT_NOATIME | MNT_NODEVMTIME |
|
||||
MNT_SYMPERM | MNT_SOFTDEP);
|
||||
mp->mnt_flag |= SCARG(uap, flags) &
|
||||
(MNT_NOSUID | MNT_NOEXEC | MNT_NODEV |
|
||||
MNT_SYNCHRONOUS | MNT_UNION | MNT_ASYNC | MNT_NOCOREDUMP |
|
||||
MNT_NOATIME | MNT_NODEVMTIME | MNT_SYMPERM | MNT_SOFTDEP |
|
||||
MNT_IGNORE);
|
||||
/*
|
||||
* Mount the filesystem.
|
||||
*/
|
||||
@ -323,8 +332,8 @@ update:
|
||||
if (error || (mp->mnt_flag & MNT_GETARGS))
|
||||
mp->mnt_flag = flag;
|
||||
mp->mnt_flag &=~
|
||||
(MNT_UPDATE | MNT_RELOAD | MNT_FORCE | MNT_WANTRDWR |
|
||||
MNT_GETARGS);
|
||||
(MNT_RELOAD | MNT_FORCE | MNT_UPDATE | MNT_GETARGS |
|
||||
MNT_WANTRDWR);
|
||||
if ((mp->mnt_flag & (MNT_RDONLY | MNT_ASYNC)) == 0) {
|
||||
if (mp->mnt_syncer == NULL)
|
||||
error = vfs_allocate_syncvnode(mp);
|
||||
@ -342,6 +351,9 @@ update:
|
||||
*/
|
||||
cache_purge(vp);
|
||||
if (!error) {
|
||||
mp->mnt_flag &=~
|
||||
(MNT_RELOAD | MNT_FORCE | MNT_UPDATE | MNT_GETARGS |
|
||||
MNT_WANTRDWR);
|
||||
vp->v_mountedhere = mp;
|
||||
simple_lock(&mountlist_slock);
|
||||
CIRCLEQ_INSERT_TAIL(&mountlist, mp, mnt_list);
|
||||
|
Loading…
x
Reference in New Issue
Block a user