summaryrefslogtreecommitdiff
path: root/payload_consumer/filesystem_verifier_action.cc
diff options
context:
space:
mode:
authorAndroid Build Role Account android-build-prod <android-build-team-robot@google.com>2021-05-15 10:07:22 +0000
committerAndroid Build Role Account android-build-prod <android-build-team-robot@google.com>2021-05-15 10:07:22 +0000
commitac7fc8e1debff1f57afe79f144d8d16a1a0ec470 (patch)
tree01ec931931503ed80f181b2d85efb5df0079e4ba /payload_consumer/filesystem_verifier_action.cc
parent5d3613e99ec327d2ba487cc00de13b334618886f (diff)
parentf79cb91b4218a68642c94a01defc0594e742b3f4 (diff)
Snap for 7364285 from f79cb91b4218a68642c94a01defc0594e742b3f4 to s-keystone-qcom-release
Change-Id: I485b5b774533322ed4c78c3ceec5f945ea21b582
Diffstat (limited to 'payload_consumer/filesystem_verifier_action.cc')
-rw-r--r--payload_consumer/filesystem_verifier_action.cc23
1 files changed, 23 insertions, 0 deletions
diff --git a/payload_consumer/filesystem_verifier_action.cc b/payload_consumer/filesystem_verifier_action.cc
index 09dc638b..b14cbc8d 100644
--- a/payload_consumer/filesystem_verifier_action.cc
+++ b/payload_consumer/filesystem_verifier_action.cc
@@ -112,6 +112,14 @@ void FilesystemVerifierAction::Cleanup(ErrorCode code) {
// This memory is not used anymore.
buffer_.clear();
+ // If we didn't write verity, partitions were maped. Releaase resource now.
+ if (!install_plan_.write_verity &&
+ dynamic_control_->UpdateUsesSnapshotCompression()) {
+ LOG(INFO) << "Not writing verity and VABC is enabled, unmapping all "
+ "partitions";
+ dynamic_control_->UnmapAllPartitions();
+ }
+
if (cancelled_)
return;
if (code == ErrorCode::kSuccess && HasOutputPipe())
@@ -130,6 +138,21 @@ bool FilesystemVerifierAction::InitializeFdVABC() {
const InstallPlan::Partition& partition =
install_plan_.partitions[partition_index_];
+ if (!ShouldWriteVerity()) {
+ // In VABC, if we are not writing verity, just map all partitions,
+ // and read using regular fd on |postinstall_mount_device| .
+ // All read will go through snapuserd, which provides a consistent
+ // view: device will use snapuserd to read partition during boot.
+ // b/186196758
+ // Call UnmapAllPartitions() first, because if we wrote verity before, these
+ // writes won't be visible to previously opened snapuserd daemon. To ensure
+ // that we will see the most up to date data from partitions, call Unmap()
+ // then Map() to re-spin daemon.
+ dynamic_control_->UnmapAllPartitions();
+ dynamic_control_->MapAllPartitions();
+ return InitializeFd(partition.readonly_target_path);
+ }
+
// FilesystemVerifierAction need the read_fd_.
partition_fd_ =
dynamic_control_->OpenCowFd(partition.name, partition.source_path, true);