From 16a59954e7520f7e55a6c4c6255897eacd07335c Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Tue, 19 May 2020 00:28:18 -0400 Subject: [PATCH] nvme_disk: Error check after do_nvme_io_request. Fixes partial transfers being reported as larger than they actually were. --- src/add-ons/kernel/drivers/disk/nvme/nvme_disk.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 b37404ea3c..99d79c9083 100644 --- a/src/add-ons/kernel/drivers/disk/nvme/nvme_disk.cpp +++ b/src/add-ons/kernel/drivers/disk/nvme/nvme_disk.cpp @@ -734,7 +734,7 @@ nvme_disk_io(void* cookie, io_request* request) } int32 remaining = nvme_request.iovec_count; - while (remaining > 0 && status == B_OK) { + while (remaining > 0) { nvme_request.iovec_count = min_c(remaining, NVME_MAX_SGL_DESCRIPTORS / 2); @@ -743,6 +743,8 @@ nvme_disk_io(void* cookie, io_request* request) nvme_request.lba_count += (nvme_request.iovecs[i].size / block_size); status = do_nvme_io_request(handle->info, &nvme_request); + if (status != B_OK) + break; nvme_request.iovecs += nvme_request.iovec_count; remaining -= nvme_request.iovec_count;