diff --git a/fs_mgr/libsnapshot/snapshot_test.cpp b/fs_mgr/libsnapshot/snapshot_test.cpp index f472babdf..1fbfaf750 100644 --- a/fs_mgr/libsnapshot/snapshot_test.cpp +++ b/fs_mgr/libsnapshot/snapshot_test.cpp @@ -2646,6 +2646,11 @@ TEST_F(SnapshotUpdateTest, QueryStatusError) { ASSERT_TRUE(init->InitiateMerge()); ASSERT_EQ(UpdateState::MergeFailed, init->ProcessUpdateState()); + if (ShouldSkipLegacyMerging()) { + LOG(INFO) << "Skipping legacy merge in test"; + return; + } + // Simulate a reboot that tries the merge again, with the non-failing dm. ASSERT_TRUE(UnmapAll()); init = NewManagerForFirstStageMount("_b"); diff --git a/fs_mgr/libsnapshot/snapuserd/dm-snapshot-merge/snapuserd_worker.cpp b/fs_mgr/libsnapshot/snapuserd/dm-snapshot-merge/snapuserd_worker.cpp index 965af4011..31a80a35c 100644 --- a/fs_mgr/libsnapshot/snapuserd/dm-snapshot-merge/snapuserd_worker.cpp +++ b/fs_mgr/libsnapshot/snapuserd/dm-snapshot-merge/snapuserd_worker.cpp @@ -95,11 +95,17 @@ void WorkerThread::ConstructKernelCowHeader() { // internal COW format and if the block is compressed, // it will be de-compressed. bool WorkerThread::ProcessReplaceOp(const CowOperation* cow_op) { - if (!reader_->ReadData(*cow_op, &bufsink_)) { - SNAP_LOG(ERROR) << "ProcessReplaceOp failed for block " << cow_op->new_block; + void* buffer = bufsink_.GetPayloadBuffer(BLOCK_SZ); + if (!buffer) { + SNAP_LOG(ERROR) << "No space in buffer sink"; + return false; + } + ssize_t rv = reader_->ReadData(*cow_op, buffer, BLOCK_SZ); + if (rv != BLOCK_SZ) { + SNAP_LOG(ERROR) << "ProcessReplaceOp failed for block " << cow_op->new_block + << ", return = " << rv; return false; } - return true; }