Re: mmap returns incorrect data

From: Russell King
Date: Thu Apr 29 2004 - 18:48:22 EST


On Thu, Apr 29, 2004 at 05:12:43PM -0600, marcus hall wrote:
> I have a system based on 2.5.59 kernel for arm. This system was previously
> running OK with all filesystems on a stratoflash chip, but I have recently
> moved the filesystems to a compact flash chip. Some filesystems are
> cramfs, and some have changed from jffs2 to ext3 along with the move.

You _really_ don't want to use ext3 on CF unless you want to wear the
flash quickly. Just because a filesystem has journaling does _not_
mean that its suitable for flash (in fact, it may be far worse for
flash than its non-journaled counterpart, as in this case.)

> I am having trouble with ldconfig not recognizing some files as being valid.
> The files that cause the problem are files that are on an ext3 filesystem
> on the CF. Other files on a cramfs filesystem seem to work reliably.
> It seems that ldconfig mmap()s the file into its address space, and what
> it sees doesn't match what is in the file. If I pre-read the file before
> running ldconfig, so that the contents get into the cache, then ldconfig
> proceeds normally.

This is an IDE driver bug - it performs PIO but does not ensure that the
individual pages are properly flushed to RAM before telling the kernel
that the IO is complete. (If someone wants to disagree, look at how
rd.c does flush_dcache_page, and see previous discussions on lkml
concerning this.)

--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/