diff --git a/src/add-ons/kernel/drivers/disk/nvme/nvme_disk.cpp b/src/add-ons/kernel/drivers/disk/nvme/nvme_disk.cpp index 975b696053..fc56afce81 100644 --- a/src/add-ons/kernel/drivers/disk/nvme/nvme_disk.cpp +++ b/src/add-ons/kernel/drivers/disk/nvme/nvme_disk.cpp @@ -723,7 +723,7 @@ nvme_disk_io(void* cookie, io_request* request) // See if we need to bounce due to rounding. const off_t rounded_pos = ROUNDDOWN(request->Offset(), block_size); - phys_size_t rounded_len = ROUNDUP(request->Length() + (request->Offset() + const phys_size_t rounded_len = ROUNDUP(request->Length() + (request->Offset() - rounded_pos), block_size); if (rounded_pos != request->Offset() || rounded_len != request->Length()) bounceAll = true; @@ -733,9 +733,6 @@ nvme_disk_io(void* cookie, io_request* request) return nvme_disk_bounced_io(handle, request); } - nvme_request.lba_start = rounded_pos / block_size; - nvme_request.lba_count = rounded_len / block_size; - // No bouncing was required. ReadLocker readLocker; if (nvme_request.write) @@ -750,6 +747,7 @@ nvme_disk_io(void* cookie, io_request* request) const uint32 max_io_blocks = handle->info->max_io_blocks; int32 remaining = nvme_request.iovec_count; + nvme_request.lba_start = rounded_pos / block_size; while (remaining > 0) { nvme_request.iovec_count = min_c(remaining, NVME_MAX_SGL_DESCRIPTORS / 2);