Skip to content

Commit

Permalink
null_blk: Fix error path in module initialization
Browse files Browse the repository at this point in the history
Module couldn't release resource properly during the initialization. To
fix this issue, we will clean up the proper resource before returning.

Signed-off-by: Minfei Huang <mnfhuang@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
  • Loading branch information
Minfei Huang authored and Jens Axboe committed Dec 8, 2015
1 parent 4158624 commit af096e2
Showing 1 changed file with 16 additions and 7 deletions.
23 changes: 16 additions & 7 deletions drivers/block/null_blk.c
Original file line number Diff line number Diff line change
Expand Up @@ -766,7 +766,9 @@ static int null_add_dev(void)

static int __init null_init(void)
{
int ret = 0;
unsigned int i;
struct nullb *nullb;

if (bs > PAGE_SIZE) {
pr_warn("null_blk: invalid block size\n");
Expand Down Expand Up @@ -808,22 +810,29 @@ static int __init null_init(void)
0, 0, NULL);
if (!ppa_cache) {
pr_err("null_blk: unable to create ppa cache\n");
return -ENOMEM;
ret = -ENOMEM;
goto err_ppa;
}
}

for (i = 0; i < nr_devices; i++) {
if (null_add_dev()) {
unregister_blkdev(null_major, "nullb");
goto err_ppa;
}
ret = null_add_dev();
if (ret)
goto err_dev;
}

pr_info("null: module loaded\n");
return 0;
err_ppa:

err_dev:
while (!list_empty(&nullb_list)) {
nullb = list_entry(nullb_list.next, struct nullb, list);
null_del_dev(nullb);
}
kmem_cache_destroy(ppa_cache);
return -EINVAL;
err_ppa:
unregister_blkdev(null_major, "nullb");
return ret;
}

static void __exit null_exit(void)
Expand Down

0 comments on commit af096e2

Please sign in to comment.