aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/sysdev/axonram.c
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2017-03-08 08:56:05 -0500
committerJens Axboe <axboe@fb.com>2017-03-08 12:55:40 -0500
commit672a2c87c83649fb0167202342ce85af9a3b4f1c (patch)
treeb871c356005788f0738f963e0aacc154c9d88bee /arch/powerpc/sysdev/axonram.c
parent79bd99596b7305ab08109a8bf44a6a4511dbf1cd (diff)
axonram: Fix gendisk handling
It is invalid to call del_gendisk() when disk->queue is NULL. Fix error handling in axon_ram_probe() to avoid doing that. Also del_gendisk() does not drop a reference to gendisk allocated by alloc_disk(). That has to be done by put_disk(). Add that call where needed. Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'arch/powerpc/sysdev/axonram.c')
-rw-r--r--arch/powerpc/sysdev/axonram.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/powerpc/sysdev/axonram.c b/arch/powerpc/sysdev/axonram.c
index ada29eaed6e2..f523ac883150 100644
--- a/arch/powerpc/sysdev/axonram.c
+++ b/arch/powerpc/sysdev/axonram.c
@@ -274,7 +274,9 @@ failed:
274 if (bank->disk->major > 0) 274 if (bank->disk->major > 0)
275 unregister_blkdev(bank->disk->major, 275 unregister_blkdev(bank->disk->major,
276 bank->disk->disk_name); 276 bank->disk->disk_name);
277 del_gendisk(bank->disk); 277 if (bank->disk->flags & GENHD_FL_UP)
278 del_gendisk(bank->disk);
279 put_disk(bank->disk);
278 } 280 }
279 device->dev.platform_data = NULL; 281 device->dev.platform_data = NULL;
280 if (bank->io_addr != 0) 282 if (bank->io_addr != 0)
@@ -299,6 +301,7 @@ axon_ram_remove(struct platform_device *device)
299 device_remove_file(&device->dev, &dev_attr_ecc); 301 device_remove_file(&device->dev, &dev_attr_ecc);
300 free_irq(bank->irq_id, device); 302 free_irq(bank->irq_id, device);
301 del_gendisk(bank->disk); 303 del_gendisk(bank->disk);
304 put_disk(bank->disk);
302 iounmap((void __iomem *) bank->io_addr); 305 iounmap((void __iomem *) bank->io_addr);
303 kfree(bank); 306 kfree(bank);
304 307