some files written via mmap end up corrupted

Mikhail Teterin mi+kde at aldan.algebra.com
Tue Nov 22 12:48:03 GMT 2005


On Tuesday 22 November 2005 02:45 am, Dan Nelson wrote:
= In the last episode (Nov 21), Mikhail Teterin said:
= > I must not be using the API properly :-(
= > 
= > The writes to the mmap-ed area and then fsync-s the opened file,
= > munmaps it, and exits.
= > 
= > Sometimes, the files end up corrupted at the end, however -- in about
= > 10% of cases.
= 
= What kind of corruption are you seeing?  Blocks of zeroes?

Hard to say -- the files are (supposed to be) gzip-ed at the end. But
`gzip -t' detects corruption in some of them.

= Maybe you need to call msync() before unmapping the region? Or call
= munmap before fsync.

mmap(2) page says, msync() is obsolete now, and that fsync(2) "will
flush all dirty data and metadata associated with a file, including
dirty NOSYNC VM data, to physical media"

= Can't tell that for sure without seeing the code :)

The ending sequence was fsync->close->munmap. I changed it to
fsync->munmap->close (not that it should matter), and am going to try
again now.

mmap is such a beautiful interface, too bad people don't use it and it
bitrots :-(

Thanks!

	-mi



More information about the freebsd-questions mailing list