Commit e05a1fd9 authored by Thomas Pugliese's avatar Thomas Pugliese Committed by Greg Kroah-Hartman

usb: wusbcore: return -ENOENT for unlinked URBs.

Return -ENOENT for unlinked URBs.
Signed-off-by: default avatarThomas Pugliese <thomas.pugliese@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent bbfc3420
...@@ -1848,6 +1848,7 @@ int wa_urb_dequeue(struct wahc *wa, struct urb *urb, int status) ...@@ -1848,6 +1848,7 @@ int wa_urb_dequeue(struct wahc *wa, struct urb *urb, int status)
pr_debug("%s: xfer %p id 0x%08X has no RPIPE. %s", pr_debug("%s: xfer %p id 0x%08X has no RPIPE. %s",
__func__, xfer, wa_xfer_id(xfer), __func__, xfer, wa_xfer_id(xfer),
"Probably already aborted.\n" ); "Probably already aborted.\n" );
result = -ENOENT;
goto out_unlock; goto out_unlock;
} }
/* Check the delayed list -> if there, release and complete */ /* Check the delayed list -> if there, release and complete */
...@@ -1878,6 +1879,7 @@ int wa_urb_dequeue(struct wahc *wa, struct urb *urb, int status) ...@@ -1878,6 +1879,7 @@ int wa_urb_dequeue(struct wahc *wa, struct urb *urb, int status)
* segments will be completed in the DTI interrupt. * segments will be completed in the DTI interrupt.
*/ */
seg->status = WA_SEG_ABORTED; seg->status = WA_SEG_ABORTED;
seg->result = -ENOENT;
spin_lock_irqsave(&rpipe->seg_lock, flags2); spin_lock_irqsave(&rpipe->seg_lock, flags2);
list_del(&seg->list_node); list_del(&seg->list_node);
xfer->segs_done++; xfer->segs_done++;
...@@ -1917,12 +1919,12 @@ int wa_urb_dequeue(struct wahc *wa, struct urb *urb, int status) ...@@ -1917,12 +1919,12 @@ int wa_urb_dequeue(struct wahc *wa, struct urb *urb, int status)
wa_xfer_completion(xfer); wa_xfer_completion(xfer);
if (rpipe_ready) if (rpipe_ready)
wa_xfer_delayed_run(rpipe); wa_xfer_delayed_run(rpipe);
return 0; return result;
out_unlock: out_unlock:
spin_unlock_irqrestore(&xfer->lock, flags); spin_unlock_irqrestore(&xfer->lock, flags);
out: out:
return 0; return result;
dequeue_delayed: dequeue_delayed:
list_del_init(&xfer->list_node); list_del_init(&xfer->list_node);
...@@ -1958,7 +1960,7 @@ static int wa_xfer_status_to_errno(u8 status) ...@@ -1958,7 +1960,7 @@ static int wa_xfer_status_to_errno(u8 status)
[WA_XFER_STATUS_NOT_FOUND] = 0, [WA_XFER_STATUS_NOT_FOUND] = 0,
[WA_XFER_STATUS_INSUFFICIENT_RESOURCE] = -ENOMEM, [WA_XFER_STATUS_INSUFFICIENT_RESOURCE] = -ENOMEM,
[WA_XFER_STATUS_TRANSACTION_ERROR] = -EILSEQ, [WA_XFER_STATUS_TRANSACTION_ERROR] = -EILSEQ,
[WA_XFER_STATUS_ABORTED] = -EINTR, [WA_XFER_STATUS_ABORTED] = -ENOENT,
[WA_XFER_STATUS_RPIPE_NOT_READY] = EINVAL, [WA_XFER_STATUS_RPIPE_NOT_READY] = EINVAL,
[WA_XFER_INVALID_FORMAT] = EINVAL, [WA_XFER_INVALID_FORMAT] = EINVAL,
[WA_XFER_UNEXPECTED_SEGMENT_NUMBER] = EINVAL, [WA_XFER_UNEXPECTED_SEGMENT_NUMBER] = EINVAL,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment