diff options
| author | Alistair Delva <adelva@google.com> | 2020-05-14 16:35:03 -0700 |
|---|---|---|
| committer | doc HD <doc.divxm@gmail.com> | 2020-06-06 23:33:55 +0300 |
| commit | d8999d77d60b933ada9098569bd38e6181bcafbd (patch) | |
| tree | a60bd2895599cb465ec604bdc493fd969b964c97 /VolumeManager.cpp | |
| parent | 420ae89c626ddea6e63362f5627abfe580d4e45b (diff) | |
The Android Emulator isn't the only virtual device the virtio-block
detection code is useful for, and those platforms might not set any
discriminating properties to indicate that they are virtual.
Rework the virtio-block major detection to use /proc/devices instead
of hardcoding the assumption that any virtual platform can have
virtio-block at any experimental major; the new code permits only the
exact experimental major assigned to virtio-block.
The new code runs everywhere, but it will only run once and could be
expanded later to detect dynamic or experimental majors.
Bug: 156286088
Change-Id: Ieae805d08fddd0124a397636f04d99194a9ef7e5
Merged-In: Ieae805d08fddd0124a397636f04d99194a9ef7e5
(cherry picked from commit d3c230b5c9ba6e242c0a6b290a185517f2c118e8)
Diffstat (limited to 'VolumeManager.cpp')
| -rw-r--r-- | VolumeManager.cpp | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/VolumeManager.cpp b/VolumeManager.cpp index 2435819..7573877 100644 --- a/VolumeManager.cpp +++ b/VolumeManager.cpp @@ -79,6 +79,7 @@ using android::vold::BindMount; using android::vold::CreateDir; using android::vold::DeleteDirContents; using android::vold::DeleteDirContentsAndDir; +using android::vold::IsVirtioBlkDevice; using android::vold::Symlink; using android::vold::Unlink; using android::vold::UnmountTree; @@ -95,8 +96,6 @@ static const std::string kEmptyString(""); static const unsigned int kSizeVirtualDisk = 536870912; static const unsigned int kMajorBlockMmc = 179; -static const unsigned int kMajorBlockExperimentalMin = 240; -static const unsigned int kMajorBlockExperimentalMax = 254; VolumeManager* VolumeManager::sInstance = NULL; @@ -215,12 +214,10 @@ void VolumeManager::handleBlockEvent(NetlinkEvent* evt) { for (const auto& source : mDiskSources) { if (source->matches(eventPath)) { // For now, assume that MMC and virtio-blk (the latter is - // emulator-specific; see Disk.cpp for details) devices are SD, - // and that everything else is USB + // specific to virtual platforms; see Utils.cpp for details) + // devices are SD, and that everything else is USB int flags = source->getFlags(); - if (major == kMajorBlockMmc || (android::vold::IsRunningInEmulator() && - major >= (int)kMajorBlockExperimentalMin && - major <= (int)kMajorBlockExperimentalMax)) { + if (major == kMajorBlockMmc || IsVirtioBlkDevice(major)) { flags |= android::vold::Disk::Flags::kSd; } else if (eventPath.find("ufs") != std::string::npos) { flags |= android::vold::Disk::Flags::kSd; |
