VOP_FSYNC(9)

VOP_FSYNC9

Flush file system buffers for a file

Usage

#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);

Overview

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.

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).

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.

Releases

83 releases since FreeBSD 2.2.2-RELEASE; the text changed 42 times.

  1. 2.2.2–2.2.8
  2. 2.2.9
  3. 3.0–3.2
  4. 3.3–3.5.1
  5. 4.0–4.3
  6. 4.4
  7. 4.5–4.11
  8. 5.0–5.1
  9. 5.2–5.5
  10. 6.0–6.2
  11. 6.3
  12. 6.4
  13. 7.0
  14. 7.1
  15. 7.2
  16. 7.3
  17. 7.4
  18. 8.0
  19. 8.1
  20. 8.2
  21. 8.3
  22. 8.4
  23. 9.0
  24. 9.1
  25. 9.2
  26. 9.3
  27. 10.0
  28. 10.1
  29. 10.2
  30. 10.3
  31. 10.4
  32. 11.0
  33. 11.1
  34. 11.2
  35. 11.3
  36. 11.4
  37. 12.0
  38. 12.1
  39. 12.2
  40. 12.3
  41. 12.4
  42. 13.0–13.2
  43. 13.3–16.0

Authors

This manual page was written by Doug Rabson.

From base 16.0-CURRENT-20261027-61c70dc16a79 in FreeBSD 16.0-CURRENT (2026-10-27). Parsed by carta from the page's mdoc source.