--- zzzz-none-000/linux-2.6.32.61/drivers/usb/class/cdc-wdm.c 2013-06-10 09:43:48.000000000 +0000 +++ ar10-7272-687/linux-2.6.32.61/drivers/usb/class/cdc-wdm.c 2013-02-11 17:46:15.000000000 +0000 @@ -52,7 +52,6 @@ #define WDM_READ 4 #define WDM_INT_STALL 5 #define WDM_POLL_RUNNING 6 -#define WDM_OVERFLOW 10 #define WDM_MAX 16 @@ -116,7 +115,6 @@ { struct wdm_device *desc = urb->context; int status = urb->status; - int length = urb->actual_length; spin_lock(&desc->iuspin); @@ -146,17 +144,9 @@ } desc->rerr = status; - if (length + desc->length > desc->wMaxCommand) { - /* The buffer would overflow */ - set_bit(WDM_OVERFLOW, &desc->flags); - } else { - /* we may already be in overflow */ - if (!test_bit(WDM_OVERFLOW, &desc->flags)) { - memmove(desc->ubuf + desc->length, desc->inbuf, length); - desc->length += length; - desc->reslength = length; - } - } + desc->reslength = urb->actual_length; + memmove(desc->ubuf + desc->length, desc->inbuf, desc->reslength); + desc->length += desc->reslength; wake_up(&desc->wait); set_bit(WDM_READ, &desc->flags); @@ -408,11 +398,6 @@ rv = -ENODEV; goto err; } - if (test_bit(WDM_OVERFLOW, &desc->flags)) { - clear_bit(WDM_OVERFLOW, &desc->flags); - rv = -ENOBUFS; - goto err; - } i++; if (file->f_flags & O_NONBLOCK) { if (!test_bit(WDM_READ, &desc->flags)) { @@ -455,7 +440,6 @@ spin_unlock_irq(&desc->iuspin); goto retry; } - if (!desc->reslength) { /* zero length read */ dev_dbg(&desc->intf->dev, "%s: zero length - clearing WDM_READ\n", __func__); clear_bit(WDM_READ, &desc->flags); @@ -860,7 +844,6 @@ struct wdm_device *desc = usb_get_intfdata(intf); int rv; - clear_bit(WDM_OVERFLOW, &desc->flags); rv = recover_from_urb_loss(desc); mutex_unlock(&desc->plock); return 0;