[PATCH] Fix failure paths in modules init in umem.c
If register_blkdev() or alloc-disk fail in mm_init() after pci_register_driver() succeeds, then mm_pci_driver is not unregistered properly: Cc: Philip Guo <pg@cs.stanford.edu> Signed-off-by: Neil Brown <neilb@suse.de> Cc: Jens Axboe <jens.axboe@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
9540f75b2b
commit
5a243e0e97
|
@ -1179,8 +1179,10 @@ static int __init mm_init(void)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
err = major_nr = register_blkdev(0, "umem");
|
err = major_nr = register_blkdev(0, "umem");
|
||||||
if (err < 0)
|
if (err < 0) {
|
||||||
|
pci_unregister_driver(&mm_pci_driver);
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < num_cards; i++) {
|
for (i = 0; i < num_cards; i++) {
|
||||||
mm_gendisk[i] = alloc_disk(1 << MM_SHIFT);
|
mm_gendisk[i] = alloc_disk(1 << MM_SHIFT);
|
||||||
|
@ -1207,6 +1209,7 @@ static int __init mm_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
pci_unregister_driver(&mm_pci_driver);
|
||||||
unregister_blkdev(major_nr, "umem");
|
unregister_blkdev(major_nr, "umem");
|
||||||
while (i--)
|
while (i--)
|
||||||
put_disk(mm_gendisk[i]);
|
put_disk(mm_gendisk[i]);
|
||||||
|
|
Loading…
Reference in New Issue