Bir diski diskten okumak için kendi bio isteğimi nasıl oluşturabilirim?Linux çekirdeğinde bir bio isteği kullanarak bir sektör nasıl okunmalı
Aşağıdakileri deniyorum ama sistemi donduruyor.
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");
}
Çok daha iyi çalışan sb_bread() kullanmayı denedim. Ama yine de sürücü özel istek fonksiyonu içinde engeller. (Bazı kilit nedeniyle tahmin ediyorum). Benim elde etmeye çalıştığım şey, bloğa bir blok yazılmadan önce bloğu okumak istiyorum, bunu blok cihazının make_request_fn'sini değiştirerek ele alıyorum. –