Date: Thu, 13 Dec 2001 13:40:46 -0800 (PST) From: Matthew Dillon <dillon@apollo.backplane.com> To: Thomas Zenker <thz@tuebingen.netsurf.de> Cc: hackers@freebsd.org Subject: Re: Found NFS data corruption bug... (was Re: NFS: How to make FreeBSD fall on its face in one easy step ) Message-ID: <200112132140.fBDLek699925@apollo.backplane.com> References: <59687.1008231593@winston.freebsd.org> <200112131058.fBDAwSR66790@apollo.backplane.com> <20011213221204.A2994@peotl.homeip.net>
next in thread | previous in thread | raw e-mail | index | archive | help
:Matt,
:
:what the hell, this seems to very near by a problem I wanted to
:report since a week:
:
:in a data acquisition I have a write process writing to a file
:backed shared mmapped ringbuffer. There can be several reader
:processes on this this ringbuffer. Now once i killed the writer for
:resizing of the ringbuffer and forgot about the readers. The writer
:truncated the database without unlinking it before. This lead the
:readers to be running for ever, it seemed so at least. After
:attaching with gdb I saw, that they were only page faulting nothing
:more, for ever....
:
:Something similar I saw with netscape going mad.
:
:cheers, Thomas
That's something else. There's no OS bug there. When you mmap()
a file only those pages that are within the file's boundries are
valid. So if you ftruncate() the file then all the pages occuring
after the (new) file EOF will become invalid and BUSfault if the
process touches them.
You touched upon the correct solution... remove() the file instead
of ftruncate()ing it. The file's data then remains intact for the
processes still referencing it.
The readers must be catching SIGBUS and retrying (not exiting),
causing them to run in a signal loop forever. This is a case of
bad programming. I've seen it before... there was a popular IRC
bot back in my BEST days which constantly got itself into infinite
loops because the guy who wrote it installed a signal handler for
SIGBUS.
-Matt
Matthew Dillon
<dillon@backplane.com>
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200112132140.fBDLek699925>
