diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2020-01-07 21:26:43 +0100 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-01-07 21:26:43 +0100 |
commit | 5ee782079adc054c8402ffd2254e59e3285b1204 (patch) | |
tree | 75518fe845376382f12a8ee70691a1cf0c00c387 /install/snapshot_utils.cpp | |
parent | Merge "Link libvndksupport dynamically instead of statically." (diff) | |
parent | Mount snapshotted /system in Virtual A/B devices (diff) | |
download | android_bootable_recovery-5ee782079adc054c8402ffd2254e59e3285b1204.tar android_bootable_recovery-5ee782079adc054c8402ffd2254e59e3285b1204.tar.gz android_bootable_recovery-5ee782079adc054c8402ffd2254e59e3285b1204.tar.bz2 android_bootable_recovery-5ee782079adc054c8402ffd2254e59e3285b1204.tar.lz android_bootable_recovery-5ee782079adc054c8402ffd2254e59e3285b1204.tar.xz android_bootable_recovery-5ee782079adc054c8402ffd2254e59e3285b1204.tar.zst android_bootable_recovery-5ee782079adc054c8402ffd2254e59e3285b1204.zip |
Diffstat (limited to 'install/snapshot_utils.cpp')
-rw-r--r-- | install/snapshot_utils.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/install/snapshot_utils.cpp b/install/snapshot_utils.cpp index 69da5eea0..7235e67c8 100644 --- a/install/snapshot_utils.cpp +++ b/install/snapshot_utils.cpp @@ -15,6 +15,7 @@ * limitations under the License. */ +#include <android-base/logging.h> #include <android-base/properties.h> #include <libsnapshot/snapshot.h> @@ -22,6 +23,7 @@ #include "recovery_ui/ui.h" #include "recovery_utils/roots.h" +using android::snapshot::CreateResult; using android::snapshot::SnapshotManager; bool FinishPendingSnapshotMerges(Device* device) { @@ -47,3 +49,26 @@ bool FinishPendingSnapshotMerges(Device* device) { } return true; } + +bool CreateSnapshotPartitions() { + if (!android::base::GetBoolProperty("ro.virtual_ab.enabled", false)) { + // If the device does not support Virtual A/B, there's no need to create + // snapshot devices. + return true; + } + + auto sm = SnapshotManager::NewForFirstStageMount(); + if (!sm) { + // SnapshotManager could not be created. The device is still in a + // consistent state and can continue with the mounting of the existing + // devices, but cannot initialize snapshot devices. + LOG(WARNING) << "Could not create SnapshotManager"; + return true; + } + + auto ret = sm->RecoveryCreateSnapshotDevices(); + if (ret == CreateResult::ERROR) { + return false; + } + return true; +} |