summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Martijn Coenen <maco@google.com> 2022-07-12 08:10:22 +0000
committer Martijn Coenen <maco@google.com> 2022-12-07 08:59:10 +0000
commite9e8dbc7df20e4a3da13e2553723b668d49ba2ca (patch)
tree9531d9d80338f574bbe70501413aca08ffb7768b
parent8ff4152a9c3a7a19795131667a7b6bda1974e87d (diff)
Tell vold about users sharing storage with each other.
In some cases (eg clone profiles), users can see each others volumes. Vold needs to know this information to setup a mount infrastructure that avoids page cache inconsistencies. Bug: 228271997 Test: manual Change-Id: Ie41bd3b52e105e8bb17f6d5985f00ed2a359bc1b
-rw-r--r--services/core/java/com/android/server/StorageManagerService.java16
1 files changed, 14 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java
index ec8745aa7371..76fef843ffe8 100644
--- a/services/core/java/com/android/server/StorageManagerService.java
+++ b/services/core/java/com/android/server/StorageManagerService.java
@@ -888,7 +888,15 @@ class StorageManagerService extends IStorageManager.Stub
if (Intent.ACTION_USER_ADDED.equals(action)) {
final UserManager um = mContext.getSystemService(UserManager.class);
final int userSerialNumber = um.getUserSerialNumber(userId);
- mVold.onUserAdded(userId, userSerialNumber);
+ final UserInfo userInfo = um.getUserInfo(userId);
+ if (userInfo.isCloneProfile()) {
+ // Only clone profiles share storage with their parent
+ mVold.onUserAdded(userId, userSerialNumber,
+ userInfo.profileGroupId /* sharesStorageWithUserId */);
+ } else {
+ mVold.onUserAdded(userId, userSerialNumber,
+ -1 /* shareStorageWithUserId */);
+ }
} else if (Intent.ACTION_USER_REMOVED.equals(action)) {
synchronized (mVolumes) {
final int size = mVolumes.size();
@@ -1137,7 +1145,11 @@ class StorageManagerService extends IStorageManager.Stub
// Tell vold about all existing and started users
for (UserInfo user : users) {
- mVold.onUserAdded(user.id, user.serialNumber);
+ if (user.isCloneProfile()) {
+ mVold.onUserAdded(user.id, user.serialNumber, user.profileGroupId);
+ } else {
+ mVold.onUserAdded(user.id, user.serialNumber, -1);
+ }
}
for (int userId : systemUnlockedUsers) {
mVold.onUserStarted(userId);