2012-11-22 14 views
6

Ich schreibe einen Linux-Block-Gerätetreiber und ich habe eine Menge der Initialisierung Sachen arbeiten. Jedoch, wenn ich schließlich add_disk() aufrufen, hängt das Modul während insmod.add_disk() hängt an insmod

Das Snippet anstößigen ist hier:

set_capacity(gendisk, dev->nsectors); 
add_disk(gendisk); 

//this line is never reached 

Antwort

6

Dies scheint mit set_capacity()durch Einstellen der Kapazität verursacht werden, bevor den Datenträger hinzufügen. Nach this mailing list, add_disk sollte auf einem Gendisk mit gendisk->capacity = 0 aufgerufen werden, sonst hängt es in check_partition().

Die folgende scheint zu funktionieren:

set_capacity(gendisk, 0) 
add_disk(gendisk); 
set_capacity(gendisk, dev->nsectors);