¿Cómo puedo crear mi propia solicitud de bio para leer un sector de la unidad de disco?Cómo leer un sector utilizando una solicitud biológica en el núcleo de Linux
Estoy intentando lo siguiente, pero se congela el sistema.
static void read_bio()
{
struct bio *b;
struct page *p;
b = bio_alloc(GFP_KERNEL, 1);
if (!b) {
printk(KERN_INFO "bio allocation failed\n");
}
bio_init(b);
b->bi_sector = 10000;
b->bi_bdev = bd; /* "/dev/sda1" */
b->bi_end_io = bio_end_clone;
p = alloc_page(GFP_KERNEL);
if (!p) {
printk(KERN_INFO "page allocation failed\n");
}
bio_add_page(b, p, PAGE_SIZE, 0);
b->bi_private = p;
bio_get(b);
submit_bio(READ, b);
printk(KERN_DEBUG "submit read request\n");
}
He intentado usar sb_bread() que funciona mucho mejor. Pero aún bloquea dentro de la función de solicitud personalizada del controlador. (Supongo que es debido a un bloqueo). Lo que estoy tratando de lograr es que quiero leer el bloque antes de que ocurra una escritura en ese bloque, estoy manejando esto reemplazando el make_request_fn del dispositivo de bloque. –