Merge "libfiemap: Add a way to get the block device path of a mapped image."
am: 31a35038a0
Change-Id: I143bcfe24cb22e1f36db3b47260ecdc895eb6b5e
This commit is contained in:
commit
fa61f9172a
|
@ -45,6 +45,7 @@ class ImageManagerBinder final : public IImageManager {
|
|||
bool RemoveAllImages() override;
|
||||
bool DisableImage(const std::string& name) override;
|
||||
bool RemoveDisabledImages() override;
|
||||
bool GetMappedImageDevice(const std::string& name, std::string* device) override;
|
||||
|
||||
std::vector<std::string> GetAllBackingImages() override;
|
||||
|
||||
|
@ -180,6 +181,16 @@ bool ImageManagerBinder::RemoveDisabledImages() {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool ImageManagerBinder::GetMappedImageDevice(const std::string& name, std::string* device) {
|
||||
auto status = manager_->getMappedImageDevice(name, device);
|
||||
if (!status.isOk()) {
|
||||
LOG(ERROR) << __PRETTY_FUNCTION__
|
||||
<< " binder returned: " << status.exceptionMessage().string();
|
||||
return false;
|
||||
}
|
||||
return !device->empty();
|
||||
}
|
||||
|
||||
static android::sp<IGsid> AcquireIGsid(const std::chrono::milliseconds& timeout_ms) {
|
||||
if (android::base::GetProperty("init.svc.gsid", "") != "running") {
|
||||
if (!android::base::SetProperty("ctl.start", "gsid") ||
|
||||
|
|
|
@ -648,11 +648,27 @@ bool ImageManager::RemoveDisabledImages() {
|
|||
|
||||
bool ok = true;
|
||||
for (const auto& partition : metadata->partitions) {
|
||||
ok &= DeleteBackingImage(GetPartitionName(partition));
|
||||
if (partition.attributes & LP_PARTITION_ATTR_DISABLED) {
|
||||
ok &= DeleteBackingImage(GetPartitionName(partition));
|
||||
}
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool ImageManager::GetMappedImageDevice(const std::string& name, std::string* device) {
|
||||
auto prop_name = GetStatusPropertyName(name);
|
||||
*device = android::base::GetProperty(prop_name, "");
|
||||
if (!device->empty()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
auto& dm = DeviceMapper::Instance();
|
||||
if (dm.GetState(name) == DmDeviceState::INVALID) {
|
||||
return false;
|
||||
}
|
||||
return dm.GetDmDevicePathByName(name, device);
|
||||
}
|
||||
|
||||
std::unique_ptr<MappedDevice> MappedDevice::Open(IImageManager* manager,
|
||||
const std::chrono::milliseconds& timeout_ms,
|
||||
const std::string& name) {
|
||||
|
|
|
@ -120,6 +120,17 @@ TEST_F(NativeTest, DisableImage) {
|
|||
ASSERT_TRUE(!manager_->BackingImageExists(base_name_));
|
||||
}
|
||||
|
||||
TEST_F(NativeTest, GetMappedImageDevice) {
|
||||
ASSERT_TRUE(manager_->CreateBackingImage(base_name_, kTestImageSize, false, nullptr));
|
||||
|
||||
std::string path1, path2;
|
||||
ASSERT_TRUE(manager_->MapImageDevice(base_name_, 5s, &path1));
|
||||
ASSERT_TRUE(manager_->GetMappedImageDevice(base_name_, &path2));
|
||||
EXPECT_EQ(path1, path2);
|
||||
|
||||
ASSERT_TRUE(manager_->UnmapImageDevice(base_name_));
|
||||
}
|
||||
|
||||
// This fixture is for tests against a simulated device environment. Rather
|
||||
// than use /data, we create an image and then layer a new filesystem within
|
||||
// it. Each test then decides how to mount and create layered images. This
|
||||
|
|
|
@ -84,6 +84,11 @@ class IImageManager {
|
|||
virtual bool MapImageWithDeviceMapper(const IPartitionOpener& opener, const std::string& name,
|
||||
std::string* dev) = 0;
|
||||
|
||||
// If an image was mapped, return the path to its device. Otherwise, return
|
||||
// false. Errors are not reported in this case, calling IsImageMapped is
|
||||
// not necessary.
|
||||
virtual bool GetMappedImageDevice(const std::string& name, std::string* device) = 0;
|
||||
|
||||
// Mark an image as disabled. This is useful for marking an image as
|
||||
// will-be-deleted in recovery, since recovery cannot mount /data.
|
||||
//
|
||||
|
@ -131,6 +136,7 @@ class ImageManager final : public IImageManager {
|
|||
bool RemoveAllImages() override;
|
||||
bool DisableImage(const std::string& name) override;
|
||||
bool RemoveDisabledImages() override;
|
||||
bool GetMappedImageDevice(const std::string& name, std::string* device) override;
|
||||
|
||||
std::vector<std::string> GetAllBackingImages();
|
||||
// Same as CreateBackingImage, but provides a progress notification.
|
||||
|
|
Loading…
Reference in New Issue