DO NOT MERGE: libsnapshot: Fix test failures on certain configurations.

Due to how CF is built and tested, VABC is enabled even when not
supported by the kernel. To work around this add some logic in
libsnapshot and the test harness to recognize this situation and
silently flip off the VABC flag.

This also fixes the -force_mode option to vts_libsnapshot_test, so that
it will skip tests that aren't supported by the device.

Bug: 264279496
Test: vts_libsnapshot_test on android13-gsi with 11-5.4 kernel
Change-Id: I9279d8d400cac5cd504a7ae91f254aae57fa856d
This commit is contained in:
David Anderson 2023-05-03 11:26:13 -07:00
parent 5658f34653
commit 3f96053b38
4 changed files with 12 additions and 3 deletions

View file

@ -3166,7 +3166,8 @@ Return SnapshotManager::CreateUpdateSnapshots(const DeltaArchiveManifest& manife
<< " writer.GetCowVersion(): " << writer.GetCowVersion();
bool use_compression = IsCompressionEnabled() && dap_metadata.vabc_enabled() &&
!device_->IsRecovery() && cow_format_support;
!device_->IsRecovery() && cow_format_support &&
KernelSupportsCompressedSnapshots();
std::string compression_algorithm;
if (use_compression) {

View file

@ -2760,7 +2760,7 @@ bool IsDaemonRequired() {
return true;
}
return IsUserspaceSnapshotsEnabled();
return IsUserspaceSnapshotsEnabled() && KernelSupportsCompressedSnapshots();
}
bool ShouldUseCompression() {
@ -2770,7 +2770,7 @@ bool ShouldUseCompression() {
if (FLAGS_force_config == "vabc") {
return true;
}
return IsCompressionEnabled();
return IsCompressionEnabled() && KernelSupportsCompressedSnapshots();
}
} // namespace snapshot

View file

@ -26,7 +26,9 @@
#include <android-base/properties.h>
#include <android-base/strings.h>
#include <fs_mgr/roots.h>
#include <libdm/dm.h>
using android::dm::DeviceMapper;
using android::dm::kSectorSize;
using android::fiemap::FiemapStatus;
using android::fs_mgr::EnsurePathMounted;
@ -208,5 +210,10 @@ bool IsDmSnapshotTestingEnabled() {
return android::base::GetBoolProperty("snapuserd.test.dm.snapshots", false);
}
bool KernelSupportsCompressedSnapshots() {
auto& dm = DeviceMapper::Instance();
return dm.GetTargetByName("user", nullptr);
}
} // namespace snapshot
} // namespace android

View file

@ -129,6 +129,7 @@ std::ostream& operator<<(std::ostream& os, const Now&);
void AppendExtent(google::protobuf::RepeatedPtrField<chromeos_update_engine::Extent>* extents,
uint64_t start_block, uint64_t num_blocks);
bool KernelSupportsCompressedSnapshots();
bool IsCompressionEnabled();
bool IsUserspaceSnapshotsEnabled();