From: Chris Wright Date: Mon, 31 Oct 2005 20:56:34 +0000 (-0800) Subject: Add cfq io scheduler fix from Jens Axboe X-Git-Tag: v2.6.14.1~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1876efb4444c275f3aabbc79541edac189e57d91;p=thirdparty%2Fkernel%2Fstable-queue.git Add cfq io scheduler fix from Jens Axboe --- diff --git a/queue/cfq-io-sched-fix.patch b/queue/cfq-io-sched-fix.patch new file mode 100644 index 00000000000..1e59c36347c --- /dev/null +++ b/queue/cfq-io-sched-fix.patch @@ -0,0 +1,86 @@ +From stable-bounces@linux.kernel.org Mon Oct 31 04:51:49 2005 +Date: Mon, 31 Oct 2005 13:52:39 +0100 +From: Jens Axboe +To: stable@kernel.org +Cc: +Subject: [stable] [axboe@suse.de: Re: 2.6.14: Oops on suspend after + on-the-fly switch to anticipatory i/o scheduler - PowerBook5, 4] + +Hi, + +I'd like for the below to be included in 2.6.14.1 as it fixes a reported +oops when switching away from the cfq io scheduler. + +Date: Mon, 31 Oct 2005 13:51:09 +0100 +From: Jens Axboe +To: Tejun Heo +Cc: Paul Collins , linux-kernel@vger.kernel.org +Subject: [PATCH] Oops on suspend after on-the-fly switch to anticipatory i/o scheduler - PowerBook5, 4 + +Paul Collins wrote: +>I boot with elevator=cfq (wanted to try the ionice stuff, never got +>around to it). Having decided to go back to the anticipatory +>scheduler, I did the following: +> +># echo anticipatory > /sys/block/hda/queue/scheduler +># echo anticipatory > /sys/block/hdc/queue/scheduler +> +>A while later I did 'sudo snooze', which produced the Oops below. +> +>Booting with elevator=as and then changing to cfq, sleep works fine. +>But if I resume and change back to anticipatory I get a similar Oops +>on the next 'sudo snooze'. +> +> +> Oops: kernel access of bad area, sig: 11 [#1] +> NIP: C01E1948 LR: C01D6A60 SP: EFBC5C20 REGS: efbc5b70 TRAP: 0300 +>Not tainted +> MSR: 00001032 EE: 0 PR: 0 FP: 0 ME: 1 IR/DR: 11 +> DAR: 00000020, DSISR: 40000000 +> TASK = efb012c0[1213] 'pmud' THREAD: efbc4000 +> Last syscall: 54 GPR00: 00080000 EFBC5C20 EFB012C0 EFE9E044 +>EFBC5CE8 00000002 00000000 C03B0000 GPR08: C046E5D8 00000000 +>C03B47C8 E6A58360 22042422 1001E4DC 10010000 10000000 GPR16: +>10000000 10000000 10000000 7FE4EB40 10000000 10000000 10010000 +>C0400000 GPR24: C0380000 00000002 00000002 C046E0C0 00000000 +>00000002 00000000 EFBC5CE8 NIP [c01e1948] as_insert_request+0xa8/0x6b0 +> LR [c01d6a60] __elv_add_request+0xa0/0x100 +> Call trace: +> [c01d6a60] __elv_add_request+0xa0/0x100 +> [c01ffb84] ide_do_drive_cmd+0xb4/0x190 +> [c01fc1c0] generic_ide_suspend+0x80/0xa0 +> [c01d4574] suspend_device+0x104/0x160 +> [c01d47c0] device_suspend+0x120/0x330 +> [c03f3b50] pmac_suspend_devices+0x50/0x1b0 +> [c03f4294] pmu_ioctl+0x344/0x9b0 +> [c0082aa4] do_ioctl+0x84/0x90 +> [c0082b3c] vfs_ioctl+0x8c/0x460 +> [c0082f50] sys_ioctl+0x40/0x80 +> [c0004850] ret_from_syscall+0x0/0x4c + +Don't clear ->elevator_data on exit, if we are switching queues we are +overwriting the data of the new io scheduler. + +Signed-off-by: Jens Axboe +Signed-off-by: Chris Wright +--- + + drivers/block/cfq-iosched.c | 4 +--- + 1 files changed, 1 insertion(+), 3 deletions(-) + +Index: linux-2.6.14.y/drivers/block/cfq-iosched.c +=================================================================== +--- linux-2.6.14.y.orig/drivers/block/cfq-iosched.c ++++ linux-2.6.14.y/drivers/block/cfq-iosched.c +@@ -2260,10 +2260,8 @@ static void cfq_put_cfqd(struct cfq_data + if (!atomic_dec_and_test(&cfqd->ref)) + return; + +- blk_put_queue(q); +- + cfq_shutdown_timer_wq(cfqd); +- q->elevator->elevator_data = NULL; ++ blk_put_queue(q); + + mempool_destroy(cfqd->crq_pool); + kfree(cfqd->crq_hash); diff --git a/queue/series b/queue/series index 4c315c7d382..3f81cf89179 100644 --- a/queue/series +++ b/queue/series @@ -1,3 +1,4 @@ prism54_frame_size.patch xfs-modular-quota-build-fix.patch 4GB-memory-intel-dual-core.patch +cfq-io-sched-fix.patch