Index: uspace/drv/vhc/devices.c
===================================================================
--- uspace/drv/vhc/devices.c	(revision fbddf941fcd5e649eeb92b1a6bf10efe42c0cf89)
+++ uspace/drv/vhc/devices.c	(revision 290ea098f3b3b3b3bc92d0a9493f23151f13348a)
@@ -138,4 +138,5 @@
 		} else {
 			async_wait_for(req, &answer_rc);
+			transaction->actual_len = IPC_GET_ARG1(answer_data);
 			rc = (int)answer_rc;
 		}
Index: uspace/drv/vhc/hc.c
===================================================================
--- uspace/drv/vhc/hc.c	(revision fbddf941fcd5e649eeb92b1a6bf10efe42c0cf89)
+++ uspace/drv/vhc/hc.c	(revision 290ea098f3b3b3b3bc92d0a9493f23151f13348a)
@@ -96,6 +96,6 @@
 	    usb_str_transaction_outcome(outcome));
 	
-	transaction->callback(transaction->buffer, transaction->len, outcome,
-	    transaction->callback_arg);
+	transaction->callback(transaction->buffer, transaction->actual_len,
+	    outcome, transaction->callback_arg);
 }
 
@@ -169,4 +169,5 @@
 	transaction->buffer = buffer;
 	transaction->len = len;
+	transaction->actual_len = len;
 	transaction->callback = callback;
 	transaction->callback_arg = arg;
Index: uspace/drv/vhc/hc.h
===================================================================
--- uspace/drv/vhc/hc.h	(revision fbddf941fcd5e649eeb92b1a6bf10efe42c0cf89)
+++ uspace/drv/vhc/hc.h	(revision 290ea098f3b3b3b3bc92d0a9493f23151f13348a)
@@ -65,4 +65,6 @@
 	/** Transaction data length. */
 	size_t len;
+	/** Data length actually transfered. */
+	size_t actual_len;
 	/** Callback after transaction is done. */
 	hc_transaction_done_callback_t callback;
