diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2021-12-08 08:43:32 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-12-08 08:43:32 +0000 |
commit | 344c737ba0aa081b67043f36f51b2aefae5dfc30 (patch) | |
tree | c1678fbd444d906969a8daa3fc4214eee4beef61 | |
parent | 64a5600c83962b2425bc8dd28db7d73eea8e4acd (diff) | |
parent | e8d0e486a39ee07765c7f757ea3c1119bdf4726b (diff) | |
download | vold-temp-sc-sam.tar.gz |
Merge "Remove StubVolume disks upon vold reset events" am: e8d0e486a3temp_sam_210511427temp-sc-sam
Original change: https://android-review.googlesource.com/c/platform/system/vold/+/1902674
Change-Id: Id6edfe90aadae4db1b23c5bc0de4981170ba42f2
-rw-r--r-- | VolumeManager.cpp | 13 | ||||
-rw-r--r-- | model/Disk.h | 4 |
2 files changed, 14 insertions, 3 deletions
diff --git a/VolumeManager.cpp b/VolumeManager.cpp index 02025b74..93113215 100644 --- a/VolumeManager.cpp +++ b/VolumeManager.cpp @@ -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(); diff --git a/model/Disk.h b/model/Disk.h index 16476dce..8c75f59b 100644 --- a/model/Disk.h +++ b/model/Disk.h @@ -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); }; |