Merge "libsnapshot: Merge completion for sector 0" am: c7e586a7bf
Original change: https://android-review.googlesource.com/c/platform/system/core/+/1555468 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I7c8881edcc3ecd09a85e2caeb2fb9033b15ec9ae
This commit is contained in:
commit
55dd7ce355
2 changed files with 14 additions and 16 deletions
|
|
@ -255,17 +255,23 @@ void CowSnapuserdTest::CreateCowDevice() {
|
||||||
ASSERT_TRUE(writer.Initialize(cow_system_->fd));
|
ASSERT_TRUE(writer.Initialize(cow_system_->fd));
|
||||||
|
|
||||||
size_t num_blocks = size_ / options.block_size;
|
size_t num_blocks = size_ / options.block_size;
|
||||||
size_t blk_src_copy = num_blocks;
|
size_t blk_end_copy = num_blocks * 2;
|
||||||
size_t blk_end_copy = blk_src_copy + num_blocks;
|
size_t source_blk = num_blocks - 1;
|
||||||
size_t source_blk = 0;
|
size_t blk_src_copy = blk_end_copy - 1;
|
||||||
|
|
||||||
while (source_blk < num_blocks) {
|
size_t x = num_blocks;
|
||||||
|
while (1) {
|
||||||
ASSERT_TRUE(writer.AddCopy(source_blk, blk_src_copy));
|
ASSERT_TRUE(writer.AddCopy(source_blk, blk_src_copy));
|
||||||
source_blk += 1;
|
x -= 1;
|
||||||
blk_src_copy += 1;
|
if (x == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
source_blk -= 1;
|
||||||
|
blk_src_copy -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT_EQ(blk_src_copy, blk_end_copy);
|
source_blk = num_blocks;
|
||||||
|
blk_src_copy = blk_end_copy;
|
||||||
|
|
||||||
ASSERT_TRUE(writer.AddRawBlocks(source_blk, random_buffer_1_.get(), size_));
|
ASSERT_TRUE(writer.AddRawBlocks(source_blk, random_buffer_1_.get(), size_));
|
||||||
|
|
||||||
|
|
@ -280,11 +286,9 @@ void CowSnapuserdTest::CreateCowDevice() {
|
||||||
|
|
||||||
// Flush operations
|
// Flush operations
|
||||||
ASSERT_TRUE(writer.Finalize());
|
ASSERT_TRUE(writer.Finalize());
|
||||||
|
|
||||||
// Construct the buffer required for validation
|
// Construct the buffer required for validation
|
||||||
orig_buffer_ = std::make_unique<uint8_t[]>(total_base_size_);
|
orig_buffer_ = std::make_unique<uint8_t[]>(total_base_size_);
|
||||||
std::string zero_buffer(size_, 0);
|
std::string zero_buffer(size_, 0);
|
||||||
|
|
||||||
ASSERT_EQ(android::base::ReadFullyAtOffset(base_fd_, orig_buffer_.get(), size_, size_), true);
|
ASSERT_EQ(android::base::ReadFullyAtOffset(base_fd_, orig_buffer_.get(), size_, size_), true);
|
||||||
memcpy((char*)orig_buffer_.get() + size_, random_buffer_1_.get(), size_);
|
memcpy((char*)orig_buffer_.get() + size_, random_buffer_1_.get(), size_);
|
||||||
memcpy((char*)orig_buffer_.get() + (size_ * 2), (void*)zero_buffer.c_str(), size_);
|
memcpy((char*)orig_buffer_.get() + (size_ * 2), (void*)zero_buffer.c_str(), size_);
|
||||||
|
|
|
||||||
|
|
@ -324,8 +324,7 @@ loff_t Snapuserd::GetMergeStartOffset(void* merged_buffer, void* unmerged_buffer
|
||||||
reinterpret_cast<struct disk_exception*>((char*)unmerged_buffer + offset);
|
reinterpret_cast<struct disk_exception*>((char*)unmerged_buffer + offset);
|
||||||
|
|
||||||
// Unmerged op by the kernel
|
// Unmerged op by the kernel
|
||||||
if (merged_de->old_chunk != 0) {
|
if (merged_de->old_chunk != 0 || merged_de->new_chunk != 0) {
|
||||||
CHECK(merged_de->new_chunk != 0);
|
|
||||||
CHECK(merged_de->old_chunk == cow_de->old_chunk);
|
CHECK(merged_de->old_chunk == cow_de->old_chunk);
|
||||||
CHECK(merged_de->new_chunk == cow_de->new_chunk);
|
CHECK(merged_de->new_chunk == cow_de->new_chunk);
|
||||||
|
|
||||||
|
|
@ -334,11 +333,6 @@ loff_t Snapuserd::GetMergeStartOffset(void* merged_buffer, void* unmerged_buffer
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Merge complete on this exception. However, we don't know how many
|
|
||||||
// merged in this cycle; hence break here.
|
|
||||||
CHECK(merged_de->new_chunk == 0);
|
|
||||||
CHECK(merged_de->old_chunk == 0);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue