diff options
| author | Alan Stern <stern@rowland.harvard.edu> | 2005-11-23 18:43:50 -0500 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-24 02:03:06 -0500 | 
| commit | 2b08c8d0468866f86da97f836c6ac14338cb81a9 (patch) | |
| tree | eca60a3b6811a825cd3642a666aa523a18fe484b /drivers/base/bus.c | |
| parent | 133747e8d1e912863edfb3869e36b97b9939d4fc (diff) | |
[PATCH] Small fixes to driver core
This patch (as603) makes a few small fixes to the driver core:
Change spin_lock_irq for a klist lock to spin_lock;
Fix reference count leaks;
Minor spelling and formatting changes.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Acked-by Patrick Mochel <mochel@digitalimplant.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/base/bus.c')
| -rw-r--r-- | drivers/base/bus.c | 21 | 
1 files changed, 9 insertions, 12 deletions
diff --git a/drivers/base/bus.c b/drivers/base/bus.c index 03204bfd17af..fa601b085eba 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c  | |||
| @@ -133,7 +133,7 @@ static struct kobj_type ktype_bus = { | |||
| 133 | decl_subsys(bus, &ktype_bus, NULL); | 133 | decl_subsys(bus, &ktype_bus, NULL); | 
| 134 | 134 | ||
| 135 | 135 | ||
| 136 | /* Manually detach a device from it's associated driver. */ | 136 | /* Manually detach a device from its associated driver. */ | 
| 137 | static int driver_helper(struct device *dev, void *data) | 137 | static int driver_helper(struct device *dev, void *data) | 
| 138 | { | 138 | { | 
| 139 | const char *name = data; | 139 | const char *name = data; | 
| @@ -151,14 +151,13 @@ static ssize_t driver_unbind(struct device_driver *drv, | |||
| 151 | int err = -ENODEV; | 151 | int err = -ENODEV; | 
| 152 | 152 | ||
| 153 | dev = bus_find_device(bus, NULL, (void *)buf, driver_helper); | 153 | dev = bus_find_device(bus, NULL, (void *)buf, driver_helper); | 
| 154 | if ((dev) && | 154 | if (dev && dev->driver == drv) { | 
| 155 | (dev->driver == drv)) { | ||
| 156 | device_release_driver(dev); | 155 | device_release_driver(dev); | 
| 157 | err = count; | 156 | err = count; | 
| 158 | } | 157 | } | 
| 159 | if (err) | 158 | put_device(dev); | 
| 160 | return err; | 159 | put_bus(bus); | 
| 161 | return count; | 160 | return err; | 
| 162 | } | 161 | } | 
| 163 | static DRIVER_ATTR(unbind, S_IWUSR, NULL, driver_unbind); | 162 | static DRIVER_ATTR(unbind, S_IWUSR, NULL, driver_unbind); | 
| 164 | 163 | ||
| @@ -175,16 +174,14 @@ static ssize_t driver_bind(struct device_driver *drv, | |||
| 175 | int err = -ENODEV; | 174 | int err = -ENODEV; | 
| 176 | 175 | ||
| 177 | dev = bus_find_device(bus, NULL, (void *)buf, driver_helper); | 176 | dev = bus_find_device(bus, NULL, (void *)buf, driver_helper); | 
| 178 | if ((dev) && | 177 | if (dev && dev->driver == NULL) { | 
| 179 | (dev->driver == NULL)) { | ||
| 180 | down(&dev->sem); | 178 | down(&dev->sem); | 
| 181 | err = driver_probe_device(drv, dev); | 179 | err = driver_probe_device(drv, dev); | 
| 182 | up(&dev->sem); | 180 | up(&dev->sem); | 
| 183 | put_device(dev); | ||
| 184 | } | 181 | } | 
| 185 | if (err) | 182 | put_device(dev); | 
| 186 | return err; | 183 | put_bus(bus); | 
| 187 | return count; | 184 | return err; | 
| 188 | } | 185 | } | 
| 189 | static DRIVER_ATTR(bind, S_IWUSR, NULL, driver_bind); | 186 | static DRIVER_ATTR(bind, S_IWUSR, NULL, driver_bind); | 
| 190 | 187 | ||
