ChangeSet 1.896, 2003/01/07 16:41:22-08:00, greg@kroah.com PCI hotplug: clean up the try_module_get() logic a bit. diff -Nru a/drivers/hotplug/pci_hotplug_core.c b/drivers/hotplug/pci_hotplug_core.c --- a/drivers/hotplug/pci_hotplug_core.c Tue Jan 7 16:44:10 2003 +++ b/drivers/hotplug/pci_hotplug_core.c Tue Jan 7 16:44:10 2003 @@ -561,7 +561,7 @@ up(&parent->d_inode->i_sem); } -/* yuck, WFT is this? */ +/* Weee, fun with macros... */ #define GET_STATUS(name,type) \ static int get_##name (struct hotplug_slot *slot, type *value) \ { \ @@ -661,29 +661,26 @@ power = (u8)(lpower & 0xff); dbg ("power = %d\n", power); + if (!try_module_get(slot->ops->owner)) { + retval = -ENODEV; + goto exit; + } switch (power) { case 0: - if (!slot->ops->disable_slot) - break; - if (try_module_get(slot->ops->owner)) { + if (slot->ops->disable_slot) retval = slot->ops->disable_slot(slot); - module_put(slot->ops->owner); - } break; case 1: - if (!slot->ops->enable_slot) - break; - if (try_module_get(slot->ops->owner)) { + if (slot->ops->enable_slot) retval = slot->ops->enable_slot(slot); - module_put(slot->ops->owner); - } break; default: err ("Illegal value specified for power\n"); retval = -EINVAL; } + module_put(slot->ops->owner); exit: kfree (buff); @@ -770,12 +767,13 @@ attention = (u8)(lattention & 0xff); dbg (" - attention = %d\n", attention); - if (slot->ops->set_attention_status) { - if (try_module_get(slot->ops->owner)) { - retval = slot->ops->set_attention_status(slot, attention); - module_put(slot->ops->owner); - } + if (!try_module_get(slot->ops->owner)) { + retval = -ENODEV; + goto exit; } + if (slot->ops->set_attention_status) + retval = slot->ops->set_attention_status(slot, attention); + module_put(slot->ops->owner); exit: kfree (buff); @@ -1007,12 +1005,13 @@ test = (u32)(ltest & 0xffffffff); dbg ("test = %d\n", test); - if (slot->ops->hardware_test) { - if (try_module_get(slot->ops->owner)) { - retval = slot->ops->hardware_test(slot, test); - module_put(slot->ops->owner); - } + if (!try_module_get(slot->ops->owner)) { + retval = -ENODEV; + goto exit; } + if (slot->ops->hardware_test) + retval = slot->ops->hardware_test(slot, test); + module_put(slot->ops->owner); exit: kfree (buff);