diff options
| author | 2022-07-12 08:10:22 +0000 | |
|---|---|---|
| committer | 2022-12-07 08:59:10 +0000 | |
| commit | e9e8dbc7df20e4a3da13e2553723b668d49ba2ca (patch) | |
| tree | 9531d9d80338f574bbe70501413aca08ffb7768b | |
| parent | 8ff4152a9c3a7a19795131667a7b6bda1974e87d (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.java | 16 |
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); |