From cc455ef4616483e9def74e4bc5d46d4f26d85b9c Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 20 Sep 2021 12:35:22 -0400 Subject: [PATCH] USB: Properly set and reset fFragmented for both SetVector and SetData. Now that we are not setting fFragmented in VectorLength(), we can reset it in SetVector based purely on the length of the newly set vectors. We also need to set it in SetData, as SetVector does not call this. This fixes an oversight in bc7fd43358d1. --- src/add-ons/kernel/bus_managers/usb/Transfer.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/add-ons/kernel/bus_managers/usb/Transfer.cpp b/src/add-ons/kernel/bus_managers/usb/Transfer.cpp index ad3e3c66aa..71c5eaa17a 100644 --- a/src/add-ons/kernel/bus_managers/usb/Transfer.cpp +++ b/src/add-ons/kernel/bus_managers/usb/Transfer.cpp @@ -70,6 +70,8 @@ Transfer::SetData(uint8 *data, size_t dataLength) if (data && dataLength > 0) fVectorCount = 1; + fFragmented = dataLength > USB_MAX_FRAGMENT_SIZE; + // Calculate the bandwidth (only if it is not a bulk transfer) if (!(fPipe->Type() & USB_OBJECT_BULK_PIPE)) { if (_CalculateBandwidth() < B_OK) @@ -97,10 +99,7 @@ Transfer::SetVector(iovec *vector, size_t vectorCount) for (size_t i = 0; i < fVectorCount && length < USB_MAX_FRAGMENT_SIZE; i++) length += fVector[i].iov_len; - if (length > USB_MAX_FRAGMENT_SIZE) { - // the data is too large and would overflow the allocator - fFragmented = true; - } + fFragmented = length > USB_MAX_FRAGMENT_SIZE; }