1831 /**
1832 * init_sd – entry point for this driver (both when built in or when
1833 * a module).
1834 *
1835 * Note: this function registers this driver with the scsi mid-level.
1836 **/
1837 static int __init init_sd(void)
1838 {
1839 int majors = 0, i, err;
1840
1841 SCSI_LOG_HLQUEUE(3, printk("init_sd: sd driver entry point/n"));
1842
1843 for (i = 0; i < SD_MAJORS; i++)
1844 if (register_blkdev(sd_major(i), "sd") == 0)
1845 majors++;
1846
1847 if (!majors)
1848 return -ENODEV;
1849
1850 err = class_register(&sd_disk_class);
1851 if (err)
1852 goto err_out;
1853
1854 err = scsi_register_driver(&sd_template.gendrv);
1855 if (err)
1856 goto err_out_class;
1857
1858 return 0;
1859
1860 err_out_class:
1861 class_unregister(&sd_disk_class);
1862 err_out:
1863 for (i = 0; i < SD_MAJORS; i++)
1864 unregister_blkdev(sd_major(i), "sd");
1865 return err;
1866 }
1867
1868 /**
1869 * exit_sd – exit point for this driver (when it is a module).
1870 *
1871 * Note: this function unregisters this driver from the scsi mid-level.
1872 **/
1873 static void __exit exit_sd(void)
1874 {
1875 int i;
1876
1877 SCSI_LOG_HLQUEUE(3, printk("exit_sd: exiting sd driver/n"));
1878
1879 scsi_unregister_driver(&sd_template.gendrv);
1880 class_unregister(&sd_disk_class);
1881
1882 for (i = 0; i < SD_MAJORS; i++)
1883 unregister_blkdev(sd_major(i), "sd");
1884 }
与一个赏心悦目的人错肩,真真实实的活着,也就够了。