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
Merged-In: I33a691da3b99343acfc1e8ddf68a14504c3bfbe1
This commit is contained in:
David Anderson 2020-06-10 23:51:17 -07:00
parent bcd7d5e7ce
commit 7e07c53aab
5 changed files with 16 additions and 0 deletions

View file

@ -294,6 +294,10 @@ bool cp_needsCheckpoint() {
return false; return false;
} }
bool cp_isCheckpointing() {
return isCheckpointing;
}
namespace { namespace {
const std::string kSleepTimeProp = "ro.sys.cp_msleeptime"; const std::string kSleepTimeProp = "ro.sys.cp_msleeptime";
const uint32_t msleeptime_default = 1000; // 1 s const uint32_t msleeptime_default = 1000; // 1 s

View file

@ -39,6 +39,8 @@ bool cp_needsRollback();
bool cp_needsCheckpoint(); bool cp_needsCheckpoint();
bool cp_isCheckpointing();
android::binder::Status cp_prepareCheckpoint(); android::binder::Status cp_prepareCheckpoint();
android::binder::Status cp_restoreCheckpoint(const std::string& mountPoint, int count = 0); android::binder::Status cp_restoreCheckpoint(const std::string& mountPoint, int count = 0);

View file

@ -809,6 +809,14 @@ binder::Status VoldNativeService::needsCheckpoint(bool* _aidl_return) {
return Ok(); 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() { binder::Status VoldNativeService::commitChanges() {
ENFORCE_SYSTEM_OR_ROOT; ENFORCE_SYSTEM_OR_ROOT;
ACQUIRE_LOCK; ACQUIRE_LOCK;

View file

@ -139,6 +139,7 @@ class VoldNativeService : public BinderService<VoldNativeService>, public os::Bn
binder::Status startCheckpoint(int32_t retry); binder::Status startCheckpoint(int32_t retry);
binder::Status needsCheckpoint(bool* _aidl_return); binder::Status needsCheckpoint(bool* _aidl_return);
binder::Status needsRollback(bool* _aidl_return); binder::Status needsRollback(bool* _aidl_return);
binder::Status isCheckpointing(bool* _aidl_return);
binder::Status commitChanges(); binder::Status commitChanges();
binder::Status prepareCheckpoint(); binder::Status prepareCheckpoint();
binder::Status restoreCheckpoint(const std::string& mountPoint); binder::Status restoreCheckpoint(const std::string& mountPoint);

View file

@ -115,6 +115,7 @@ interface IVold {
void startCheckpoint(int retry); void startCheckpoint(int retry);
boolean needsCheckpoint(); boolean needsCheckpoint();
boolean needsRollback(); boolean needsRollback();
boolean isCheckpointing();
void abortChanges(in @utf8InCpp String device, boolean retry); void abortChanges(in @utf8InCpp String device, boolean retry);
void commitChanges(); void commitChanges();
void prepareCheckpoint(); void prepareCheckpoint();