svn commit: r213425 - head/sys/dev/usb/controller
Hans Petter Selasky
hselasky at FreeBSD.org
Mon Oct 4 21:24:10 UTC 2010
Author: hselasky
Date: Mon Oct 4 21:24:10 2010
New Revision: 213425
URL: http://svn.freebsd.org/changeset/base/213425
Log:
The root mount hold reference was not released on USB controller
attach failures during boot. Fix this.
Approved by: thompsa (mentor)
Modified:
head/sys/dev/usb/controller/usb_controller.c
Modified: head/sys/dev/usb/controller/usb_controller.c
==============================================================================
--- head/sys/dev/usb/controller/usb_controller.c Mon Oct 4 21:01:27 2010 (r213424)
+++ head/sys/dev/usb/controller/usb_controller.c Mon Oct 4 21:24:10 2010 (r213425)
@@ -121,6 +121,16 @@ usb_probe(device_t dev)
return (0);
}
+static void
+usb_root_mount_rel(struct usb_bus *bus)
+{
+ if (bus->bus_roothold != NULL) {
+ DPRINTF("Releasing root mount hold %p\n", bus->bus_roothold);
+ root_mount_rel(bus->bus_roothold);
+ bus->bus_roothold = NULL;
+ }
+}
+
/*------------------------------------------------------------------------*
* usb_attach
*------------------------------------------------------------------------*/
@@ -164,10 +174,7 @@ usb_detach(device_t dev)
usb_callout_drain(&bus->power_wdog);
/* Let the USB explore process detach all devices. */
- if (bus->bus_roothold != NULL) {
- root_mount_rel(bus->bus_roothold);
- bus->bus_roothold = NULL;
- }
+ usb_root_mount_rel(bus);
USB_BUS_LOCK(bus);
if (usb_proc_msignal(&bus->explore_proc,
@@ -244,10 +251,7 @@ usb_bus_explore(struct usb_proc_msg *pm)
(udev->hub->explore) (udev);
USB_BUS_LOCK(bus);
}
- if (bus->bus_roothold != NULL) {
- root_mount_rel(bus->bus_roothold);
- bus->bus_roothold = NULL;
- }
+ usb_root_mount_rel(bus);
}
/*------------------------------------------------------------------------*
@@ -353,6 +357,7 @@ usb_bus_attach(struct usb_proc_msg *pm)
default:
device_printf(bus->bdev, "Unsupported USB revision\n");
+ usb_root_mount_rel(bus);
return;
}
@@ -394,6 +399,7 @@ usb_bus_attach(struct usb_proc_msg *pm)
if (err) {
device_printf(bus->bdev, "Root HUB problem, error=%s\n",
usbd_errstr(err));
+ usb_root_mount_rel(bus);
}
/* set softc - we are ready */
More information about the svn-src-head
mailing list