diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c index ae749f22e1f1..2f226d15aea6 100644 --- a/drivers/usb/gadget/function/u_serial.c +++ b/drivers/usb/gadget/function/u_serial.c @@ -281,6 +281,7 @@ __acquires(&port->port_lock) break; } + list_move_tail(&req->list, &port->queued_write_pool); port->write_started++; /* abort immediately after disconnect */ @@ -319,7 +320,6 @@ __acquires(&port->port_lock) break; req = list_entry(pool->next, struct usb_request, list); - list_move_tail(&req->list, &port->queued_read_pool); req->length = out->maxpacket; /* drop lock while we call out; the controller driver @@ -335,6 +335,7 @@ __acquires(&port->port_lock) list_add(&req->list, pool); break; } + list_move_tail(&req->list, &port->queued_read_pool); port->read_started++; /* abort immediately after disconnect */ @@ -453,7 +454,7 @@ static void gs_read_complete(struct usb_ep *ep, struct usb_request *req) /* Queue all received data until the tty layer is ready for it. */ spin_lock(&port->port_lock); - list_add_tail(&req->list, &port->read_queue); + list_move_tail(&req->list, &port->read_queue); schedule_delayed_work(&port->push, 0); spin_unlock(&port->port_lock); } @@ -463,7 +464,7 @@ static void gs_write_complete(struct usb_ep *ep, struct usb_request *req) struct gs_port *port = ep->driver_data; spin_lock(&port->port_lock); - list_add(&req->list, &port->write_pool); + list_move_tail(&req->list, &port->write_pool); port->write_started--; switch (req->status) {