diff options
author | Justin DeMartino <jjdemartino@google.com> | 2020-10-14 19:39:53 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-10-14 19:39:53 +0000 |
commit | 0d11af03e43f110b0bb160f7e20436d0043e3038 (patch) | |
tree | 48f8bcca856276ec73a86dd3fb26143d3ca64578 /fs_mgr/libfiemap/image_manager.cpp | |
parent | 075666ebd0dee8d0c4a2efa54f7c324a3f67ee2a (diff) | |
parent | a6c01e4e98d2b343dcecfc99611e2e6250c730db (diff) |
Merge changes from topic "SP1A.200921.001" into s-keystone-qcom-dev
* changes:
fs_mgr: adb-remount-test.sh: filter out more administrivia mounts.
Merge SP1A.200921.001 Change-Id: I90b97c4e9fb10b1f45e74def404823eed5b1aaa8
Diffstat (limited to 'fs_mgr/libfiemap/image_manager.cpp')
-rw-r--r-- | fs_mgr/libfiemap/image_manager.cpp | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/fs_mgr/libfiemap/image_manager.cpp b/fs_mgr/libfiemap/image_manager.cpp index 3ee742f5e..93fc1316f 100644 --- a/fs_mgr/libfiemap/image_manager.cpp +++ b/fs_mgr/libfiemap/image_manager.cpp @@ -136,13 +136,13 @@ bool ImageManager::BackingImageExists(const std::string& name) { return !!FindPartition(*metadata.get(), name); } -static bool IsTestDir(const std::string& path) { - return android::base::StartsWith(path, kTestImageMetadataDir) || - android::base::StartsWith(path, kOtaTestImageMetadataDir); +bool ImageManager::MetadataDirIsTest() const { + return IsSubdir(metadata_dir_, kTestImageMetadataDir) || + IsSubdir(metadata_dir_, kOtaTestImageMetadataDir); } -static bool IsUnreliablePinningAllowed(const std::string& path) { - return android::base::StartsWith(path, "/data/gsi/dsu/") || IsTestDir(path); +bool ImageManager::IsUnreliablePinningAllowed() const { + return IsSubdir(data_dir_, "/data/gsi/dsu/") || MetadataDirIsTest(); } FiemapStatus ImageManager::CreateBackingImage( @@ -159,7 +159,7 @@ FiemapStatus ImageManager::CreateBackingImage( if (!FilesystemHasReliablePinning(data_path, &reliable_pinning)) { return FiemapStatus::Error(); } - if (!reliable_pinning && !IsUnreliablePinningAllowed(data_path)) { + if (!reliable_pinning && !IsUnreliablePinningAllowed()) { // For historical reasons, we allow unreliable pinning for certain use // cases (DSUs, testing) because the ultimate use case is either // developer-oriented or ephemeral (the intent is to boot immediately @@ -178,7 +178,7 @@ FiemapStatus ImageManager::CreateBackingImage( // if device-mapper is stacked in some complex way not supported by // FiemapWriter. auto device_path = GetDevicePathForFile(fw.get()); - if (android::base::StartsWith(device_path, "/dev/block/dm-") && !IsTestDir(metadata_dir_)) { + if (android::base::StartsWith(device_path, "/dev/block/dm-") && !MetadataDirIsTest()) { LOG(ERROR) << "Cannot persist images against device-mapper device: " << device_path; fw = {}; @@ -640,16 +640,22 @@ bool ImageManager::Validate() { return false; } + bool ok = true; for (const auto& partition : metadata->partitions) { auto name = GetPartitionName(partition); auto image_path = GetImageHeaderPath(name); auto fiemap = SplitFiemap::Open(image_path); - if (!fiemap || !fiemap->HasPinnedExtents()) { - LOG(ERROR) << "Image is missing or was moved: " << image_path; - return false; + if (fiemap == nullptr) { + LOG(ERROR) << "SplitFiemap::Open(\"" << image_path << "\") failed"; + ok = false; + continue; + } + if (!fiemap->HasPinnedExtents()) { + LOG(ERROR) << "Image doesn't have pinned extents: " << image_path; + ok = false; } } - return true; + return ok; } bool ImageManager::DisableImage(const std::string& name) { |