Merge "Changes of root storage space unmounting time on Zygote Process"

This commit is contained in:
Elliott Hughes
2016-03-21 21:06:09 +00:00
committed by Gerrit Code Review
3 changed files with 22 additions and 4 deletions

View File

@@ -149,6 +149,12 @@ public final class Zygote {
native private static int nativeForkSystemServer(int uid, int gid, int[] gids, int debugFlags,
int[][] rlimits, long permittedCapabilities, long effectiveCapabilities);
/**
* Zygote unmount storage space on initializing.
* This method is called once.
*/
native protected static void nativeUnmountStorageOnInit();
private static void callPostForkChildHooks(int debugFlags, boolean isSystemServer,
String instructionSet) {
VM_HOOKS.postForkChild(debugFlags, isSystemServer, instructionSet);

View File

@@ -621,6 +621,9 @@ public class ZygoteInit {
// Zygote.
Trace.setTracingEnabled(false);
// Zygote process unmounts root storage spaces.
Zygote.nativeUnmountStorageOnInit();
if (startSystemServer) {
startSystemServer(abiList, socketName);
}

View File

@@ -302,9 +302,6 @@ static bool MountEmulatedStorage(uid_t uid, jint mount_mode,
return false;
}
// Unmount storage provided by root namespace and mount requested view
UnmountTree("/storage");
String8 storageSource;
if (mount_mode == MOUNT_EXTERNAL_DEFAULT) {
storageSource = "/mnt/runtime/default";
@@ -663,12 +660,24 @@ static jint com_android_internal_os_Zygote_nativeForkSystemServer(
return pid;
}
static void com_android_internal_os_Zygote_nativeUnmountStorageOnInit(JNIEnv* env, jclass) {
// Zygote process unmount root storage space initially before every child processes are forked.
// Every forked child processes (include SystemServer) only mount their own root storage space
// And no need unmount storage operation in MountEmulatedStorage method.
// Zygote process does not utilize root storage spaces and unshared its mount namespace from the ART.
UnmountTree("/storage");
return;
}
static const JNINativeMethod gMethods[] = {
{ "nativeForkAndSpecialize",
"(II[II[[IILjava/lang/String;Ljava/lang/String;[ILjava/lang/String;Ljava/lang/String;)I",
(void *) com_android_internal_os_Zygote_nativeForkAndSpecialize },
{ "nativeForkSystemServer", "(II[II[[IJJ)I",
(void *) com_android_internal_os_Zygote_nativeForkSystemServer }
(void *) com_android_internal_os_Zygote_nativeForkSystemServer },
{ "nativeUnmountStorageOnInit", "()V",
(void *) com_android_internal_os_Zygote_nativeUnmountStorageOnInit }
};
int register_com_android_internal_os_Zygote(JNIEnv* env) {