11
Jak utworzyć własne żądanie bio do odczytu sektora z dysku?Jak odczytać sektor za pomocą żądania bio w jądrze Linuksa
Próbuję wykonać następujące czynności, ale zamraża system.
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");
}
Próbowałem używać sb_bread(), który działa znacznie lepiej. Ale nadal blokuje się w funkcji niestandardowego żądania sterownika. (Zgaduję, że to z powodu jakiegoś zamka). Próbuję osiągnąć to, że chcę przeczytać blok przed zapisaniem do tego bloku, zajmuję się tym, zastępując make_request_fn urządzenia blokowego. –