]> Zhao Yanbai Git Server - minix.git/commit
AVFS: Use scratchpad instead of m_in to pass around file descriptors
authorThomas Veerman <thomas@minix3.org>
Wed, 21 Dec 2011 10:52:51 +0000 (10:52 +0000)
committerThomas Veerman <thomas@minix3.org>
Wed, 21 Dec 2011 10:52:51 +0000 (10:52 +0000)
commitde5a9a3e8bbfec66aefafb16e109a0680ef13f97
tree7d279b465e0aacdd97a1cefcec2797a4368689de
parentc89bc850091b8dede71c81e19d681e4aefbbbf4e
AVFS: Use scratchpad instead of m_in to pass around file descriptors

Some code relies on having the file descriptor in m_in.fd. Consequently,
m_in is not only used to provide syscall parameters from user space to
VFS, but also as a global variable to store temporary data within VFS.
This has the ugly side effect that m_in gets overwritten during core
dumping.*

To work around this problem VFS now uses a so called "scratchpad" to
store temporary data that has to be globally accessible. This is a simple
table indexed by process number, just like fproc. The scratchpad allows
us to store the buffer pointer and buffer size for suspended system calls
(i.e., read, write, open, lock) instead of using fproc. This makes fproc
a bit smaller and fproc iterators a bit faster. Moreover, suspension of
processes becomes simpler altogether and suspended operations on pipes
are now less of a special case.

* This patch fixes a bug where due to unexpected m_in overwriting a
coredump would fail, and consequently resources are leaked. The coredump
was triggered with:
$ a() { a; }
$ a
12 files changed:
servers/avfs/device.c
servers/avfs/fproc.h
servers/avfs/glo.h
servers/avfs/lock.c
servers/avfs/main.c
servers/avfs/misc.c
servers/avfs/open.c
servers/avfs/pipe.c
servers/avfs/proto.h
servers/avfs/read.c
servers/avfs/scratchpad.h [new file with mode: 0644]
servers/avfs/table.c