From 67cd9f09ca2dcc31c1cd2772bc66ac920ea50a29 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Wed, 8 Jul 2020 13:46:50 -0700 Subject: [PATCH] init: Initiate other misc devices from BlockDevInitializer. This allows init to easily ensure misc devices other than device-mapper are present. Bug: 154536437 Test: manual test Change-Id: I49495684edee322f9787ce7ab7f79d0e8060171d --- init/block_dev_initializer.cpp | 16 ++++++++++++---- init/block_dev_initializer.h | 3 +++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/init/block_dev_initializer.cpp b/init/block_dev_initializer.cpp index b423f864e..8db9793f5 100644 --- a/init/block_dev_initializer.cpp +++ b/init/block_dev_initializer.cpp @@ -37,7 +37,15 @@ BlockDevInitializer::BlockDevInitializer() : uevent_listener_(16 * 1024 * 1024) } bool BlockDevInitializer::InitDeviceMapper() { - const std::string dm_path = "/devices/virtual/misc/device-mapper"; + return InitMiscDevice("device-mapper"); +} + +bool BlockDevInitializer::InitDmUser() { + return InitMiscDevice("dm-user"); +} + +bool BlockDevInitializer::InitMiscDevice(const std::string& name) { + const std::string dm_path = "/devices/virtual/misc/" + name; bool found = false; auto dm_callback = [this, &dm_path, &found](const Uevent& uevent) { if (uevent.path == dm_path) { @@ -49,13 +57,13 @@ bool BlockDevInitializer::InitDeviceMapper() { }; uevent_listener_.RegenerateUeventsForPath("/sys" + dm_path, dm_callback); if (!found) { - LOG(INFO) << "device-mapper device not found in /sys, waiting for its uevent"; + LOG(INFO) << name << " device not found in /sys, waiting for its uevent"; Timer t; uevent_listener_.Poll(dm_callback, 10s); - LOG(INFO) << "Wait for device-mapper returned after " << t; + LOG(INFO) << "Wait for " << name << " returned after " << t; } if (!found) { - LOG(ERROR) << "device-mapper device not found after polling timeout"; + LOG(ERROR) << name << " device not found after polling timeout"; return false; } return true; diff --git a/init/block_dev_initializer.h b/init/block_dev_initializer.h index 0d4c6e9fc..b8dd3f172 100644 --- a/init/block_dev_initializer.h +++ b/init/block_dev_initializer.h @@ -27,12 +27,15 @@ class BlockDevInitializer final { BlockDevInitializer(); bool InitDeviceMapper(); + bool InitDmUser(); bool InitDevices(std::set devices); bool InitDmDevice(const std::string& device); private: ListenerAction HandleUevent(const Uevent& uevent, std::set* devices); + bool InitMiscDevice(const std::string& name); + std::unique_ptr device_handler_; UeventListener uevent_listener_; };