-.\" Hey Emacs! This file is -*- nroff -*- source.
-.\"
.\" Copyright 1993 Rickard E. Faith (faith@cs.unc.edu) and
.\" and Copyright 2006 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
+.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
+.\" %%%LICENSE_END
.\"
.\" Modified 21 Aug 1994 by Michael Chastain <mec@shell.portal.com>:
.\" Removed note about old libc (pre-4.5.26) translating to 'sync'.
.\" Modified 18 Apr 2001 by Andi Kleen
.\" Fix description to describe what it really does; add a few caveats.
.\" 2006-04-28, mtk, substantial rewrite of various parts.
+.\" 2012-02-27 Various changes by Christoph Hellwig <hch@lst.de>
.\"
-.TH FSYNC 2 2007-07-26 "Linux" "Linux Programmer's Manual"
+.TH FSYNC 2 2016-03-15 "Linux" "Linux Programmer's Manual"
.SH NAME
fsync, fdatasync \- synchronize a file's in-core state with storage device
.SH SYNOPSIS
.in
.sp
.BR fsync ():
-_BSD_SOURCE || _XOPEN_SOURCE
+ Glibc 2.16 and later:
+ No feature test macros need be defined
+ Glibc up to and including 2.15:
+ _BSD_SOURCE || _XOPEN_SOURCE
+ || /* since glibc 2.8: */ _POSIX_C_SOURCE\ >=\ 200112L
.br
.BR fdatasync ():
-_POSIX_C_SOURCE\ >=\ 199309L || _XOPEN_SOURCE\ >=\ 500
+ _POSIX_C_SOURCE\ >=\ 199309L || _XOPEN_SOURCE\ >=\ 500
.SH DESCRIPTION
.BR fsync ()
transfers ("flushes") all modified in-core data of
(i.e., modified buffer cache pages for) the
file referred to by the file descriptor
.I fd
-to the disk device (or other permanent storage device)
-where that file resides.
+to the disk device (or other permanent storage device) so that all
+changed information can be retrieved even after the system crashed or
+was rebooted.
+This includes writing through or flushing a disk cache if present.
The call blocks until the device reports that the transfer has completed.
It also flushes metadata information associated with the file (see
.BR stat (2)).
.BR fdatasync ()
is to reduce disk activity for applications that do not
require all metadata to be synchronized with the disk.
-.SH "RETURN VALUE"
+.SH RETURN VALUE
On success, these system calls return zero.
On error, \-1 is returned, and
.I errno
.TP
.B EBADF
.I fd
-is not a valid file descriptor open for writing.
+is not a valid open file descriptor.
.TP
.B EIO
An error occurred during synchronization.
.BR EROFS ", " EINVAL
.I fd
is bound to a special file which does not support synchronization.
-.SH "CONFORMING TO"
-4.3BSD, POSIX.1-2001
+.SH CONFORMING TO
+POSIX.1-2001, POSIX.1-2008, 4.3BSD.
.SH AVAILABILITY
On POSIX systems on which
.BR fdatasync ()
.\" -1: unavailable, 0: ask using sysconf().
.\" glibc defines them to 1.
.SH NOTES
-Applications that access databases or log files often write a tiny
-data fragment (e.g., one line in a log file) and then call
-.BR fsync ()
-immediately in order to ensure that the written data is physically
-stored on the harddisk.
-Unfortunately,
-.BR fsync ()
-will always initiate two write operations: one for the newly written
-data and another one in order to update the modification time stored
-in the inode.
-If the modification time is not a part of the transaction
-concept
-.BR fdatasync ()
-can be used to avoid unnecessary inode disk write operations.
-
-If the underlying hard disk has write caching enabled, then
-the data may not really be on permanent storage when
-.BR fsync ()
-/
-.BR fdatasync ()
-return.
-.\" See
-.\" .BR hdparm (8)
-.\" for how to disable that cache for IDE disks.
-.LP
-When an ext2 file system is mounted with the
-.I sync
-option, directory entries are also implicitly synced by
-.BR fsync ().
-.LP
-On kernels before 2.4,
-.BR fsync ()
-on big files can be inefficient.
-An alternative might be to use the
-.B O_SYNC
-flag to
-.BR open (2).
+On some UNIX systems (but not Linux),
+.I fd
+must be a
+.I writable
+file descriptor.
In Linux 2.2 and earlier,
.BR fdatasync ()
is equivalent to
.BR fsync (),
and so has no performance advantage.
-.SH "SEE ALSO"
+
+The
+.BR fsync ()
+implementations in older kernels and lesser used filesystems
+does not know how to flush disk caches.
+In these cases disk caches need to be disabled using
+.BR hdparm (8)
+or
+.BR sdparm (8)
+to guarantee safe operation.
+.SH SEE ALSO
.BR bdflush (2),
.BR open (2),
.BR sync (2),
.BR sync_file_range (2),
.BR hdparm (8),
.BR mount (8),
-.BR sync (8),
-.BR update (8)
+.BR sync (1)