summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2016-08-29 05:59:12 +0000
committerkib <kib@FreeBSD.org>2016-08-29 05:59:12 +0000
commit7d77c6377dfe8ffa4ec0497a58ed08d11b497b64 (patch)
treedd50e5b79ce1a69b98c2e2ba91b7427149711a10
parent87637d7979c28fea800112c0b6f271b6db0ee56b (diff)
downloadFreeBSD-src-7d77c6377dfe8ffa4ec0497a58ed08d11b497b64.zip
FreeBSD-src-7d77c6377dfe8ffa4ec0497a58ed08d11b497b64.tar.gz
MFC r304287:
Add fdatasync(2) man page, combined with fsync(2).
-rw-r--r--lib/libc/sys/Makefile.inc1
-rw-r--r--lib/libc/sys/fsync.251
2 files changed, 48 insertions, 4 deletions
diff --git a/lib/libc/sys/Makefile.inc b/lib/libc/sys/Makefile.inc
index a37c566..c358e67 100644
--- a/lib/libc/sys/Makefile.inc
+++ b/lib/libc/sys/Makefile.inc
@@ -366,6 +366,7 @@ MLINKS+=ffclock.2 ffclock_getcounter.2 \
ffclock.2 ffclock_getestimate.2 \
ffclock.2 ffclock_setestimate.2
MLINKS+=fhopen.2 fhstat.2 fhopen.2 fhstatfs.2
+MLINKS+=fsync.2 fdatasync.2
MLINKS+=getdirentries.2 getdents.2
MLINKS+=getfh.2 lgetfh.2
MLINKS+=getgid.2 getegid.2
diff --git a/lib/libc/sys/fsync.2 b/lib/libc/sys/fsync.2
index 7bdc487..3f83291 100644
--- a/lib/libc/sys/fsync.2
+++ b/lib/libc/sys/fsync.2
@@ -1,5 +1,11 @@
.\" Copyright (c) 1983, 1993
.\" The Regents of the University of California. All rights reserved.
+.\" Copyright (c) 2016 The FreeBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" Parts of this documentation were written by
+.\" Konstantin Belousov <kib@FreeBSD.org> under sponsorship
+.\" from the FreeBSD Foundation.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
@@ -28,40 +34,65 @@
.\" @(#)fsync.2 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$
.\"
-.Dd June 4, 1993
+.Dd August 17, 2016
.Dt FSYNC 2
.Os
.Sh NAME
-.Nm fsync
+.Nm fdatasync, fsync
.Nd "synchronise changes to a file"
.Sh LIBRARY
.Lb libc
.Sh SYNOPSIS
.In unistd.h
.Ft int
+.Fn fdatasync "int fd"
+.Ft int
.Fn fsync "int fd"
.Sh DESCRIPTION
The
.Fn fsync
system call
-causes all modified data and attributes of
+causes all modified data and attributes of the file referenced by
+the file descriptor
.Fa fd
to be moved to a permanent storage device.
This normally results in all in-core modified copies
of buffers for the associated file to be written to a disk.
.Pp
The
+.Fn fdatasync
+system call causes all modified data of
+.Fa fd
+to be moved to a permanent storage device.
+Unlike
+.Fn fsync ,
+the system call does not guarantee that file attributes or
+metadata necessary to access the file are committed to the permanent storage.
+.Pp
+The
.Fn fsync
system call
should be used by programs that require a file to be
in a known state, for example, in building a simple transaction
facility.
+If the file metadata has already been committed, using
+.Fn fdatasync
+can be more efficient than
+.Fn fsync .
+.Pp
+Both
+.Fn fdatasync
+and
+.Fn fsync
+calls are cancellation points.
.Sh RETURN VALUES
.Rv -std fsync
.Sh ERRORS
The
.Fn fsync
-fails if:
+and
+.Fn fdatasync
+calls fail if:
.Bl -tag -width Er
.It Bq Er EBADF
The
@@ -85,3 +116,15 @@ The
.Fn fsync
system call appeared in
.Bx 4.2 .
+The
+.Fn fdatasync
+system call appeared in
+.Fx 12.0
+.Sh BUGS
+The
+.Fn fdatasync
+system call currently does not guarantee that enqueued
+.Xr aio 4
+requests for the file referenced by
+.Fa fd
+are completed before the syscall returns.
OpenPOWER on IntegriCloud