From a062b2146e296c3d2c475797caeda9da2abeb715 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 2 Sep 2024 17:55:37 -0400 Subject: [PATCH] IORequest: Fix computation of parent-relative transfer offsets. The local transferEndOffset should be relative to the parent (us), not to the underlying filesystem. We thus need to subtract our own offset from the operation's offset. This fixes a regression from be8080575a5ae9e8ecba3494afdd081cb4fd94a2. Errors transferring data should now be properly reported in more cases. --- src/system/kernel/device_manager/IORequest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/system/kernel/device_manager/IORequest.cpp b/src/system/kernel/device_manager/IORequest.cpp index 48b2e10d33..6a799cb5c6 100644 --- a/src/system/kernel/device_manager/IORequest.cpp +++ b/src/system/kernel/device_manager/IORequest.cpp @@ -1052,7 +1052,7 @@ IORequest::OperationFinished(IOOperation* operation) const bool partialTransfer = (operation->TransferredBytes() < operation->OriginalLength()); const generic_size_t transferEndOffset = - (operation->OriginalOffset() + operation->TransferredBytes()); + (operation->OriginalOffset() - Offset()) + operation->TransferredBytes(); if (status != B_OK || partialTransfer) { if (fTransferSize > transferEndOffset)