ChangeSet 1.788, 2002/12/05 14:21:12-08:00, [EMAIL PROTECTED]
[PATCH] usbdevfs: finalize urbs on interface release
here is a patch for 2.4 that goes on top of the previous one. It cleans up the
list handling, in line with Dave's comment.
diff -Nru a/drivers/usb/devio.c b/drivers/usb/devio.c
--- a/drivers/usb/devio.c Thu Dec 5 14:48:32 2002
+++ b/drivers/usb/devio.c Thu Dec 5 14:48:32 2002
@@ -205,8 +205,7 @@
unsigned long flags;
spin_lock_irqsave(&ps->lock, flags);
- list_del(&as->asynclist);
- INIT_LIST_HEAD(&as->asynclist);
+ list_del_init(&as->asynclist);
spin_unlock_irqrestore(&ps->lock, flags);
}
@@ -218,8 +217,7 @@
spin_lock_irqsave(&ps->lock, flags);
if (!list_empty(&ps->async_completed)) {
as = list_entry(ps->async_completed.next, struct async, asynclist);
- list_del(&as->asynclist);
- INIT_LIST_HEAD(&as->asynclist);
+ list_del_init(&as->asynclist);
}
spin_unlock_irqrestore(&ps->lock, flags);
return as;
@@ -237,8 +235,7 @@
p = p->next;
if (as->userurb != userurb)
continue;
- list_del(&as->asynclist);
- INIT_LIST_HEAD(&as->asynclist);
+ list_del_init(&as->asynclist);
spin_unlock_irqrestore(&ps->lock, flags);
return as;
}
@@ -253,8 +250,7 @@
struct siginfo sinfo;
spin_lock(&ps->lock);
- list_del(&as->asynclist);
- list_add_tail(&as->asynclist, &ps->async_completed);
+ list_move_tail(&as->asynclist, &ps->async_completed);
spin_unlock(&ps->lock);
wake_up(&ps->wait);
if (as->signr) {
@@ -274,8 +270,7 @@
spin_lock_irqsave(&ps->lock, flags);
while (!list_empty(list)) {
as = list_entry(list->next, struct async, asynclist);
- list_del(&as->asynclist);
- INIT_LIST_HEAD(&as->asynclist);
+ list_del_init(&as->asynclist);
spin_unlock_irqrestore(&ps->lock, flags);
/* usb_unlink_urb calls the completion handler with status ==
USB_ST_URB_KILLED */
usb_unlink_urb(&as->urb);
@@ -298,10 +293,8 @@
as = list_entry(p, struct async, asynclist);
p = p->next;
- if (as->intf == intf) {
- list_del(&as->asynclist);
- list_add_tail(&as->asynclist, &hitlist);
- }
+ if (as->intf == intf)
+ list_move_tail(&as->asynclist, &hitlist);
}
spin_unlock_irqrestore(&ps->lock, flags);
destroy_async(ps, &hitlist);
@@ -546,8 +539,7 @@
unsigned int i;
lock_kernel();
- list_del(&ps->list);
- INIT_LIST_HEAD(&ps->list);
+ list_del_init(&ps->list);
if (ps->dev) {
for (i = 0; ps->ifclaimed && i < 8*sizeof(ps->ifclaimed); i++)
if (test_bit(i, &ps->ifclaimed))
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel