Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit adaa3c63 authored by Peter Holik's avatar Peter Holik Committed by Greg Kroah-Hartman
Browse files

USB: uss720 fixup refcount position



My testprog do a lot of bitbang - after hours i got following warning and my machine lockups:
WARNING: at /build/buildd/linux-2.6.38/lib/kref.c:34
After debugging uss720 driver i discovered that the completion callback was called before
usb_submit_urb returns. The callback frees the request structure that is krefed on return by
usb_submit_urb.

Signed-off-by: default avatarPeter Holik <peter@holik.at>
Acked-by: default avatarThomas Sailer <t.sailer@alumni.ethz.ch>
Cc: stable <stable@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 45567c28
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -177,12 +177,11 @@ static struct uss720_async_request *submit_async_request(struct parport_uss720_p
	spin_lock_irqsave(&priv->asynclock, flags);
	list_add_tail(&rq->asynclist, &priv->asynclist);
	spin_unlock_irqrestore(&priv->asynclock, flags);
	ret = usb_submit_urb(rq->urb, mem_flags);
	if (!ret) {
	kref_get(&rq->ref_count);
	ret = usb_submit_urb(rq->urb, mem_flags);
	if (!ret)
		return rq;
	}
	kref_put(&rq->ref_count, destroy_async);
	destroy_async(&rq->ref_count);
	err("submit_async_request submit_urb failed with %d", ret);
	return NULL;
}