में जैव अनुरोध का उपयोग करके किसी क्षेत्र को कैसे पढ़ा जाए डिस्क डिस्क से किसी क्षेत्र को पढ़ने के लिए मैं अपना स्वयं का जैव अनुरोध कैसे बना सकता हूं?लिनक्स कर्नेल
मैं निम्नलिखित कोशिश कर रहा हूं लेकिन यह सिस्टम को जमा करता है।
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");
}
मैंने sb_bread() का उपयोग करने की कोशिश की जो बहुत बेहतर काम करता है। लेकिन फिर भी यह ड्राइवर कस्टम अनुरोध समारोह के भीतर ब्लॉक करता है। (मैं कुछ लॉक के कारण इसकी अनुमान लगा रहा हूं)। जो मैं हासिल करने की कोशिश कर रहा हूं वह है कि मैं ब्लॉक को लिखने से पहले ब्लॉक को पढ़ना चाहता हूं, मैं ब्लॉक डिवाइस के make_request_fn को बदलकर इसे संभाल रहा हूं। –