svn commit: r331294 - head/sys/kern
Warner Losh
imp at FreeBSD.org
Wed Mar 21 14:46:55 UTC 2018
Author: imp
Date: Wed Mar 21 14:46:54 2018
New Revision: 331294
URL: https://svnweb.freebsd.org/changeset/base/331294
Log:
Remove Giant from init creation and vfs_mountroot.
Sponsored by: Netflix
Discussed with: kib@, mckusick@
Differential Review: https://reviews.freebsd.org/D14712
Modified:
head/sys/kern/init_main.c
head/sys/kern/kern_shutdown.c
head/sys/kern/vfs_mountroot.c
Modified: head/sys/kern/init_main.c
==============================================================================
--- head/sys/kern/init_main.c Wed Mar 21 14:37:04 2018 (r331293)
+++ head/sys/kern/init_main.c Wed Mar 21 14:46:54 2018 (r331294)
@@ -703,10 +703,6 @@ start_init(void *dummy)
struct thread *td;
struct proc *p;
- mtx_lock(&Giant);
-
- GIANT_REQUIRED;
-
TSENTER(); /* Here so we don't overlap with mi_startup. */
td = curthread;
@@ -801,7 +797,6 @@ start_init(void *dummy)
* to user mode as init!
*/
if ((error = sys_execve(td, &args)) == EJUSTRETURN) {
- mtx_unlock(&Giant);
TSEXIT();
return;
}
Modified: head/sys/kern/kern_shutdown.c
==============================================================================
--- head/sys/kern/kern_shutdown.c Wed Mar 21 14:37:04 2018 (r331293)
+++ head/sys/kern/kern_shutdown.c Wed Mar 21 14:46:54 2018 (r331294)
@@ -268,13 +268,10 @@ sys_reboot(struct thread *td, struct reboot_args *uap)
if (error == 0)
error = priv_check(td, PRIV_REBOOT);
if (error == 0) {
- if (uap->opt & RB_REROOT) {
+ if (uap->opt & RB_REROOT)
error = kern_reroot();
- } else {
- mtx_lock(&Giant);
+ else
kern_reboot(uap->opt);
- mtx_unlock(&Giant);
- }
}
return (error);
}
Modified: head/sys/kern/vfs_mountroot.c
==============================================================================
--- head/sys/kern/vfs_mountroot.c Wed Mar 21 14:37:04 2018 (r331293)
+++ head/sys/kern/vfs_mountroot.c Wed Mar 21 14:46:54 2018 (r331294)
@@ -579,9 +579,7 @@ parse_dir_md(char **conf)
if (root_mount_mddev != -1) {
mdio->md_unit = root_mount_mddev;
- DROP_GIANT();
error = kern_ioctl(td, fd, MDIOCDETACH, (void *)mdio);
- PICKUP_GIANT();
/* Ignore errors. We don't care. */
root_mount_mddev = -1;
}
@@ -590,9 +588,7 @@ parse_dir_md(char **conf)
mdio->md_options = MD_AUTOUNIT | MD_READONLY;
mdio->md_mediasize = sb.st_size;
mdio->md_unit = 0;
- DROP_GIANT();
error = kern_ioctl(td, fd, MDIOCATTACH, (void *)mdio);
- PICKUP_GIANT();
if (error)
goto out;
@@ -601,9 +597,7 @@ parse_dir_md(char **conf)
mdio->md_file = NULL;
mdio->md_options = 0;
mdio->md_mediasize = 0;
- DROP_GIANT();
error = kern_ioctl(td, fd, MDIOCDETACH, (void *)mdio);
- PICKUP_GIANT();
/* Ignore errors. We don't care. */
error = ERANGE;
goto out;
@@ -960,9 +954,7 @@ vfs_mountroot_wait(void)
curfail = 0;
while (1) {
- DROP_GIANT();
g_waitidle();
- PICKUP_GIANT();
mtx_lock(&root_holds_mtx);
if (LIST_EMPTY(&root_holds)) {
mtx_unlock(&root_holds_mtx);
@@ -1004,9 +996,7 @@ vfs_mountroot_wait_if_neccessary(const char *fs, const
* Note that we must wait for GEOM to finish reconfiguring itself,
* eg for geom_part(4) to finish tasting.
*/
- DROP_GIANT();
g_waitidle();
- PICKUP_GIANT();
if (parse_mount_dev_present(dev))
return (0);
@@ -1038,6 +1028,8 @@ vfs_mountroot(void)
time_t timebase;
int error;
+ mtx_assert(&Giant, MA_NOTOWNED);
+
TSENTER();
td = curthread;
More information about the svn-src-all
mailing list