BIO Usage Error or Conflicting Designs
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Quoted 5 lines
Is this with the highmem debug stuff enabled? That's the only way I can see this BUG triggering, otherwise
q->bounce_pfn_cannot_ be smaller than themax_pfn.
Have you tested that?
Unless I misread arch/i386/kernel/setup.c, line 740 to 760, max_pfn is the upper end of the highmem area, if highmem is configured. For non-highmem setup, it's set to min(system_memory, 4 GB). It was a local variable within setup_arch, and someone made it a global variable.
I.e. max_pfn is 1 GB with Andre's setup.
His patch doesn't touch the bounce limit, the default limit from blk_queue_make_request() is used: BLK_BOUNCE_HIGH, which is max_low_pfn.
max_low_pfn is 896 MB.
--> BUG in create_bounce(), because a request comes in with a bounce limit less than the total system memory, and no highmem configured.
--
Manfred
Quoted 15 lines · Manfred Spraul
Quoted 5 lines
Is this with the highmem debug stuff enabled? That's the only way I can see this BUG triggering, otherwise
q->bounce_pfn_cannot_ be smaller than themax_pfn.Have you tested that?
Unless I misread
arch/i386/kernel/setup.c, line 740 to 760,max_pfnis the upper end of the highmem area, if highmem is configured. For non-highmem setup, it's set tomin(system_memory, 4 GB). It was a local variable withinsetup_arch, and someone made it a global variable.I.e.
max_pfnis 1 GB with Andre's setup.
Quoted 7 lines
His patch doesn't touch the bounce limit, the default limit from
blk_queue_make_request()is used:BLK_BOUNCE_HIGH, which ismax_low_pfn.
max_low_pfnis 896 MB.--> BUG in
create_bounce(), because a request comes in with a bounce limit less than the total system memory, and no highmem configured.
Indeed, I misread the max_pfn stuff when I added that.
block/ll_rw_blk.c renamed from opt/kernel/linux-2.5.2-pre11/drivers/block/ll_rw_blk.c +4 -0
@@ -1711,7 +1705,11 @@printk ("block: %d slots per queue, batch=%d\n" , queue_nr_requests, batch_requests); blk_max_low_pfn = max_low_pfn; +#ifdef CONFIG_HIGHMEM blk_max_pfn = max_pfn; +#else + blk_max_pfn = max_low_pfn; +#endif #if defined(CONFIG_IDE ) && defined(CONFIG_BLK_DEV_IDE )ide_init ();/* this MUST precede hd_init */
highmem.c renamed from opt/kernel/linux-2.5.2-pre11/mm/highmem.c +0 -6
@@ -367,12 +367,6 @@if (pfn >= blk_max_pfn)return ; -#ifndef CONFIG_HIGHMEM -/* -* should not hit for non-highmem case -*/ -BUG (); -#endif bio_gfp =GFP_NOHIGHIO ; pool = page_pool; }else {
Signature · 1 line
Jens Axboe