VOP_FSYNC()
ensures that a file can be recovered to its current state following a crash.
That typically requires flushing the file's dirty buffers, its inode, and
possibly other filesystem metadata to persistent media.
VOP_FSYNC()
is used to implement the
sync(2)
and
fsync(2)
system calls.
Its arguments are:
vp
|
|
The vnode of the file.
|
waitfor
|
|
Whether the function should wait for I/O to complete.
Possible values are:
|
MNT_WAIT
|
Synchronously wait for I/O to complete.
|
MNT_NOWAIT
|
|
Start all I/O, but do not wait for it.
|
MNT_LAZY
|
Push data not written by file system syncer.
|
VOP_FDATASYNC()
is similar, but it does not require that all of the file's metadata be flushed.
It only requires that the file's data be recoverable after a crash.
That implies that the data itself must be flushed to disk, as well as some
metadata such as the file's size but not necessarily its attributes.
VOP_FDATASYNC()
should always wait for I/O to complete, as if called with
MNT_WAIT.
VOP_FDATASYNC()
is used to implement
fdatasync(2).