# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.447.16.4 -> 1.447.16.5
#	drivers/usb/core/devices.c	1.14    -> 1.15   
#	drivers/usb/media/dabusb.c	1.17    -> 1.18   
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/06/10	bhards@bigpond.net.au	1.447.16.5
# [PATCH] USB Checker missing unlocks fixes
# 
# --------------------------------------------
#
diff -Nru a/drivers/usb/core/devices.c b/drivers/usb/core/devices.c
--- a/drivers/usb/core/devices.c	Tue Jun 11 14:58:57 2002
+++ b/drivers/usb/core/devices.c	Tue Jun 11 14:58:57 2002
@@ -574,8 +574,10 @@
 		bus = list_entry(buslist, struct usb_bus, bus_list);
 		/* recurse through all children of the root hub */
 		ret = usb_device_dump(&buf, &nbytes, &skip_bytes, ppos, bus->root_hub, bus, 0, 0, 0);
-		if (ret < 0)
+		if (ret < 0) {
+			up(&usb_bus_list_lock);
 			return ret;
+		}
 		total_written += ret;
 	}
 	up (&usb_bus_list_lock);
diff -Nru a/drivers/usb/media/dabusb.c b/drivers/usb/media/dabusb.c
--- a/drivers/usb/media/dabusb.c	Tue Jun 11 14:58:57 2002
+++ b/drivers/usb/media/dabusb.c	Tue Jun 11 14:58:57 2002
@@ -609,6 +609,7 @@
 		down (&s->mutex);
 	}
 	if (usb_set_interface (s->usbdev, _DABUSB_IF, 1) < 0) {
+		up(&s->mutex);
 		err("set_interface failed");
 		return -EINVAL;
 	}
