aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2016-06-15 17:59:17 -0400
committerDan Williams <dan.j.williams@intel.com>2016-06-15 17:59:17 -0400
commitf02716db951c5e01acf48df9fe815007674fecff (patch)
tree011a5c22e8ff2c8fa10379c1a7ec84e1f54aae3e
parent5edb56491d4812c42175980759da53388e5d86f5 (diff)
libnvdimm: use devm_add_action_or_reset()
Clean up needless calls to the action routine by letting devm_add_action_or_reset() call it automatically. This does cause the disk to registered and immediately unregistered when a memory allocation fails, but the block layer should be prepared for such an event. Reported-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r--drivers/nvdimm/blk.c11
-rw-r--r--drivers/nvdimm/pmem.c14
2 files changed, 10 insertions, 15 deletions
diff --git a/drivers/nvdimm/blk.c b/drivers/nvdimm/blk.c
index 495e06d9f7e7..dfe691cf4d74 100644
--- a/drivers/nvdimm/blk.c
+++ b/drivers/nvdimm/blk.c
@@ -267,10 +267,8 @@ static int nsblk_attach_disk(struct nd_namespace_blk *nsblk)
267 q = blk_alloc_queue(GFP_KERNEL); 267 q = blk_alloc_queue(GFP_KERNEL);
268 if (!q) 268 if (!q)
269 return -ENOMEM; 269 return -ENOMEM;
270 if (devm_add_action(dev, nd_blk_release_queue, q)) { 270 if (devm_add_action_or_reset(dev, nd_blk_release_queue, q))
271 blk_cleanup_queue(q);
272 return -ENOMEM; 271 return -ENOMEM;
273 }
274 272
275 blk_queue_make_request(q, nd_blk_make_request); 273 blk_queue_make_request(q, nd_blk_make_request);
276 blk_queue_max_hw_sectors(q, UINT_MAX); 274 blk_queue_max_hw_sectors(q, UINT_MAX);
@@ -282,10 +280,6 @@ static int nsblk_attach_disk(struct nd_namespace_blk *nsblk)
282 disk = alloc_disk(0); 280 disk = alloc_disk(0);
283 if (!disk) 281 if (!disk)
284 return -ENOMEM; 282 return -ENOMEM;
285 if (devm_add_action(dev, nd_blk_release_disk, disk)) {
286 put_disk(disk);
287 return -ENOMEM;
288 }
289 283
290 disk->driverfs_dev = dev; 284 disk->driverfs_dev = dev;
291 disk->first_minor = 0; 285 disk->first_minor = 0;
@@ -296,6 +290,9 @@ static int nsblk_attach_disk(struct nd_namespace_blk *nsblk)
296 set_capacity(disk, 0); 290 set_capacity(disk, 0);
297 add_disk(disk); 291 add_disk(disk);
298 292
293 if (devm_add_action_or_reset(dev, nd_blk_release_disk, disk))
294 return -ENOMEM;
295
299 if (nsblk_meta_size(nsblk)) { 296 if (nsblk_meta_size(nsblk)) {
300 int rc = nd_integrity_init(disk, nsblk_meta_size(nsblk)); 297 int rc = nd_integrity_init(disk, nsblk_meta_size(nsblk));
301 298
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
index 608fc4464574..ba253df6233f 100644
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@ -195,7 +195,7 @@ static void pmem_release_queue(void *q)
195 blk_cleanup_queue(q); 195 blk_cleanup_queue(q);
196} 196}
197 197
198void pmem_release_disk(void *disk) 198static void pmem_release_disk(void *disk)
199{ 199{
200 del_gendisk(disk); 200 del_gendisk(disk);
201 put_disk(disk); 201 put_disk(disk);
@@ -269,10 +269,8 @@ static int pmem_attach_disk(struct device *dev,
269 * At release time the queue must be dead before 269 * At release time the queue must be dead before
270 * devm_memremap_pages is unwound 270 * devm_memremap_pages is unwound
271 */ 271 */
272 if (devm_add_action(dev, pmem_release_queue, q)) { 272 if (devm_add_action_or_reset(dev, pmem_release_queue, q))
273 blk_cleanup_queue(q);
274 return -ENOMEM; 273 return -ENOMEM;
275 }
276 274
277 if (IS_ERR(addr)) 275 if (IS_ERR(addr))
278 return PTR_ERR(addr); 276 return PTR_ERR(addr);
@@ -288,10 +286,6 @@ static int pmem_attach_disk(struct device *dev,
288 disk = alloc_disk_node(0, nid); 286 disk = alloc_disk_node(0, nid);
289 if (!disk) 287 if (!disk)
290 return -ENOMEM; 288 return -ENOMEM;
291 if (devm_add_action(dev, pmem_release_disk, disk)) {
292 put_disk(disk);
293 return -ENOMEM;
294 }
295 289
296 disk->fops = &pmem_fops; 290 disk->fops = &pmem_fops;
297 disk->queue = q; 291 disk->queue = q;
@@ -305,6 +299,10 @@ static int pmem_attach_disk(struct device *dev,
305 nvdimm_badblocks_populate(to_nd_region(dev->parent), &pmem->bb, res); 299 nvdimm_badblocks_populate(to_nd_region(dev->parent), &pmem->bb, res);
306 disk->bb = &pmem->bb; 300 disk->bb = &pmem->bb;
307 add_disk(disk); 301 add_disk(disk);
302
303 if (devm_add_action_or_reset(dev, pmem_release_disk, disk))
304 return -ENOMEM;
305
308 revalidate_disk(disk); 306 revalidate_disk(disk);
309 307
310 return 0; 308 return 0;