From 23850d30f60aa8deb1aa43f03eda277a92739570 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Wed, 10 Jun 2020 23:51:17 -0700 Subject: [PATCH] Add an isCheckpointing() binder call for adb remount. This is needed so "adb remount" can avoid writing to /data during a checkpoint. Bug: 157540389 Test: manual test Change-Id: I33a691da3b99343acfc1e8ddf68a14504c3bfbe1 --- Checkpoint.cpp | 4 ++++ Checkpoint.h | 2 ++ VoldNativeService.cpp | 8 ++++++++ VoldNativeService.h | 1 + binder/android/os/IVold.aidl | 1 + 5 files changed, 16 insertions(+) diff --git a/Checkpoint.cpp b/Checkpoint.cpp index df5fc88..61035e5 100644 --- a/Checkpoint.cpp +++ b/Checkpoint.cpp @@ -294,6 +294,10 @@ bool cp_needsCheckpoint() { return false; } +bool cp_isCheckpointing() { + return isCheckpointing; +} + namespace { const std::string kSleepTimeProp = "ro.sys.cp_msleeptime"; const uint32_t msleeptime_default = 1000; // 1 s diff --git a/Checkpoint.h b/Checkpoint.h index c1fb2b7..6f3acac 100644 --- a/Checkpoint.h +++ b/Checkpoint.h @@ -39,6 +39,8 @@ bool cp_needsRollback(); bool cp_needsCheckpoint(); +bool cp_isCheckpointing(); + android::binder::Status cp_prepareCheckpoint(); android::binder::Status cp_restoreCheckpoint(const std::string& mountPoint, int count = 0); diff --git a/VoldNativeService.cpp b/VoldNativeService.cpp index ee76518..be8e67c 100644 --- a/VoldNativeService.cpp +++ b/VoldNativeService.cpp @@ -778,6 +778,14 @@ binder::Status VoldNativeService::needsCheckpoint(bool* _aidl_return) { return Ok(); } +binder::Status VoldNativeService::isCheckpointing(bool* _aidl_return) { + ENFORCE_SYSTEM_OR_ROOT; + ACQUIRE_LOCK; + + *_aidl_return = cp_isCheckpointing(); + return Ok(); +} + binder::Status VoldNativeService::commitChanges() { ENFORCE_SYSTEM_OR_ROOT; ACQUIRE_LOCK; diff --git a/VoldNativeService.h b/VoldNativeService.h index 4578dc0..7065b04 100644 --- a/VoldNativeService.h +++ b/VoldNativeService.h @@ -133,6 +133,7 @@ class VoldNativeService : public BinderService, public os::Bn binder::Status startCheckpoint(int32_t retry); binder::Status needsCheckpoint(bool* _aidl_return); binder::Status needsRollback(bool* _aidl_return); + binder::Status isCheckpointing(bool* _aidl_return); binder::Status commitChanges(); binder::Status prepareCheckpoint(); binder::Status restoreCheckpoint(const std::string& mountPoint); diff --git a/binder/android/os/IVold.aidl b/binder/android/os/IVold.aidl index 63a30e4..12c00e4 100644 --- a/binder/android/os/IVold.aidl +++ b/binder/android/os/IVold.aidl @@ -110,6 +110,7 @@ interface IVold { void startCheckpoint(int retry); boolean needsCheckpoint(); boolean needsRollback(); + boolean isCheckpointing(); void abortChanges(in @utf8InCpp String device, boolean retry); void commitChanges(); void prepareCheckpoint();