---
name: "VOP_FDATASYNC"
section: "9"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/VOP_FDATASYNC"
---

# VOP\_FDATASYNC(9)

flush file system buffers for a file

## NAME

**VOP\_FDATASYNC**, **VOP\_FSYNC** – flush file system buffers for a file

## SYNOPSIS

**#include \<sys/param.h\>**

**#include \<sys/vnode.h\>**

*int*\

**VOP\_FDATASYNC**(*struct vnode \*vp*, *struct thread \*td*);

*int*\

**VOP\_FSYNC**(*struct vnode \*vp*, *int waitfor*, *struct thread \*td*);

## DESCRIPTION

**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)](/sync/2.md) and [fsync(2)](/fsync/2.md) 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.

- *td*

  The calling thread.

**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)](/fdatasync/2.md).

## LOCKS

The vnode should be exclusively locked on entry, and stays locked on return.

## RETURN VALUES

Zero is returned if the call is successful, otherwise an appropriate error code is returned.

## ERRORS

- \[ENOSPC\]

  The file system is full.

- \[EDQUOT\]

  Quota exceeded.

## SEE ALSO

[vnode(9)](/vnode/9.md)

## AUTHORS

This manual page was written by Doug Rabson.
