n_bytes = roundup(12 + this_part, 4);
                memset(buffer + 12 + this_part, 0, n_bytes - (12 + this_part));
 
-               retval = usb_bulk_msg(data->usb_dev,
-                                     usb_sndbulkpipe(data->usb_dev,
-                                                     data->bulk_out),
-                                     buffer, n_bytes, &actual, USBTMC_TIMEOUT);
+               do {
+                       retval = usb_bulk_msg(data->usb_dev,
+                                             usb_sndbulkpipe(data->usb_dev,
+                                                             data->bulk_out),
+                                             buffer, n_bytes,
+                                             &actual, USBTMC_TIMEOUT);
+                       if (retval != 0)
+                               break;
+                       n_bytes -= actual;
+               } while (n_bytes);
 
                data->bTag_last_write = data->bTag;
                data->bTag++;