Mount /metadata in sideload.
In recovery, /metadata needs to be mounted before doing
any updates (even regular ones) on VAB device.
Test: sideload
Bug: 140749209
Change-Id: Iad8ef63c572b7b6d3ad8be5ee7ec11001b337435
diff --git a/dynamic_partition_control_android.cc b/dynamic_partition_control_android.cc
index e194670..f017c9f 100644
--- a/dynamic_partition_control_android.cc
+++ b/dynamic_partition_control_android.cc
@@ -213,6 +213,7 @@
}
void DynamicPartitionControlAndroid::CleanupInternal(bool wait) {
+ metadata_device_.reset();
if (mapped_devices_.empty()) {
return;
}
@@ -356,6 +357,11 @@
target_supports_snapshot_ =
manifest.dynamic_partition_metadata().snapshot_enabled();
+ if (GetVirtualAbFeatureFlag().IsEnabled()) {
+ metadata_device_ = snapshot_->EnsureMetadataMounted();
+ TEST_AND_RETURN_FALSE(metadata_device_ != nullptr);
+ }
+
if (!update)
return true;
diff --git a/dynamic_partition_control_android.h b/dynamic_partition_control_android.h
index d70a2aa..8f45682 100644
--- a/dynamic_partition_control_android.h
+++ b/dynamic_partition_control_android.h
@@ -23,6 +23,7 @@
#include <set>
#include <string>
+#include <libsnapshot/auto_device.h>
#include <libsnapshot/snapshot.h>
namespace chromeos_update_engine {
@@ -115,6 +116,7 @@
const FeatureFlag dynamic_partitions_;
const FeatureFlag virtual_ab_;
std::unique_ptr<android::snapshot::SnapshotManager> snapshot_;
+ std::unique_ptr<android::snapshot::AutoDevice> metadata_device_;
bool target_supports_snapshot_ = false;
DISALLOW_COPY_AND_ASSIGN(DynamicPartitionControlAndroid);