Documentation: nfs: convert pnfs.txt to ReST

Convert pnfs.txt to ReST. Content remains mostly unchanged.

Signed-off-by: Daniel W. S. Almeida <dwlsalmeida@gmail.com>
Link: https://lore.kernel.org/r/20200129044917.566906-2-dwlsalmeida@gmail.com
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
Daniel W. S. Almeida 2020-01-29 01:49:13 -03:00 committed by Jonathan Corbet
parent bb6d3fb354
commit 34e75cf4be
3 changed files with 25 additions and 10 deletions

View file

@ -51,3 +51,4 @@ Documentation for filesystem implementations.
overlayfs overlayfs
virtiofs virtiofs
vfat vfat
nfs/index

View file

@ -0,0 +1,9 @@
===============================
NFS
===============================
.. toctree::
:maxdepth: 1
pnfs

View file

@ -1,15 +1,17 @@
Reference counting in pnfs: ==========================
Reference counting in pnfs
========================== ==========================
The are several inter-related caches. We have layouts which can The are several inter-related caches. We have layouts which can
reference multiple devices, each of which can reference multiple data servers. reference multiple devices, each of which can reference multiple data servers.
Each data server can be referenced by multiple devices. Each device Each data server can be referenced by multiple devices. Each device
can be referenced by multiple layouts. To keep all of this straight, can be referenced by multiple layouts. To keep all of this straight,
we need to reference count. we need to reference count.
struct pnfs_layout_hdr struct pnfs_layout_hdr
---------------------- ======================
The on-the-wire command LAYOUTGET corresponds to struct The on-the-wire command LAYOUTGET corresponds to struct
pnfs_layout_segment, usually referred to by the variable name lseg. pnfs_layout_segment, usually referred to by the variable name lseg.
Each nfs_inode may hold a pointer to a cache of these layout Each nfs_inode may hold a pointer to a cache of these layout
@ -25,7 +27,8 @@ the reference count, as the layout is kept around by the lseg that
keeps it in the list. keeps it in the list.
deviceid_cache deviceid_cache
-------------- ==============
lsegs reference device ids, which are resolved per nfs_client and lsegs reference device ids, which are resolved per nfs_client and
layout driver type. The device ids are held in a RCU cache (struct layout driver type. The device ids are held in a RCU cache (struct
nfs4_deviceid_cache). The cache itself is referenced across each nfs4_deviceid_cache). The cache itself is referenced across each
@ -38,24 +41,26 @@ justification, but seems reasonable given that we can have multiple
deviceid's per filesystem, and multiple filesystems per nfs_client. deviceid's per filesystem, and multiple filesystems per nfs_client.
The hash code is copied from the nfsd code base. A discussion of The hash code is copied from the nfsd code base. A discussion of
hashing and variations of this algorithm can be found at: hashing and variations of this algorithm can be found `here.
http://groups.google.com/group/comp.lang.c/browse_thread/thread/9522965e2b8d3809 <http://groups.google.com/group/comp.lang.c/browse_thread/thread/9522965e2b8d3809>`_
data server cache data server cache
----------------- =================
file driver devices refer to data servers, which are kept in a module file driver devices refer to data servers, which are kept in a module
level cache. Its reference is held over the lifetime of the deviceid level cache. Its reference is held over the lifetime of the deviceid
pointing to it. pointing to it.
lseg lseg
---- ====
lseg maintains an extra reference corresponding to the NFS_LSEG_VALID lseg maintains an extra reference corresponding to the NFS_LSEG_VALID
bit which holds it in the pnfs_layout_hdr's list. When the final lseg bit which holds it in the pnfs_layout_hdr's list. When the final lseg
is removed from the pnfs_layout_hdr's list, the NFS_LAYOUT_DESTROYED is removed from the pnfs_layout_hdr's list, the NFS_LAYOUT_DESTROYED
bit is set, preventing any new lsegs from being added. bit is set, preventing any new lsegs from being added.
layout drivers layout drivers
-------------- ==============
PNFS utilizes what is called layout drivers. The STD defines 4 basic PNFS utilizes what is called layout drivers. The STD defines 4 basic
layout types: "files", "objects", "blocks", and "flexfiles". For each layout types: "files", "objects", "blocks", and "flexfiles". For each
@ -68,6 +73,6 @@ Blocks-layout-driver code is in: fs/nfs/blocklayout/.. directory
Flexfiles-layout-driver code is in: fs/nfs/flexfilelayout/.. directory Flexfiles-layout-driver code is in: fs/nfs/flexfilelayout/.. directory
blocks-layout setup blocks-layout setup
------------------- ===================
TODO: Document the setup needs of the blocks layout driver TODO: Document the setup needs of the blocks layout driver