Commit 5a243e0e authored by NeilBrown's avatar NeilBrown Committed by Linus Torvalds

[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: default avatarNeil Brown <neilb@suse.de>
Cc: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 9540f75b
...@@ -1179,8 +1179,10 @@ static int __init mm_init(void) ...@@ -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) ...@@ -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]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment