Merge "libsnapshot: fix incorrect assumption of cow images" into rvc-dev
This commit is contained in:
commit
8601d37213
2 changed files with 26 additions and 4 deletions
|
|
@ -540,6 +540,10 @@ class SnapshotManager final {
|
||||||
bool ProcessUpdateStateOnDataWipe(bool allow_forward_merge,
|
bool ProcessUpdateStateOnDataWipe(bool allow_forward_merge,
|
||||||
const std::function<bool()>& callback);
|
const std::function<bool()>& callback);
|
||||||
|
|
||||||
|
// Return device string of a mapped image, or if it is not available, the mapped image path.
|
||||||
|
bool GetMappedImageDeviceStringOrPath(const std::string& device_name,
|
||||||
|
std::string* device_string_or_mapped_path);
|
||||||
|
|
||||||
std::string gsid_dir_;
|
std::string gsid_dir_;
|
||||||
std::string metadata_dir_;
|
std::string metadata_dir_;
|
||||||
std::unique_ptr<IDeviceInfo> device_;
|
std::unique_ptr<IDeviceInfo> device_;
|
||||||
|
|
|
||||||
|
|
@ -1691,7 +1691,7 @@ bool SnapshotManager::MapPartitionWithSnapshot(LockedFile* lock,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
std::string cow_device;
|
std::string cow_device;
|
||||||
if (!dm.GetDeviceString(cow_name, &cow_device)) {
|
if (!GetMappedImageDeviceStringOrPath(cow_name, &cow_device)) {
|
||||||
LOG(ERROR) << "Could not determine major/minor for: " << cow_name;
|
LOG(ERROR) << "Could not determine major/minor for: " << cow_name;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -1788,7 +1788,7 @@ bool SnapshotManager::MapCowDevices(LockedFile* lock, const CreateLogicalPartiti
|
||||||
// If the COW image exists, append it as the last extent.
|
// If the COW image exists, append it as the last extent.
|
||||||
if (snapshot_status.cow_file_size() > 0) {
|
if (snapshot_status.cow_file_size() > 0) {
|
||||||
std::string cow_image_device;
|
std::string cow_image_device;
|
||||||
if (!dm.GetDeviceString(cow_image_name, &cow_image_device)) {
|
if (!GetMappedImageDeviceStringOrPath(cow_image_name, &cow_image_device)) {
|
||||||
LOG(ERROR) << "Cannot determine major/minor for: " << cow_image_name;
|
LOG(ERROR) << "Cannot determine major/minor for: " << cow_image_name;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -2364,7 +2364,6 @@ Return SnapshotManager::InitializeUpdateSnapshots(
|
||||||
const std::map<std::string, SnapshotStatus>& all_snapshot_status) {
|
const std::map<std::string, SnapshotStatus>& all_snapshot_status) {
|
||||||
CHECK(lock);
|
CHECK(lock);
|
||||||
|
|
||||||
auto& dm = DeviceMapper::Instance();
|
|
||||||
CreateLogicalPartitionParams cow_params{
|
CreateLogicalPartitionParams cow_params{
|
||||||
.block_device = LP_METADATA_DEFAULT_PARTITION_NAME,
|
.block_device = LP_METADATA_DEFAULT_PARTITION_NAME,
|
||||||
.metadata = exported_target_metadata,
|
.metadata = exported_target_metadata,
|
||||||
|
|
@ -2389,7 +2388,7 @@ Return SnapshotManager::InitializeUpdateSnapshots(
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string cow_path;
|
std::string cow_path;
|
||||||
if (!dm.GetDmDevicePathByName(cow_name, &cow_path)) {
|
if (!images_->GetMappedImageDevice(cow_name, &cow_path)) {
|
||||||
LOG(ERROR) << "Cannot determine path for " << cow_name;
|
LOG(ERROR) << "Cannot determine path for " << cow_name;
|
||||||
return Return::Error();
|
return Return::Error();
|
||||||
}
|
}
|
||||||
|
|
@ -2738,5 +2737,24 @@ bool SnapshotManager::UpdateForwardMergeIndicator(bool wipe) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SnapshotManager::GetMappedImageDeviceStringOrPath(const std::string& device_name,
|
||||||
|
std::string* device_string_or_mapped_path) {
|
||||||
|
auto& dm = DeviceMapper::Instance();
|
||||||
|
// Try getting the device string if it is a device mapper device.
|
||||||
|
if (dm.GetState(device_name) != DmDeviceState::INVALID) {
|
||||||
|
return dm.GetDeviceString(device_name, device_string_or_mapped_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, get path from IImageManager.
|
||||||
|
if (!images_->GetMappedImageDevice(device_name, device_string_or_mapped_path)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG(WARNING) << "Calling GetMappedImageDevice with local image manager; device "
|
||||||
|
<< (device_string_or_mapped_path ? *device_string_or_mapped_path : "(nullptr)")
|
||||||
|
<< "may not be available in first stage init! ";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace snapshot
|
} // namespace snapshot
|
||||||
} // namespace android
|
} // namespace android
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue