2012-11-22 12 views
6

Sto scrivendo un driver di dispositivo a blocchi Linux e ho un sacco di roba di inizializzazione funzionante. Tuttavia, quando finalmente chiamo add_disk(), il modulo si blocca durante insmod.add_disk() si blocca su insmod

Il frammento offensivo è qui:

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

//this line is never reached 

risposta

6

Ciò sembra essere causato impostando la capacità con set_capacity()prima aggiungere il disco. Secondo this mailing list, add_disk deve essere chiamato su un gendisk con gendisk->capacity = 0, altrimenti si blocca in check_partition().

Il seguente sembra funzionare:

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