--- linux-2.6.19/drivers/usb/host/ehci-sched.c
+++ linux-2.6.19/drivers/usb/host/ehci-sched.c
@@ -1514,7 +1514,7 @@
 					struct ehci_itd, itd_list);
 			list_move_tail (&itd->itd_list, &stream->td_list);
 			itd->stream = iso_stream_get (stream);
-			itd->urb = usb_get_urb (urb);
+			itd->urb = urb;
 			itd_init (stream, itd);
 		}
 
@@ -1595,7 +1595,6 @@
 		}
 	}
 
-	usb_put_urb (urb);
 	itd->urb = NULL;
 	itd->stream = NULL;
 	list_move (&itd->itd_list, &stream->free_list);
@@ -1621,7 +1620,7 @@
 		(void) disable_periodic (ehci);
 	ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--;
 
-	if (unlikely (list_empty (&stream->td_list))) {
+	if (unlikely(list_is_singular(&stream->td_list))) {
 		ehci_to_hcd(ehci)->self.bandwidth_allocated
 				-= stream->bandwidth;
 		ehci_vdbg (ehci,
@@ -1900,7 +1899,6 @@
 				struct ehci_sitd, sitd_list);
 		list_move_tail (&sitd->sitd_list, &stream->td_list);
 		sitd->stream = iso_stream_get (stream);
-		sitd->urb = usb_get_urb (urb);
 
 		sitd_patch (stream, sitd, sched, packet);
 		sitd_link (ehci, (next_uframe >> 3) % ehci->periodic_size,
@@ -1958,7 +1956,6 @@
 		desc->actual_length = desc->length - SITD_LENGTH (t);
 	}
 
-	usb_put_urb (urb);
 	sitd->urb = NULL;
 	sitd->stream = NULL;
 	list_move (&sitd->sitd_list, &stream->free_list);
@@ -1985,7 +1982,7 @@
 		(void) disable_periodic (ehci);
 	ehci_to_hcd(ehci)->self.bandwidth_isoc_reqs--;
 
-	if (list_empty (&stream->td_list)) {
+	if (list_is_singular(&stream->td_list)) {
 		ehci_to_hcd(ehci)->self.bandwidth_allocated
 				-= stream->bandwidth;
 		ehci_vdbg (ehci,
