我正在编写一个Linux块设备驱动程序,我有很多初始化工作。但是,当我最终致电add_disk()
时,模块会在insmod
期间挂起。
有问题的片段在这里:
set_capacity(gendisk, dev->nsectors);
add_disk(gendisk);
//this line is never reached
答案 0 :(得分:6)
这似乎是由于在添加磁盘之前使用set_capacity()
设置容量所致。根据{{3}},add_disk
应在带有gendisk->capacity = 0
的gendisk上调用,否则会在check_partition()
中挂起。
以下似乎有效:
set_capacity(gendisk, 0)
add_disk(gendisk);
set_capacity(gendisk, dev->nsectors);