提交 e618834e 编写于 作者: J James Maki 提交者: Greg Kroah-Hartman

USB: option.c: option_indat_callback: Resubmit some unsuccessful URBs

All unsuccessful (non-zero status) URBs were being dropped. After N_IN_URBs are
dropped you will no longer be able to receive data.

This patch resubmits unsuccessful URBs unless the status indicates that it should
be terminated. The statuses that indicate the URB should be terminated was
gathered from other similar drivers.
Signed-off-by: NJames Maki <jamescmaki@gmail.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 71adf118
......@@ -1019,31 +1019,42 @@ static void option_indat_callback(struct urb *urb)
dbg("%s: %p", __func__, urb);
endpoint = usb_pipeendpoint(urb->pipe);
port = urb->context;
if (status) {
port = urb->context;
switch (status) {
case 0:
/* success */
break;
case -ECONNRESET:
case -ENOENT:
case -ESHUTDOWN:
/* this urb is terminated, clean up */
dbg("%s: urb shutting down with status: %d on endpoint %02x.",
__func__, status, endpoint);
return;
default:
dbg("%s: nonzero status: %d on endpoint %02x.",
__func__, status, endpoint);
} else {
goto exit;
}
if (urb->actual_length) {
tty = tty_port_tty_get(&port->port);
if (urb->actual_length) {
tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty);
} else
dbg("%s: empty read urb received", __func__);
tty_insert_flip_string(tty, data, urb->actual_length);
tty_flip_buffer_push(tty);
tty_kref_put(tty);
} else
dbg("%s: empty read urb received", __func__);
/* Resubmit urb so we continue receiving */
if (status != -ESHUTDOWN) {
err = usb_submit_urb(urb, GFP_ATOMIC);
if (err && err != -EPERM)
printk(KERN_ERR "%s: resubmit read urb failed. "
"(%d)", __func__, err);
else
usb_mark_last_busy(port->serial->dev);
}
exit:
/* Resubmit urb so we continue receiving */
err = usb_submit_urb(urb, GFP_ATOMIC);
if (err && err != -EPERM)
printk(KERN_ERR "%s: resubmit read urb failed. "
"(%d)", __func__, err);
else
usb_mark_last_busy(port->serial->dev);
}
return;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册