diff options
Diffstat (limited to 'drivers/scsi/sd.c')
| -rw-r--r-- | drivers/scsi/sd.c | 13 | 
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 352bc77b7c8..a45e12ac7e2 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -3116,10 +3116,6 @@ static int __init init_sd(void)  	if (err)  		goto err_out; -	err = scsi_register_driver(&sd_template.gendrv); -	if (err) -		goto err_out_class; -  	sd_cdb_cache = kmem_cache_create("sd_ext_cdb", SD_EXT_CDB_SIZE,  					 0, 0, NULL);  	if (!sd_cdb_cache) { @@ -3133,8 +3129,15 @@ static int __init init_sd(void)  		goto err_out_cache;  	} +	err = scsi_register_driver(&sd_template.gendrv); +	if (err) +		goto err_out_driver; +  	return 0; +err_out_driver: +	mempool_destroy(sd_cdb_pool); +  err_out_cache:  	kmem_cache_destroy(sd_cdb_cache); @@ -3157,10 +3160,10 @@ static void __exit exit_sd(void)  	SCSI_LOG_HLQUEUE(3, printk("exit_sd: exiting sd driver\n")); +	scsi_unregister_driver(&sd_template.gendrv);  	mempool_destroy(sd_cdb_pool);  	kmem_cache_destroy(sd_cdb_cache); -	scsi_unregister_driver(&sd_template.gendrv);  	class_unregister(&sd_disk_class);  	for (i = 0; i < SD_MAJORS; i++)  |