Revert^2 "init: Look for super partition only on a boot device"

This reverts commit 8d71220df2.

Reason for revert: Fix for gcar emulator (basically all QEMU-based emulators) landed at aosp/3315253 and aosp/3160116.

Change-Id: If4eddd3f7e224c31019ad3bd752e2375c7567780
This commit is contained in:
Konrad Adamczyk 2024-10-24 07:28:25 +00:00 committed by Gerrit Code Review
parent 8d71220df2
commit 5bfb93678f
3 changed files with 28 additions and 1 deletions

View file

@ -98,7 +98,11 @@ ListenerAction BlockDevInitializer::HandleUevent(const Uevent& uevent,
LOG(VERBOSE) << __PRETTY_FUNCTION__ << ": found partition: " << name;
devices->erase(iter);
// Remove partition from the list only if it was found on boot device
if (device_handler_->IsBootDevice(uevent)) {
devices->erase(iter);
}
device_handler_->HandleUevent(uevent);
return devices->empty() ? ListenerAction::kStop : ListenerAction::kContinue;
}

View file

@ -188,6 +188,28 @@ void SysfsPermissions::SetPermissions(const std::string& path) const {
}
}
bool DeviceHandler::IsBootDevice(const Uevent& uevent) const {
std::string device;
if (FindPlatformDevice(uevent.path, &device)) {
// Skip /devices/platform or /devices/ if present
static constexpr std::string_view devices_platform_prefix = "/devices/platform/";
static constexpr std::string_view devices_prefix = "/devices/";
if (StartsWith(device, devices_platform_prefix)) {
device = device.substr(devices_platform_prefix.length());
} else if (StartsWith(device, devices_prefix)) {
device = device.substr(devices_prefix.length());
}
} else if (FindPciDevicePrefix(uevent.path, &device)) {
} else if (FindVbdDevicePrefix(uevent.path, &device)) {
} else {
return false;
}
return boot_devices_.find(device) != boot_devices_.end();
}
std::string DeviceHandler::GetPartitionNameForDevice(const std::string& query_device) {
static const auto partition_map = [] {
std::vector<std::pair<std::string, std::string>> partition_map;

View file

@ -133,6 +133,7 @@ class DeviceHandler : public UeventHandler {
// `androidboot.partition_map=vdb,metadata;vdc,userdata` maps `vdb` to `metadata` and `vdc` to
// `userdata`.
static std::string GetPartitionNameForDevice(const std::string& device);
bool IsBootDevice(const Uevent& uevent) const;
private:
void ColdbootDone() override;