summaryrefslogtreecommitdiff
path: root/VolumeManager.cpp
diff options
context:
space:
mode:
authorAlistair Delva <adelva@google.com>2020-05-14 16:35:03 -0700
committerdoc HD <doc.divxm@gmail.com>2020-06-06 23:33:55 +0300
commitd8999d77d60b933ada9098569bd38e6181bcafbd (patch)
treea60bd2895599cb465ec604bdc493fd969b964c97 /VolumeManager.cpp
parent420ae89c626ddea6e63362f5627abfe580d4e45b (diff)
Expand virtio_block check to other virtual devicesHEADq10.0
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.cpp11
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;