routine file_syncfs (
    file: file_t;
    RPT
    wait: int;
    do_children: int);

Synchronize the entire filesystem.

This function has a companion in fsys syncfs, which is invoked on the server's control port instead of an arbitrary node. Both of them are usually implemented in equivalent ways.

Implementation Examples

Servers that either don't keep any unsynchronized state (or don't have a backing store at all) can simply return 0. Examples: nfs.

The implementation typically doesn't care on which specific node (as exported by the implementing server) file syncfs is being invoked on.

libtrivfs

Invoke file sync on the underlying node. Rationale: the underlying node represents this filesystem's backend, and once this node is synchronized, the whole libtrivfs-based filesystem is to be considered synchronized.

?storeio / ?streamio

Instead of the to underlying node, pass the call through to the backend (device).

libnetfs

Invoke netfs_attempt_syncfs.

libdiskfs

Invoke fsys syncfs on all active children, and invoke diskfs_sync_everything and diskfs_set_hypermetadata.

Usage Examples

glibc

  • sync

    file_syncfs ("/", false, true) -- invoke it on the process' root directory (INIT_PORT_CRDIR), don't wait for completion, do synchronize child filesystems.

Hurd