Merge "UserDataPreparer: fix volume preparation order" am: 0c0888da1d am: 5e3ed2720b

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2086485

Change-Id: I76754f1dcf1f563cf7650571e83ecf99e074df53
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Eric Biggers
2022-05-04 20:12:39 +00:00
committed by Automerger Merge Worker

View File

@@ -70,9 +70,16 @@ class UserDataPreparer {
void prepareUserData(int userId, int userSerial, int flags) {
synchronized (mInstallLock) {
final StorageManager storage = mContext.getSystemService(StorageManager.class);
/*
* Internal storage must be prepared before adoptable storage, since the user's volume
* keys are stored in their internal storage.
*/
prepareUserDataLI(null /* internal storage */, userId, userSerial, flags, true);
for (VolumeInfo vol : storage.getWritablePrivateVolumes()) {
final String volumeUuid = vol.getFsUuid();
prepareUserDataLI(volumeUuid, userId, userSerial, flags, true);
if (volumeUuid != null) {
prepareUserDataLI(volumeUuid, userId, userSerial, flags, true);
}
}
}
}
@@ -136,10 +143,17 @@ class UserDataPreparer {
void destroyUserData(int userId, int flags) {
synchronized (mInstallLock) {
final StorageManager storage = mContext.getSystemService(StorageManager.class);
/*
* Volume destruction order isn't really important, but to avoid any weird issues we
* process internal storage last, the opposite of prepareUserData.
*/
for (VolumeInfo vol : storage.getWritablePrivateVolumes()) {
final String volumeUuid = vol.getFsUuid();
destroyUserDataLI(volumeUuid, userId, flags);
if (volumeUuid != null) {
destroyUserDataLI(volumeUuid, userId, flags);
}
}
destroyUserDataLI(null /* internal storage */, userId, flags);
}
}