add_disk() hangs on insmod

insmod, linux-device-driver

Solution

This appears to be caused by setting the capacity with `set_capacity()` before adding the disk. According to this mailing list, `add_disk` should be called on a gendisk with `gendisk->capacity = 0`, otherwise it hangs in `check_partition()`.

The following appears to work:

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

Problem

I am writing a Linux block device driver and I have a lot of the initialisation stuff working. However, when I finally call `add_disk()`, the module hangs during `insmod`. The offending snippet is here: ``` set_capacity(gendisk, dev->nsectors); add_disk(gendisk); //this line is never reached ```

Original source