linux启动之scsi和ata的初始化

static int __init init_scsi(void)
{
    int error;

    error = scsi_init_queue();
    if (error)
        return error;
    error = scsi_init_procfs();
    if (error)
        goto cleanup_queue;
    error = scsi_init_devinfo();
    if (error)
        goto cleanup_procfs;
    error = scsi_init_hosts();
    if (error)
        goto cleanup_devlist;
    error = scsi_init_sysctl();
    if (error)
        goto cleanup_hosts;
    error = scsi_sysfs_register();
    if (error)
        goto cleanup_sysctl;

    scsi_netlink_init();

    printk(KERN_NOTICE "SCSI subsystem initialized\n");
    return 0;

cleanup_sysctl:
    scsi_exit_sysctl();
cleanup_hosts:
    scsi_exit_hosts();
cleanup_devlist:
    scsi_exit_devinfo();
cleanup_procfs:
    scsi_exit_procfs();
cleanup_queue:
    scsi_exit_queue();
    printk(KERN_ERR "SCSI subsystem failed to initialize, error = %d\n",
           -error);
    return error;
}


[    0.260628] SCSI subsystem initialized
[    0.260660] libata version 3.00 loaded.


ata/libata-core.c

static int __init ata_init(void)

{
    int rc;

    ata_parse_force_param();

    rc = ata_sff_init();
    if (rc) {
        kfree(ata_force_tbl);
        return rc;
    }

    libata_transport_init();
    ata_scsi_transport_template = ata_attach_transport();
    if (!ata_scsi_transport_template) {
        ata_sff_exit();
        rc = -ENOMEM;
        goto err_out;
    }

    printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n");
    return 0;

err_out:
    return rc;
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。