summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristian Høgsberg <krh@redhat.com>2007-03-19 11:37:16 -0400
committerStefan Richter <stefanr@s5r6.in-berlin.de>2007-03-20 23:27:19 +0100
commit015b066f4e5dbd301144c2de1c53329178f67a01 (patch)
tree60a6d5125eb9601df50f358e518f6ac92decf0b3
parent11f494ee25dd81af90255b1d61abc6f5508db4d0 (diff)
downloadlwn-015b066f4e5dbd301144c2de1c53329178f67a01.tar.gz
lwn-015b066f4e5dbd301144c2de1c53329178f67a01.zip
firewire: Grab dev->sem when doing the update callback.
This serializes the update callback with the probe and remove callback from the driver core and prevents remove from being called while update is running for the same device. Signed-off-by: Kristian Høgsberg <krh@redhat.com> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
-rw-r--r--drivers/firewire/fw-device.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/firewire/fw-device.c b/drivers/firewire/fw-device.c
index 4877cdbc58cc..15721a776cd4 100644
--- a/drivers/firewire/fw-device.c
+++ b/drivers/firewire/fw-device.c
@@ -562,8 +562,11 @@ static int update_unit(struct device *dev, void *data)
struct fw_unit *unit = fw_unit(dev);
struct fw_driver *driver = (struct fw_driver *)dev->driver;
- if (is_fw_unit(dev) && driver != NULL && driver->update != NULL)
+ if (is_fw_unit(dev) && driver != NULL && driver->update != NULL) {
+ down(&dev->sem);
driver->update(unit);
+ up(&dev->sem);
+ }
return 0;
}