diff options
author | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2011-08-27 12:53:03 -0400 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2012-01-15 12:37:20 -0500 |
commit | 210762268466634ddbfaddb48fdf5181ce4b5f2d (patch) | |
tree | 8c07da360066158aa48f450dfeb593ed9ed76d0f /drivers/firewire/core-device.c | |
parent | 2ca526bf4953380abfe5dff455e356967b239c70 (diff) |
firewire: move fw_device reference counting from drivers to core
fw_unit device drivers invariably need to talk to the fw_unit's parent
(an fw_device) and grandparent (an fw_card). firewire-core already
maintains an fw_card reference for the entire lifetime of an fw_device.
Likewise, let firewire-core maintain an fw_device reference for the
entire lifetime of an fw_unit so that fw_unit drivers don't have to.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/firewire/core-device.c')
-rw-r--r-- | drivers/firewire/core-device.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/firewire/core-device.c b/drivers/firewire/core-device.c index f3b890da1e87..4c6c7d8cdaf1 100644 --- a/drivers/firewire/core-device.c +++ b/drivers/firewire/core-device.c | |||
@@ -641,6 +641,7 @@ static void fw_unit_release(struct device *dev) | |||
641 | { | 641 | { |
642 | struct fw_unit *unit = fw_unit(dev); | 642 | struct fw_unit *unit = fw_unit(dev); |
643 | 643 | ||
644 | fw_device_put(fw_parent_device(unit)); | ||
644 | kfree(unit); | 645 | kfree(unit); |
645 | } | 646 | } |
646 | 647 | ||
@@ -692,6 +693,7 @@ static void create_units(struct fw_device *device) | |||
692 | if (device_register(&unit->device) < 0) | 693 | if (device_register(&unit->device) < 0) |
693 | goto skip_unit; | 694 | goto skip_unit; |
694 | 695 | ||
696 | fw_device_get(device); | ||
695 | continue; | 697 | continue; |
696 | 698 | ||
697 | skip_unit: | 699 | skip_unit: |