lkml.org 
[lkml]   [2016]   [Feb]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.3 138/200] usb: cdc-acm: handle unlinked urb in acm read callback
    Date
    4.3-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Lu Baolu <baolu.lu@linux.intel.com>

    commit 19454462acb1bdef80542061bdc9b410e4ed1ff6 upstream.

    In current acm driver, the bulk-in callback function ignores the
    URBs unlinked in usb core.

    This causes unexpected data loss in some cases. For example,
    runtime suspend entry will unlinked all urbs and set urb->status
    to -ENOENT even those urbs might have data not processed yet.
    Hence, data loss occurs.

    This patch lets bulk-in callback function handle unlinked urbs
    to avoid data loss.

    Signed-off-by: Tang Jian Qiang <jianqiang.tang@intel.com>
    Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
    Acked-by: Oliver Neukum <oneukum@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/class/cdc-acm.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    --- a/drivers/usb/class/cdc-acm.c
    +++ b/drivers/usb/class/cdc-acm.c
    @@ -428,7 +428,8 @@ static void acm_read_bulk_callback(struc
    set_bit(rb->index, &acm->read_urbs_free);
    dev_dbg(&acm->data->dev, "%s - non-zero urb status: %d\n",
    __func__, status);
    - return;
    + if ((status != -ENOENT) || (urb->actual_length == 0))
    + return;
    }

    usb_mark_last_busy(acm->dev);

    \
     
     \ /
      Last update: 2016-02-15 00:41    [W:2.754 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site