On Thu, Jun 04, 2009 at 11:20:38PM +0200, Martin Fuzzey wrote: > In tests 11 and 12 if the URB completes with an error status (eg babble) > the asynchrous unlink entered an endless loop trying to unlink > a non resubmitted URB. > > Signed-off-by: Martin Fuzzey <mfuzzey@xxxxxxxxx> David, any thoughts about this? thanks, greg k-h > > --- > > drivers/usb/misc/usbtest.c | 39 +++++++++++++++++++++++++-------------- > 1 files changed, 25 insertions(+), 14 deletions(-) > > diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c > index 5f1a19d..a9f06d7 100644 > --- a/drivers/usb/misc/usbtest.c > +++ b/drivers/usb/misc/usbtest.c > @@ -1072,23 +1072,34 @@ static int unlink1 (struct usbtest_dev *dev, int pipe, int size, int async) > */ > msleep (jiffies % (2 * INTERRUPT_RATE)); > if (async) { > -retry: > - retval = usb_unlink_urb (urb); > - if (retval == -EBUSY || retval == -EIDRM) { > - /* we can't unlink urbs while they're completing. > - * or if they've completed, and we haven't resubmitted. > - * "normal" drivers would prevent resubmission, but > - * since we're testing unlink paths, we can't. > - */ > - ERROR(dev, "unlink retry\n"); > - goto retry; > + while (!completion_done(&completion)) { > + retval = usb_unlink_urb(urb); > + > + switch (retval) { > + case -EBUSY: > + case -EIDRM: > + /* we can't unlink urbs while they're completing > + * or if they've completed, and we haven't > + * resubmitted. "normal" drivers would prevent > + * resubmission, but since we're testing unlink > + * paths, we can't. > + */ > + ERROR(dev, "unlink retry\n"); > + continue; > + case 0: > + case -EINPROGRESS: > + break; > + > + default: > + dev_err(&dev->intf->dev, > + "unlink fail %d\n", retval); > + return retval; > + } > + > + break; > } > } else > usb_kill_urb (urb); > - if (!(retval == 0 || retval == -EINPROGRESS)) { > - dev_err(&dev->intf->dev, "unlink fail %d\n", retval); > - return retval; > - } > > wait_for_completion (&completion); > retval = urb->status; > > -- > To unsubscribe from this list: send the line "unsubscribe linux-usb" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html