ovl: document NFS export
Document NFS export design. Followup patches will implement this design. Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
parent
f9c34674bc
commit
a01f64b5c0
|
@ -203,10 +203,6 @@ Because lower layer redirects cannot be verified with the index, enabling
|
|||
NFS export support on an overlay filesystem with no upper layer requires
|
||||
turning off redirect follow (e.g. "redirect_dir=nofollow").
|
||||
|
||||
When the NFS export feature is enabled, all directory index entries are
|
||||
verified on mount time to check that upper file handles are not stale.
|
||||
This verification may cause significant overhead in some cases.
|
||||
|
||||
|
||||
Non-directories
|
||||
---------------
|
||||
|
@ -334,6 +330,75 @@ found lower directory does not match the stored origin, that directory
|
|||
will not be merged with the upper directory.
|
||||
|
||||
|
||||
|
||||
NFS export
|
||||
----------
|
||||
|
||||
When the underlying filesystems supports NFS export and the "nfs_export"
|
||||
feature is enabled, an overlay filesystem may be exported to NFS.
|
||||
|
||||
With the "nfs_export" feature, on copy_up of any lower object, an index
|
||||
entry is created under the index directory. The index entry name is the
|
||||
hexadecimal representation of the copy up origin file handle. For a
|
||||
non-directory object, the index entry is a hard link to the upper inode.
|
||||
For a directory object, the index entry has an extended attribute
|
||||
"trusted.overlay.upper" with an encoded file handle of the upper
|
||||
directory inode.
|
||||
|
||||
When encoding a file handle from an overlay filesystem object, the
|
||||
following rules apply:
|
||||
|
||||
1. For a non-upper object, encode a lower file handle from lower inode
|
||||
2. For an indexed object, encode a lower file handle from copy_up origin
|
||||
3. For a pure-upper object and for an existing non-indexed upper object,
|
||||
encode an upper file handle from upper inode
|
||||
|
||||
The encoded overlay file handle includes:
|
||||
- Header including path type information (e.g. lower/upper)
|
||||
- UUID of the underlying filesystem
|
||||
- Underlying filesystem encoding of underlying inode
|
||||
|
||||
This encoding format is identical to the encoding format file handles that
|
||||
are stored in extended attribute "trusted.overlay.origin".
|
||||
|
||||
When decoding an overlay file handle, the following steps are followed:
|
||||
|
||||
1. Find underlying layer by UUID and path type information.
|
||||
2. Decode the underlying filesystem file handle to underlying dentry.
|
||||
3. For a lower file handle, lookup the handle in index directory by name.
|
||||
4. If a whiteout is found in index, return ESTALE. This represents an
|
||||
overlay object that was deleted after its file handle was encoded.
|
||||
5. For a non-directory, instantiate a disconnected overlay dentry from the
|
||||
decoded underlying dentry, the path type and index inode, if found.
|
||||
6. For a directory, use the connected underlying decoded dentry, path type
|
||||
and index, to lookup a connected overlay dentry.
|
||||
|
||||
Decoding a non-directory file handle may return a disconnected dentry.
|
||||
copy_up of that disconnected dentry will create an upper index entry with
|
||||
no upper alias.
|
||||
|
||||
When overlay filesystem has multiple lower layers, a middle layer
|
||||
directory may have a "redirect" to lower directory. Because middle layer
|
||||
"redirects" are not indexed, a lower file handle that was encoded from the
|
||||
"redirect" origin directory, cannot be used to find the middle or upper
|
||||
layer directory. Similarly, a lower file handle that was encoded from a
|
||||
descendant of the "redirect" origin directory, cannot be used to
|
||||
reconstruct a connected overlay path. To mitigate the cases of
|
||||
directories that cannot be decoded from a lower file handle, these
|
||||
directories are copied up on encode and encoded as an upper file handle.
|
||||
On an overlay filesystem with no upper layer this mitigation cannot be
|
||||
used NFS export in this setup requires turning off redirect follow (e.g.
|
||||
"redirect_dir=nofollow").
|
||||
|
||||
The overlay filesystem does not support non-directory connectable file
|
||||
handles, so exporting with the 'subtree_check' exportfs configuration will
|
||||
cause failures to lookup files over NFS.
|
||||
|
||||
When the NFS export feature is enabled, all directory index entries are
|
||||
verified on mount time to check that upper file handles are not stale.
|
||||
This verification may cause significant overhead in some cases.
|
||||
|
||||
|
||||
Testsuite
|
||||
---------
|
||||
|
||||
|
|
Loading…
Reference in New Issue