summaryrefslogtreecommitdiffstats
path: root/install/snapshot_utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'install/snapshot_utils.cpp')
-rw-r--r--install/snapshot_utils.cpp25
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;
+}