.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
-.TH MSYNC 2 2014-03-04 "Linux" "Linux Programmer's Manual"
+.TH MSYNC 2 2017-09-15 "Linux" "Linux Programmer's Manual"
.SH NAME
msync \- synchronize a file with a memory map
.SH SYNOPSIS
.B #include <sys/mman.h>
-.sp
+.PP
.BI "int msync(void *" addr ", size_t " length ", int " flags );
.SH DESCRIPTION
.BR msync ()
flushes changes made to the in-core copy of a file that was mapped
into memory using
.BR mmap (2)
-back to disk.
-Without use of this call
+back to the filesystem.
+Without use of this call,
there is no guarantee that changes are written back before
.BR munmap (2)
is called.
and having length
.I length
is updated.
-
+.PP
The
.I flags
-argument may have the bits
-.BR MS_ASYNC ,
-.BR MS_SYNC ,
+argument should specify exactly one of
+.BR MS_ASYNC
and
+.BR MS_SYNC ,
+and may additionally include the
.B MS_INVALIDATE
-set, but not both
-.B MS_ASYNC
-and
-.BR MS_SYNC .
+bit.
+These bits have the following meanings:
+.TP
.B MS_ASYNC
-specifies that an update be scheduled, but the call
-returns immediately.
+Specifies that an update be scheduled, but the call returns immediately.
+.TP
.B MS_SYNC
-asks for an update and waits for it to complete.
+Requests an update and waits for it to complete.
+.TP
.B MS_INVALIDATE
-asks to invalidate other mappings of the same file
+.\" Since Linux 2.4, this seems to be a no-op (other than the
+.\" EBUSY check for VM_LOCKED).
+Asks to invalidate other mappings of the same file
(so that they can be updated with the fresh values just written).
.SH RETURN VALUE
On success, zero is returned.
.B ENOMEM
The indicated memory (or part of it) was not mapped.
.SH CONFORMING TO
-POSIX.1-2001.
-
+POSIX.1-2001, POSIX.1-2008.
+.PP
This call was introduced in Linux 1.3.21, and then used
.B EFAULT
instead of
.BR ENOMEM .
-In Linux 2.4.19 this was changed to the POSIX value
+In Linux 2.4.19, this was changed to the POSIX value
.BR ENOMEM .
.SH AVAILABILITY
On POSIX systems on which
.\" -1: unavailable, 0: ask using sysconf().
.\" glibc defines them to 1.
.SH NOTES
-According to POSIX, exactly one of
+According to POSIX, either
.BR MS_SYNC
-and
+or
.BR MS_ASYNC
-must be specified in
-.IR flags .
+must be specified in
+.IR flags ,
+and indeed failure to include one of these flags will cause
+.BR msync ()
+to fail on some systems.
However, Linux permits a call to
.BR msync ()
that specifies neither of these flags,
is in fact a no-op, since the kernel properly tracks dirty
pages and flushes them to storage as necessary.)
Notwithstanding the Linux behavior,
-portable, future-proof applications should ensure that
-they specify exactly one of
+portable, future-proof applications should ensure that they specify either
.BR MS_SYNC
-and
+or
.BR MS_ASYNC
in
.IR flags .
.SH SEE ALSO
.BR mmap (2)
-
-B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128-129 and 389-391.
+.PP
+B.O. Gallmeister, POSIX.4, O'Reilly, pp. 128\(en129 and 389\(en391.