Dynamic ID addition doesn't need get_driver()
authorAlan Stern <stern@rowland.harvard.edu>
Tue, 24 Jan 2012 18:34:41 +0000 (13:34 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 25 Jan 2012 00:00:35 +0000 (16:00 -0800)
As part of the removal of get_driver()/put_driver(), this patch
(as1511) changes all the places that add dynamic IDs for drivers.
Since these additions are done by writing to the drivers' sysfs
attribute files, and the attributes are removed when the drivers are
unregistered, there is no reason to take an extra reference to the
drivers.

The one exception is the pci-stub driver, which calls pci_add_dynid()
as part of its registration.  But again, there's no reason to take an
extra reference here, because the driver can't be unloaded while it is
being registered.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
CC: Dmitry Torokhov <dmitry.torokhov@gmail.com>
CC: Jiri Kosina <jkosina@suse.cz>
CC: Jesse Barnes <jbarnes@virtuousgeek.org>
CC: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/hid/hid-core.c
drivers/pci/pci-driver.c
drivers/pcmcia/ds.c
drivers/usb/core/driver.c

index af08ce7207d972f797d6c2f6d2dbee3c038e0898..bce53fa0e16681ca2bd67e50d6b9d6df7f304b59 100644 (file)
@@ -1619,11 +1619,7 @@ static ssize_t store_new_id(struct device_driver *drv, const char *buf,
        list_add_tail(&dynid->list, &hdrv->dyn_list);
        spin_unlock(&hdrv->dyn_lock);
 
-       ret = 0;
-       if (get_driver(&hdrv->driver)) {
-               ret = driver_attach(&hdrv->driver);
-               put_driver(&hdrv->driver);
-       }
+       ret = driver_attach(&hdrv->driver);
 
        return ret ? : count;
 }
index 3623d65f8b86ccb9d786085ec57592d2e890292c..ff540477fe8b488cbc85bc7af9e44e9411fe4290 100644 (file)
@@ -72,9 +72,7 @@ int pci_add_dynid(struct pci_driver *drv,
        list_add_tail(&dynid->node, &drv->dynids.list);
        spin_unlock(&drv->dynids.lock);
 
-       get_driver(&drv->driver);
        retval = driver_attach(&drv->driver);
-       put_driver(&drv->driver);
 
        return retval;
 }
index 749c2a16012c582bca165db93f14cf4c21ec5293..059699f6363d028b7a4ef1cb3d9e07a62c2a053a 100644 (file)
@@ -127,10 +127,7 @@ pcmcia_store_new_id(struct device_driver *driver, const char *buf, size_t count)
        list_add_tail(&dynid->node, &pdrv->dynids.list);
        mutex_unlock(&pdrv->dynids.lock);
 
-       if (get_driver(&pdrv->drv)) {
-               retval = driver_attach(&pdrv->drv);
-               put_driver(&pdrv->drv);
-       }
+       retval = driver_attach(&pdrv->drv);
 
        if (retval)
                return retval;
index d40ff95688135ce82a1c4ccbfac6d129104cd874..54c493b4226ba6c99dbf09a0ed7529ec90134efe 100644 (file)
@@ -71,10 +71,7 @@ ssize_t usb_store_new_id(struct usb_dynids *dynids,
        list_add_tail(&dynid->node, &dynids->list);
        spin_unlock(&dynids->lock);
 
-       if (get_driver(driver)) {
-               retval = driver_attach(driver);
-               put_driver(driver);
-       }
+       retval = driver_attach(driver);
 
        if (retval)
                return retval;