libsnapshot: Add a compression bit to SnapshotUpdateStatus.
This adds a compression bit to SnapshotUpdateStatus. This is so init can tell whether it needs to launch snapuserd, without reading the individual state of each snapshot, since this state is global. Bug: 173476209 Test: manual test Change-Id: I8c3bbfb0d184f70e661e7b043afc37e335d1e187
This commit is contained in:
parent
231cfc4fe6
commit
f71ad94e37
3 changed files with 18 additions and 2 deletions
|
@ -118,7 +118,7 @@ enum UpdateState {
|
|||
Cancelled = 7;
|
||||
};
|
||||
|
||||
// Next: 5
|
||||
// Next: 6
|
||||
message SnapshotUpdateStatus {
|
||||
UpdateState state = 1;
|
||||
|
||||
|
@ -133,6 +133,9 @@ message SnapshotUpdateStatus {
|
|||
|
||||
// Sectors allocated for metadata in all the snapshot devices.
|
||||
uint64 metadata_sectors = 4;
|
||||
|
||||
// Whether compression/dm-user was used for any snapshots.
|
||||
bool compression_enabled = 5;
|
||||
}
|
||||
|
||||
// Next: 4
|
||||
|
|
|
@ -353,6 +353,10 @@ class SnapshotManager final : public ISnapshotManager {
|
|||
uevent_regen_callback_ = callback;
|
||||
}
|
||||
|
||||
// If true, compression is enabled for this update. This is used by
|
||||
// first-stage to decide whether to launch snapuserd.
|
||||
bool IsSnapuserdRequired();
|
||||
|
||||
private:
|
||||
FRIEND_TEST(SnapshotTest, CleanFirstStageMount);
|
||||
FRIEND_TEST(SnapshotTest, CreateSnapshot);
|
||||
|
|
|
@ -2283,6 +2283,7 @@ SnapshotUpdateStatus SnapshotManager::ReadSnapshotUpdateStatus(LockedFile* lock)
|
|||
bool SnapshotManager::WriteUpdateState(LockedFile* lock, UpdateState state) {
|
||||
SnapshotUpdateStatus status = {};
|
||||
status.set_state(state);
|
||||
status.set_compression_enabled(IsCompressionEnabled());
|
||||
return WriteSnapshotUpdateStatus(lock, status);
|
||||
}
|
||||
|
||||
|
@ -2855,7 +2856,7 @@ std::unique_ptr<ISnapshotWriter> SnapshotManager::OpenSnapshotWriter(
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
if (IsCompressionEnabled()) {
|
||||
if (status.compression_enabled()) {
|
||||
return OpenCompressedSnapshotWriter(lock.get(), source_device, params.GetPartitionName(),
|
||||
status, paths);
|
||||
}
|
||||
|
@ -3346,5 +3347,13 @@ bool SnapshotManager::WaitForDevice(const std::string& device,
|
|||
return true;
|
||||
}
|
||||
|
||||
bool SnapshotManager::IsSnapuserdRequired() {
|
||||
auto lock = LockExclusive();
|
||||
if (!lock) return false;
|
||||
|
||||
auto status = ReadSnapshotUpdateStatus(lock.get());
|
||||
return status.state() != UpdateState::None && status.compression_enabled();
|
||||
}
|
||||
|
||||
} // namespace snapshot
|
||||
} // namespace android
|
||||
|
|
Loading…
Reference in a new issue