kern/64875: Add a system call: fdatasync()
Kevin Lo
kevlo at FreeBSD.org
Sun Mar 28 18:00:36 PST 2004
>Number: 64875
>Category: kern
>Synopsis: Add a system call: fdatasync()
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Sun Mar 28 18:00:36 PST 2004
>Closed-Date:
>Last-Modified:
>Originator: Kevin Lo
>Release: 5.2.1
>Organization:
Indivisual
>Environment:
FreeBSD 5.2.1-RELEASE
>Description:
fdatasync()is part of realtime extensions in POSIX 1003.1.
DESCRIPTION
The fdatasync() function forces all currently queued I/O
operations associated with the file indicated by file
descriptor fildes to the synchronized I/O completion state.
>How-To-Repeat:
diff -ruN sys.orig/compat/freebsd32/syscalls.master sys/compat/freebsd32/syscalls.master
--- sys.orig/compat/freebsd32/syscalls.master Fri Mar 26 11:18:23 2004
+++ sys/compat/freebsd32/syscalls.master Fri Mar 26 11:36:30 2004
@@ -604,3 +604,4 @@
439 UNIMPL extattr_list_link
440 UNIMPL kse_switchin
441 UNIMPL ksem_timedwait
+442 UNIMPL fdatasync
diff -ruN sys.orig/kern/syscalls.master sys/kern/syscalls.master
--- sys.orig/kern/syscalls.master Fri Mar 26 11:18:59 2004
+++ sys/kern/syscalls.master Fri Mar 26 11:36:49 2004
@@ -629,5 +629,6 @@
440 MSTD { int kse_switchin(const struct __mcontext *mcp, \
long val, long *loc); }
441 MNOSTD { int ksem_timedwait(semid_t id, struct timespec *abstime); }
+442 STD { int fdatasync(int fd); }
; Please copy any additions and changes to the following compatability tables:
; sys/compat/freebsd32/syscalls.master
diff -ruN sys.orig/kern/vfs_syscalls.c sys/kern/vfs_syscalls.c
--- sys.orig/kern/vfs_syscalls.c Fri Mar 26 11:19:00 2004
+++ sys/kern/vfs_syscalls.c Fri Mar 26 14:00:14 2004
@@ -3122,6 +3122,48 @@
}
/*
+ * Sync the data of an open file.
+ */
+#ifndef _SYS_SYSPROTO_H_
+struct fdatasync_args {
+ int fd;
+};
+#endif
+/* ARGSUSED */
+int
+fdatasync(td, uap)
+ struct thread *td;
+ struct fsync_args /* {
+ int fd;
+ } */ *uap;
+{
+ struct vnode *vp;
+ struct file *fp;
+ vm_object_t obj;
+ int error;
+
+ GIANT_REQUIRED;
+
+ if ((error = getvnode(td->td_proc->p_fd, uap->fd, &fp)) != 0)
+ return (error);
+ if ((fp->f_flag & FWRITE) == 0) {
+ fdrop(fp, td);
+ return (EBADF);
+ }
+ vp = fp->f_vnode;
+ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
+ if (VOP_GETVOBJECT(vp, &obj) == 0) {
+ VM_OBJECT_LOCK(obj);
+ vm_object_page_clean(obj, 0, 0, 0);
+ VM_OBJECT_UNLOCK(obj);
+ }
+ error = VOP_FSYNC(vp, fp->f_cred, MNT_WAIT, td);
+ VOP_UNLOCK(vp, 0, td);
+ fdrop(fp, td);
+ return (error);
+}
+
+/*
* Rename files. Source and destination must either both be directories,
* or both not be directories. If target is a directory, it must be empty.
*/
--- /dev/null Mon Mar 29 09:44:00 2004
+++ lib/libc/sys/fdatasync.2 Mon Mar 29 09:47:49 2004
@@ -0,0 +1,86 @@
+.\" Copyright (c) 2004
+.\" The Regents of the University of California. All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed by the University of
+.\" California, Berkeley and its contributors.
+.\" 4. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd March 27, 2004
+.Dt FDATASYNC 2
+.Os
+.Sh NAME
+.Nm fdatasync
+.Nd "synchronize the data of a file"
+.Sh LIBRARY
+.Lb libc
+.Sh SYNOPSIS
+.In unistd.h
+.Ft int
+.Fn fdatasync "int fd"
+.Sh DESCRIPTION
+The
+.Fn fdatasync
+system call
+shall force all currently queued I/O operations associated
+with the file indicated by file descriptor
+.Fa fd
+to the synchronized I/O completion state.
+.Pp
+The
+functionality shall be equivalent to
+.Fn fsync
+with the exception that all I/O operations shall be completed as
+defined for synchronized I/O data integrity completion.
+.Sh RETURN VALUES
+.Rv -std fdatasync
+.Sh ERRORS
+The
+.Fn fdatasync
+fails if:
+.Bl -tag -width Er
+.It Bq Er EBADF
+The
+.Fa fd
+argument
+is not a valid descriptor.
+.It Bq Er EINVAL
+The
+.Fa fd
+argument
+refers to a socket, not to a file.
+.It Bq Er EIO
+An I/O error occurred while reading from or writing to the file system.
+.El
+.Sh SEE ALSO
+.Xr fsync 2
+.Sh HISTORY
+The
+.Fn fdatasync
+system call appeared in
+.Fx 5.2 .
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list