]> Zhao Yanbai Git Server - minix.git/commit
VFS: support for suspending close(2) for sockets 20/3420/1
authorDavid van Moolenbroek <david@minix3.org>
Mon, 25 Jul 2016 11:11:37 +0000 (11:11 +0000)
committerDavid van Moolenbroek <david@minix3.org>
Thu, 9 Mar 2017 23:39:50 +0000 (23:39 +0000)
commit491d647a3b6c5e781017a8842cade543fc0b74a3
treec2a7a5de693ff95734c9d73a281776e5b6bff6e0
parent722cbc6186261c8af242e20abae1d1fd67d6e387
VFS: support for suspending close(2) for sockets

This change effectively adds the VFS side of support for the SO_LINGER
socket option, by allowing file descriptor close operations to be
suspended (and later resumed) by socket drivers.  Currently, support
is limited to the close(2) system call--in all other cases where file
descriptors are closed (dup2, close-on-exec, process exit..), the
close operation still completes instantly.  As a general policy, the
close(2) return value will always indicate that the file descriptor
has been closed: either 0, or -1 with errno set to EINPROGRESS.  The
latter error may be thrown only when a suspended close is interrupted
by a signal.

As necessary for UDS, this change also introduces a closenb(2) system
call extension, allowing the caller to bypass blocking SO_LINGER close
behavior.  This extension allows UDS to avoid blocking on closing the
last reference to an in-flight file descriptor, in an atomic fashion.
The extension is currently part of libsys, but there is no reason why
userland would not be allowed to make this call, so it is deliberately
not protected from use by userland.

Change-Id: Iec77d6665232110346180017fc1300b1614910b7
12 files changed:
minix/include/minix/ipc.h
minix/include/minix/syslib.h
minix/lib/libc/sys/close.c
minix/lib/libsys/Makefile
minix/lib/libsys/closenb.c [new file with mode: 0644]
minix/servers/vfs/exec.c
minix/servers/vfs/filedes.c
minix/servers/vfs/misc.c
minix/servers/vfs/open.c
minix/servers/vfs/proto.h
minix/servers/vfs/sdev.c
minix/servers/vfs/socket.c