diff options
author | Logan Gunthorpe <logang@deltatee.com> | 2017-03-17 19:48:10 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-03-21 06:44:32 +0100 |
commit | 92a3fa075d3d2716b9c662814540f1d660cbf2f5 (patch) | |
tree | d301f0b5b8a991f7b7e4f8c6c3cb5283f581cca7 /drivers/dax/dax.c | |
parent | device-dax: fix cdev leak (diff) | |
download | linux-92a3fa075d3d2716b9c662814540f1d660cbf2f5.tar.xz linux-92a3fa075d3d2716b9c662814540f1d660cbf2f5.zip |
device-dax: utilize new cdev_device_add helper function
Replace the open coded registration of the cdev and dev with the
new device_add_cdev() helper. The helper replaces a common pattern by
taking the proper reference against the parent device and adding both
the cdev and the device.
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to '')
-rw-r--r-- | drivers/dax/dax.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/drivers/dax/dax.c b/drivers/dax/dax.c index a5ed59a5a968..e5f85550dc25 100644 --- a/drivers/dax/dax.c +++ b/drivers/dax/dax.c @@ -677,8 +677,6 @@ static void dax_dev_release(struct device *dev) static void kill_dax_dev(struct dax_dev *dax_dev) { - struct cdev *cdev = &dax_dev->cdev; - /* * Note, rcu is not protecting the liveness of dax_dev, rcu is * ensuring that any fault handlers that might have seen @@ -689,7 +687,6 @@ static void kill_dax_dev(struct dax_dev *dax_dev) dax_dev->alive = false; synchronize_rcu(); unmap_mapping_range(dax_dev->inode->i_mapping, 0, 0, 1); - cdev_del(cdev); } static void unregister_dax_dev(void *dev) @@ -699,7 +696,8 @@ static void unregister_dax_dev(void *dev) dev_dbg(dev, "%s\n", __func__); kill_dax_dev(dax_dev); - device_unregister(dev); + cdev_device_del(&dax_dev->cdev, dev); + put_device(dev); } struct dax_dev *devm_create_dax_dev(struct dax_region *dax_region, @@ -750,18 +748,13 @@ struct dax_dev *devm_create_dax_dev(struct dax_region *dax_region, goto err_inode; } - /* device_initialize() so cdev can reference kobj parent */ + /* from here on we're committed to teardown via dax_dev_release() */ device_initialize(dev); cdev = &dax_dev->cdev; cdev_init(cdev, &dax_fops); cdev->owner = parent->driver->owner; - cdev->kobj.parent = &dev->kobj; - rc = cdev_add(&dax_dev->cdev, dev_t, 1); - if (rc) - goto err_cdev; - /* from here on we're committed to teardown via dax_dev_release() */ dax_dev->num_resources = count; dax_dev->alive = true; dax_dev->region = dax_region; @@ -773,7 +766,8 @@ struct dax_dev *devm_create_dax_dev(struct dax_region *dax_region, dev->groups = dax_attribute_groups; dev->release = dax_dev_release; dev_set_name(dev, "dax%d.%d", dax_region->id, dax_dev->id); - rc = device_add(dev); + + rc = cdev_device_add(cdev, dev); if (rc) { kill_dax_dev(dax_dev); put_device(dev); @@ -786,8 +780,6 @@ struct dax_dev *devm_create_dax_dev(struct dax_region *dax_region, return dax_dev; - err_cdev: - iput(dax_dev->inode); err_inode: ida_simple_remove(&dax_minor_ida, minor); err_minor: |