Documentation/filesystems/caching/cachefiles.rst

Source file repositories/reference/linux-study-clean/Documentation/filesystems/caching/cachefiles.rst

File Facts

System
Linux kernel
Corpus path
Documentation/filesystems/caching/cachefiles.rst
Extension
.rst
Size
23056 bytes
Lines
663
Domain
Support Tooling And Documentation
Bucket
Documentation
Inferred role
Support Tooling And Documentation: documentation
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

struct cachefiles_msg {
		__u32 msg_id;
		__u32 opcode;
		__u32 len;
		__u32 object_id;
		__u8  data[];
	};

where:

	* ``msg_id`` is a unique ID identifying this request among all pending
	  requests.

	* ``opcode`` indicates the type of this request.

	* ``object_id`` is a unique ID identifying the cache file operated on.

	* ``data`` indicates the payload of this request.

	* ``len`` indicates the whole length of this request, including the
	  header and following type-specific payload.


Turning on On-demand Mode
-------------------------

An optional parameter becomes available to the "bind" command::

	bind [ondemand]

When the "bind" command is given no argument, it defaults to the original mode.
When it is given the "ondemand" argument, i.e. "bind ondemand", on-demand read
mode will be enabled.


The OPEN Request
----------------

When the netfs opens a cache file for the first time, a request with the
CACHEFILES_OP_OPEN opcode, a.k.a an OPEN request will be sent to the user
daemon.  The payload format is of the form::

	struct cachefiles_open {
		__u32 volume_key_size;
		__u32 cookie_key_size;
		__u32 fd;
		__u32 flags;
		__u8  data[];
	};

where:

	* ``data`` contains the volume_key followed directly by the cookie_key.
	  The volume key is a NUL-terminated string; the cookie key is binary
	  data.

	* ``volume_key_size`` indicates the size of the volume key in bytes.

	* ``cookie_key_size`` indicates the size of the cookie key in bytes.

	* ``fd`` indicates an anonymous fd referring to the cache file, through
	  which the user daemon can perform write/llseek file operations on the
	  cache file.


The user daemon can use the given (volume_key, cookie_key) pair to distinguish
the requested cache file.  With the given anonymous fd, the user daemon can
fetch the data and write it to the cache file in the background, even when
kernel has not triggered a cache miss yet.

Annotation

Implementation Notes