libsnapshot: Check for snapshot status none
NONE is an invalid state, and should be considered
as "no snapshot".
Test: libsnapshot_test
Change-Id: Ie13b1b157dc79ed639ab6ac19e28abb61b064221
diff --git a/fs_mgr/libsnapshot/snapshot.cpp b/fs_mgr/libsnapshot/snapshot.cpp
index 008ece7..e4eaf8f 100644
--- a/fs_mgr/libsnapshot/snapshot.cpp
+++ b/fs_mgr/libsnapshot/snapshot.cpp
@@ -300,7 +300,7 @@
if (!ReadSnapshotStatus(lock, name, &status)) {
return false;
}
- if (status.state() == SnapshotState::MERGE_COMPLETED) {
+ if (status.state() == SnapshotState::NONE || status.state() == SnapshotState::MERGE_COMPLETED) {
LOG(ERROR) << "Should not create a snapshot device for " << name
<< " after merging has completed.";
return false;
@@ -1376,6 +1376,17 @@
if (live_snapshot_status->state() == SnapshotState::MERGE_COMPLETED) {
live_snapshot_status.reset();
}
+
+ if (live_snapshot_status->state() == SnapshotState::NONE ||
+ live_snapshot_status->cow_partition_size() + live_snapshot_status->cow_file_size() ==
+ 0) {
+ LOG(WARNING) << "Snapshot status for " << params.GetPartitionName()
+ << " is invalid, ignoring: state = "
+ << SnapshotState_Name(live_snapshot_status->state())
+ << ", cow_partition_size = " << live_snapshot_status->cow_partition_size()
+ << ", cow_file_size = " << live_snapshot_status->cow_file_size();
+ live_snapshot_status.reset();
+ }
} while (0);
if (live_snapshot_status.has_value()) {