diff options
| author | martin <martin@NetBSD.org> | 2020-04-22 18:07:37 +0000 |
|---|---|---|
| committer | martin <martin@NetBSD.org> | 2020-04-22 18:07:37 +0000 |
| commit | c88dcc6653087746748e1c142bfe8d2be855804e (patch) | |
| tree | 9005144cb05fa3203d4bfce0bb51007c486c9763 | |
| parent | 003acb9a207ddbfd8b18fd6be326c893fe183108 (diff) | |
Pull up following revision(s) (requested by gdt in ticket #840):
sys/kern/vfs_syscalls.c: revision 1.544
lib/libc/sys/fdatasync.2: revision 1.17
Relax fdatasync restriction that fd be writable
The restriction that a fd passed to fdatasync(2) must be writable was
added in 2003 in order to comply with POSIX. Since then, POSIX has
removed that requirement, and POSIX-valid programs have been therefore
encountering errors on NetBSD.
Patch by Paul Ripke after discussion on netbsd-users. Issue
discovered with pkgsrc/databases/mongodb3 as used by pkgsrc/net/unifi.
| -rw-r--r-- | lib/libc/sys/fdatasync.2 | 6 | ||||
| -rw-r--r-- | sys/kern/vfs_syscalls.c | 11 |
2 files changed, 6 insertions, 11 deletions
diff --git a/lib/libc/sys/fdatasync.2 b/lib/libc/sys/fdatasync.2 index 3f12119f0db..9eff4be388f 100644 --- a/lib/libc/sys/fdatasync.2 +++ b/lib/libc/sys/fdatasync.2 @@ -1,4 +1,4 @@ -.\" $NetBSD: fdatasync.2,v 1.16 2008/04/30 13:10:51 martin Exp $ +.\" $NetBSD: fdatasync.2,v 1.16.66.1 2020/04/22 18:07:37 martin Exp $ .\" .\" Copyright (c) 1998 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -68,7 +68,7 @@ function will fail if: .It Bq Er EBADF The .Fa fd -argument is not a valid file descriptor open for writing. +argument is not a valid file descriptor. .It Bq Er EINVAL This implementation does not support synchronized I/O for this file. .It Bq Er ENOSYS @@ -93,4 +93,4 @@ and outstanding I/O operations are not guaranteed to have been completed. The .Fn fdatasync function conforms to -.St -p1003.1b-93 . +.St -p1003.1-2008 . diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index d6132fda629..a6ee2e2e138 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_syscalls.c,v 1.533 2019/07/06 14:37:24 maxv Exp $ */ +/* $NetBSD: vfs_syscalls.c,v 1.533.2.1 2020/04/22 18:07:37 martin Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -70,7 +70,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.533 2019/07/06 14:37:24 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.533.2.1 2020/04/22 18:07:37 martin Exp $"); #ifdef _KERNEL_OPT #include "opt_fileassoc.h" @@ -4044,8 +4044,7 @@ sys_fsync(struct lwp *l, const struct sys_fsync_args *uap, register_t *retval) * Sync a range of file data. API modeled after that found in AIX. * * FDATASYNC indicates that we need only save enough metadata to be able - * to re-read the written data. Note we duplicate AIX's requirement that - * the file be open for writing. + * to re-read the written data. */ /* ARGSUSED */ int @@ -4126,10 +4125,6 @@ sys_fdatasync(struct lwp *l, const struct sys_fdatasync_args *uap, register_t *r /* fd_getvnode() will use the descriptor for us */ if ((error = fd_getvnode(SCARG(uap, fd), &fp)) != 0) return (error); - if ((fp->f_flag & FWRITE) == 0) { - fd_putfile(SCARG(uap, fd)); - return (EBADF); - } vp = fp->f_vnode; vn_lock(vp, LK_EXCLUSIVE | LK_RETRY); error = VOP_FSYNC(vp, fp->f_cred, FSYNC_WAIT|FSYNC_DATAONLY, 0, 0); |
