V4L/DVB (13184): gspca: Don't forget to resubmit URB's in case of an error

The gscpa core was not resubmitting URB's when the URB status was an error,
this means we will loose URB's (potentially all stopping the stream) in
case of sporadic USB issues. I've seen this with an Aiptek stv0680 based
PenCam connected through an USB 2.0 hub.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Hans de Goede 2009-10-23 06:56:06 -03:00 committed by Mauro Carvalho Chehab
parent 21f1b932db
commit bf926adfbb

View File

@ -138,7 +138,7 @@ static void fill_frame(struct gspca_dev *gspca_dev,
if (!gspca_dev->frozen)
#endif
PDEBUG(D_ERR|D_PACK, "urb status: %d", urb->status);
return;
goto resubmit;
}
pkt_scan = gspca_dev->sd_desc->pkt_scan;
for (i = 0; i < urb->number_of_packets; i++) {
@ -174,6 +174,7 @@ static void fill_frame(struct gspca_dev *gspca_dev,
pkt_scan(gspca_dev, frame, data, len);
}
resubmit:
/* resubmit the URB */
st = usb_submit_urb(urb, GFP_ATOMIC);
if (st < 0)
@ -220,7 +221,7 @@ static void bulk_irq(struct urb *urb)
if (!gspca_dev->frozen)
#endif
PDEBUG(D_ERR|D_PACK, "urb status: %d", urb->status);
return;
goto resubmit;
}
/* check the availability of the frame buffer */
@ -235,6 +236,7 @@ static void bulk_irq(struct urb *urb)
urb->actual_length);
}
resubmit:
/* resubmit the URB */
if (gspca_dev->cam.bulk_nurbs != 0) {
st = usb_submit_urb(urb, GFP_ATOMIC);