diff options
Diffstat (limited to 'drivers/usb/misc/usbtest.c')
-rw-r--r-- | drivers/usb/misc/usbtest.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c index 92fdb6e9faff..6b978f04b8d7 100644 --- a/drivers/usb/misc/usbtest.c +++ b/drivers/usb/misc/usbtest.c | |||
@@ -287,6 +287,9 @@ static struct urb *usbtest_alloc_urb( | |||
287 | if (usb_pipein(pipe)) | 287 | if (usb_pipein(pipe)) |
288 | urb->transfer_flags |= URB_SHORT_NOT_OK; | 288 | urb->transfer_flags |= URB_SHORT_NOT_OK; |
289 | 289 | ||
290 | if ((bytes + offset) == 0) | ||
291 | return urb; | ||
292 | |||
290 | if (urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP) | 293 | if (urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP) |
291 | urb->transfer_buffer = usb_alloc_coherent(udev, bytes + offset, | 294 | urb->transfer_buffer = usb_alloc_coherent(udev, bytes + offset, |
292 | GFP_KERNEL, &urb->transfer_dma); | 295 | GFP_KERNEL, &urb->transfer_dma); |
@@ -529,6 +532,7 @@ static struct scatterlist * | |||
529 | alloc_sglist(int nents, int max, int vary, struct usbtest_dev *dev, int pipe) | 532 | alloc_sglist(int nents, int max, int vary, struct usbtest_dev *dev, int pipe) |
530 | { | 533 | { |
531 | struct scatterlist *sg; | 534 | struct scatterlist *sg; |
535 | unsigned int n_size = 0; | ||
532 | unsigned i; | 536 | unsigned i; |
533 | unsigned size = max; | 537 | unsigned size = max; |
534 | unsigned maxpacket = | 538 | unsigned maxpacket = |
@@ -561,7 +565,8 @@ alloc_sglist(int nents, int max, int vary, struct usbtest_dev *dev, int pipe) | |||
561 | break; | 565 | break; |
562 | case 1: | 566 | case 1: |
563 | for (j = 0; j < size; j++) | 567 | for (j = 0; j < size; j++) |
564 | *buf++ = (u8) ((j % maxpacket) % 63); | 568 | *buf++ = (u8) (((j + n_size) % maxpacket) % 63); |
569 | n_size += size; | ||
565 | break; | 570 | break; |
566 | } | 571 | } |
567 | 572 | ||