Merge "Remove StubVolume disks upon vold reset events" am: e8d0e486a3 am: 344c737ba0 am: 7e3abf6c3e am: c9bb1e5290

Original change: https://android-review.googlesource.com/c/platform/system/vold/+/1902674

Change-Id: I9e857de9fd50435df21ffcce7074a7fcb959c98c
This commit is contained in:
Treehugger Robot 2021-12-08 09:27:39 +00:00 committed by Automerger Merge Worker
commit 95436f8eb7
2 changed files with 14 additions and 3 deletions

View file

@ -899,10 +899,21 @@ int VolumeManager::reset() {
}
mInternalEmulatedVolumes.clear();
// Destroy and recreate all disks except that StubVolume disks are just
// destroyed and removed from both mDisks and mPendingDisks.
// StubVolumes are managed from outside Android (e.g. from Chrome OS) and
// their disk recreation on reset events should be handled from outside by
// calling createStubVolume() again.
for (const auto& disk : mDisks) {
disk->destroy();
disk->create();
if (!disk->isStub()) {
disk->create();
}
}
const auto isStub = [](const auto& disk) { return disk->isStub(); };
mDisks.remove_if(isStub);
mPendingDisks.remove_if(isStub);
updateVirtualDisk();
mAddedUsers.clear();
mStartedUsers.clear();

View file

@ -70,6 +70,8 @@ class Disk {
const std::string& getLabel() const { return mLabel; }
int getFlags() const { return mFlags; }
bool isStub() const { return (mFlags & kStubInvisible) || (mFlags & kStubVisible); }
std::shared_ptr<VolumeBase> findVolume(const std::string& id);
void listVolumes(VolumeBase::Type type, std::list<std::string>& list) const;
@ -123,8 +125,6 @@ class Disk {
int getMaxMinors();
bool isStub() { return (mFlags & kStubInvisible) || (mFlags & kStubVisible); }
DISALLOW_COPY_AND_ASSIGN(Disk);
};