Merge "libsnapshot: Fetch device size from header" into main am: 7428705371
Original change: https://android-review.googlesource.com/c/platform/system/core/+/2974622 Change-Id: I42f1f048d6a8298c8cb82f7f3eef710998598743 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
ea798470a0
1 changed files with 10 additions and 7 deletions
|
@ -508,8 +508,6 @@ bool SnapshotManager::MapDmUserCow(LockedFile* lock, const std::string& name,
|
|||
// When snapshots are on current slot, we determine the size
|
||||
// of block device based on the number of COW operations. We cannot
|
||||
// use base device as it will be from older image.
|
||||
size_t num_ops = 0;
|
||||
uint64_t dev_sz = 0;
|
||||
unique_fd fd(open(cow_file.c_str(), O_RDONLY | O_CLOEXEC));
|
||||
if (fd < 0) {
|
||||
PLOG(ERROR) << "Failed to open " << cow_file;
|
||||
|
@ -522,13 +520,18 @@ bool SnapshotManager::MapDmUserCow(LockedFile* lock, const std::string& name,
|
|||
return false;
|
||||
}
|
||||
|
||||
uint64_t dev_sz = 0;
|
||||
const auto& header = reader.GetHeader();
|
||||
if (header.prefix.major_version > 2) {
|
||||
LOG(ERROR) << "COW format not supported";
|
||||
return false;
|
||||
if (header.prefix.major_version == 2) {
|
||||
const size_t num_ops = reader.get_num_total_data_ops();
|
||||
dev_sz = (num_ops * header.block_size);
|
||||
} else {
|
||||
// create_snapshot will skip in-place copy ops. Hence, fetch this
|
||||
// information directly from v3 header.
|
||||
const auto& v3_header = reader.header_v3();
|
||||
dev_sz = v3_header.op_count_max * v3_header.block_size;
|
||||
}
|
||||
num_ops = reader.get_num_total_data_ops();
|
||||
dev_sz = (num_ops * header.block_size);
|
||||
|
||||
base_sectors = dev_sz >> 9;
|
||||
} else {
|
||||
// For userspace snapshots, the size of the base device is taken as the
|
||||
|
|
Loading…
Reference in a new issue