Subject: kern/1309: [dM] nullfs & maybe others break mmap()
To: None <gnats-bugs@gnats.netbsd.org>
From: der Mouse <mouse@Collatz.McRCIM.McGill.EDU>
List: netbsd-bugs
Date: 08/02/1995 17:56:49
>Number:         1309
>Category:       kern
>Synopsis:       [dM] nullfs & maybe others break mmap()
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    kern-bug-people (Kernel Bug People)
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Aug  2 18:05:02 1995
>Last-Modified:
>Originator:     der Mouse
>Organization:
	Dis-
>Release:        -current as of a couple of weeks ago
>Environment:
	SPARC IPC, but it doesn't matter
>Description:
	The mechanisms (such as vnode_pager_setsize()) to keep the VM
	subsystem in sync with the filesystem do not work in the
	presence of nullfs.  This is because the ufs/ffs code is making
	all the correct callbacks into the VM subsystem, but it's
	making them with the underneath-nullfs vnodes, and the VM
	subsystem is using the nullfs-wrapped vnodes, so the VM
	subsystem ignores the calls and gets out of sync.

	The potential exists for similar things to happen with any
	filesystem layer that passes operations on to some other piece
	of code - it must make the VM subsystem callbacks itself, with
	the correct vnodes.
>How-To-Repeat:
	See recent discussion on tech-kern.  Briefly:
	# mount -t null /some/path /foo
	# cd /foo
	# sh -c 'while :; do echo foo; sleep 1; done' > file &
	# tail -f file > /dev/null &
	...wait a few seconds...
	# vi file
	...notice the ^@s at the end of the file, between where EOF was
	when tail started and where EOF is now...

	More convincingly, turn on the VDB_SIZE bit in vpagerdebug, do
	the above, and notice the complete lack of _any_ reports of
	calls to vnode_pager_setsize ('cause they're all made with
	vnodes to which no pagers are attached).
>Fix:
	(1) Don't use nullfs :-(
	(2) Fix nullfs :-)

					der Mouse

			    mouse@collatz.mcrcim.mcgill.edu
>Audit-Trail:
>Unformatted: