* Fixing random corruption in raw IO on 2.2.x kernel with bigmem enabled
@ 2000-12-06 17:28 Peng Dai
2000-12-06 18:26 ` Stephen C. Tweedie
0 siblings, 1 reply; 2+ messages in thread
From: Peng Dai @ 2000-12-06 17:28 UTC (permalink / raw)
To: linux-kernel; +Cc: Larry Woodman, David Winchell
[-- Attachment #1: Type: text/plain, Size: 1460 bytes --]
Hi,
This patch fixes a subtle corruption when doing raw IO on the 2.2.x
kernel
with bigmem enabled. The problem was first reported by Markus Döhr while
running SAP DB on a variation of the 2.2.16 kernel with among others the
following patches installed,
> linux-2.2.16-rawio.patch
> linux-2.2.16-raw-fixup.patch
> linux-2.2.16-raw-fixup2.patch
> linux-2.2.16-bigmem.patch
> linux-2.2.16-bigmem-raw.patch
> linux-2.2.16-bigmem-dcache.patch
> linux-2.2.16-bigmem-initrd.patch
See http://marc.theaimsgroup.com/?l=linux-kernel&m=97038067229365&w=2
for the original description.
The corruption is caused by a bug in kiobuf_copy_bounce in fs/iobuf.c -
the
bigmem page containing the user data is not always copied to its
associated
bounce buffer. This would occur when an array of pages (>1) are passed
to
kiobuf_copy_bounce and a normal page happens to appear before a bigmem
page in the array, which in turn leads to the writing of uninitialized
(garbage)
pages to the raw device.
The corruption happens rather infrequently. It has been reproduced both
with
the SAP DB and without. It appears that intense paging activity
increases its
chance of occurrence.
Regards,
Peng Dai
Kernel Engineering Tel:
978-446-9166 ext. 276
Mission Critical Linux Inc. Fax:
978-446-9470
100 Foot of John Email:
dai@missioncriticallinux.com
Lowell, MA 01852
[-- Attachment #2: iobuf.c.patch --]
[-- Type: text/plain, Size: 485 bytes --]
--- linux/fs/iobuf.c.orig Tue Nov 28 13:54:26 2000
+++ linux/fs/iobuf.c Tue Nov 28 13:55:17 2000
@@ -213,10 +213,10 @@
unsigned long kin, kout;
int pagelen = length;
- if (bounce_page) {
- if ((pagelen+offset) > PAGE_SIZE)
- pagelen = PAGE_SIZE - offset;
-
+ if ((pagelen+offset) > PAGE_SIZE)
+ pagelen = PAGE_SIZE - offset;
+
+ if (bounce_page) {
if (direction == COPY_TO_BOUNCE) {
kin = kmap(page, KM_READ);
kout = kmap(bounce_page, KM_WRITE);
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: Fixing random corruption in raw IO on 2.2.x kernel with bigmem enabled
2000-12-06 17:28 Fixing random corruption in raw IO on 2.2.x kernel with bigmem enabled Peng Dai
@ 2000-12-06 18:26 ` Stephen C. Tweedie
0 siblings, 0 replies; 2+ messages in thread
From: Stephen C. Tweedie @ 2000-12-06 18:26 UTC (permalink / raw)
To: Peng Dai; +Cc: linux-kernel, Larry Woodman, David Winchell
Hi,
On Wed, Dec 06, 2000 at 12:28:54PM -0500, Peng Dai wrote:
>
> This patch fixes a subtle corruption when doing raw IO on the 2.2.x
> kernel
> with bigmem enabled. The problem was first reported by Markus Döhr while
That patch is already part of the full bugfixed raw IO patchset I
posted out a few days ago. Look for kiobuf-2.2.18pre24-B.tar.gz in
ftp.uk.linux.org:/pub/linux/sct/fs/raw-io
or ftp.*.kernel.org:/pub/linux/kernel/people/sct/raw-io
Cheers,
Stephen
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2000-12-06 18:59 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2000-12-06 17:28 Fixing random corruption in raw IO on 2.2.x kernel with bigmem enabled Peng Dai
2000-12-06 18:26 ` Stephen C. Tweedie
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox