.\" 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 2008-11-07 "Linux" "Linux Programmer's Manual"
+.TH FSYNC 2 2012-02-27 "Linux" "Linux Programmer's Manual"
.SH NAME
fsync, fdatasync \- synchronize a file's in-core state with storage device
.SH SYNOPSIS
(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)).
+
Calling
.BR fsync ()
does not necessarily ensure
.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.
.\" -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.
+
+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),