On Wed, 13 Nov 2019 13:08:22 +0530 Jaskaran Singh <jaskaransingh7654321@xxxxxxxxx> wrote: Thanks for doing this. Naturally I have some requests :) > This patch converts autofs.txt to reST. Some subsystem maintainers react strongly to changelogs that read "this patch"; it's best to express things in the imperative form described in Documentation/process/submitting-patches.rst. > - Most of the changes pertain to reST formatting. > - Some of the code snippets are updated to reflect current source. > - A definition of the autofs packet header has been added in the chapter > "Communicating with autofs: the event pipe". > - An indentation of an 8 space tab has been added wherever suitable, so > as to maintain consistency. > - Removed indentation of the description of the ioctls which are similar > to the AUTOFS_IOC ioctls, as it does not come out quite right in HTML. These seems like good changes, but they are too much for a single patch. Please split this into multiple patches, separating the formatting and white-space changes from those that change the text. That makes it much easier to review. Some nits below. > Signed-off-by: Jaskaran Singh <jaskaransingh7654321@xxxxxxxxx> > --- > .../filesystems/{autofs.txt => autofs.rst} | 258 ++++++++++-------- > Documentation/filesystems/index.rst | 1 + > 2 files changed, 140 insertions(+), 119 deletions(-) > rename Documentation/filesystems/{autofs.txt => autofs.rst} (77%) > > diff --git a/Documentation/filesystems/autofs.txt b/Documentation/filesystems/autofs.rst > similarity index 77% > rename from Documentation/filesystems/autofs.txt > rename to Documentation/filesystems/autofs.rst > index 3af38c7fd26d..a130cba76f07 100644 > --- a/Documentation/filesystems/autofs.txt > +++ b/Documentation/filesystems/autofs.rst > @@ -1,12 +1,9 @@ > -<head> > -<style> p { max-width:50em} ol, ul {max-width: 40em}</style> > -</head> Heh, yeah, I'm not sure why that's there, it should definitely go. > +===================== > autofs - how it works > ===================== > > Purpose > -------- > +======= > > The goal of autofs is to provide on-demand mounting and race free > automatic unmounting of various other filesystems. This provides two > @@ -28,7 +25,7 @@ key advantages: > first accessed a name. > > Context > -------- > +======= > > The "autofs" filesystem module is only one part of an autofs system. > There also needs to be a user-space program which looks up names > @@ -43,7 +40,7 @@ filesystem type. Several "autofs" filesystems can be mounted and they > can each be managed separately, or all managed by the same daemon. > > Content > -------- > +======= > > An autofs filesystem can contain 3 sorts of objects: directories, > symbolic links and mount traps. Mount traps are directories with > @@ -52,7 +49,7 @@ extra properties as described in the next section. > Objects can only be created by the automount daemon: symlinks are > created with a regular `symlink` system call, while directories and > mount traps are created with `mkdir`. The determination of whether a > -directory should be a mount trap or not is quite _ad hoc_, largely for > +directory should be a mount trap or not is quite _ad hoc\_, largely for Remember that we want to preserve the readability of the plain-text document; sprinkling that sort of escape doesn't really help. Recognize that what's there now is a sort of informal markup; I'd either fix it up or take it out. So "*ad hoc*" or just "ad hoc". (Or rephrase it, since this doesn't actually seem to be an appropriate use of "ad hoc" but that's a separate issue :) > historical reasons, and is determined in part by the > *direct*/*indirect*/*offset* mount options, and the *maxproto* mount option. > > @@ -80,7 +77,7 @@ where in the tree they are (root, top level, or lower), the *maxproto*, > and whether the mount was *indirect* or not. > > Mount Traps > ---------------- > +=============== As long as you're changing the underbar make it match the length of the text. > A core element of the implementation of autofs is the Mount Traps > which are provided by the Linux VFS. Any directory provided by a > @@ -201,7 +198,7 @@ initiated or is being considered, otherwise it returns 0. > > > Mountpoint expiry > ------------------ > +================= > > The VFS has a mechanism for automatically expiring unused mounts, > much as it can expire any unused dentry information from the dcache. > @@ -301,7 +298,7 @@ completed (together with removing any directories that might have been > necessary), or has been aborted. > > Communicating with autofs: detecting the daemon > ------------------------------------------------ > +=============================================== > > There are several forms of communication between the automount daemon > and the filesystem. As we have already seen, the daemon can create and > @@ -317,33 +314,39 @@ If the daemon ever has to be stopped and restarted a new pgid can be > provided through an ioctl as will be described below. > > Communicating with autofs: the event pipe > ------------------------------------------ > +========================================= > > When an autofs filesystem is mounted, the 'write' end of a pipe must > be passed using the 'fd=' mount option. autofs will write > notification messages to this pipe for the daemon to respond to. > -For version 5, the format of the message is: > - > - struct autofs_v5_packet { > - int proto_version; /* Protocol version */ > - int type; /* Type of packet */ > - autofs_wqt_t wait_queue_token; > - __u32 dev; > - __u64 ino; > - __u32 uid; > - __u32 gid; > - __u32 pid; > - __u32 tgid; > - __u32 len; > - char name[NAME_MAX+1]; > +For version 5, the format of the message is: :: Too may colons. Just say "...the message is::" There's a few of these. > + struct autofs_v5_packet { > + struct autofs_packet_hdr hdr; > + autofs_wqt_t wait_queue_token; > + __u32 dev; > + __u64 ino; > + __u32 uid; > + __u32 gid; > + __u32 pid; > + __u32 tgid; > + __u32 len; > + char name[NAME_MAX+1]; > }; > > -where the type is one of > +And the format of the header is: :: > + > + struct autofs_packet_hdr { > + int proto_version; /* Protocol version */ > + int type; /* Type of packet */ > + }; > > - autofs_ptype_missing_indirect > - autofs_ptype_expire_indirect > - autofs_ptype_missing_direct > - autofs_ptype_expire_direct > +where the type is one of :: > + > + autofs_ptype_missing_indirect > + autofs_ptype_expire_indirect > + autofs_ptype_missing_direct > + autofs_ptype_expire_direct > > so messages can indicate that a name is missing (something tried to > access it but it isn't there) or that it has been selected for expiry. > @@ -360,7 +363,7 @@ acknowledged using one of the ioctls below with the relevant > `wait_queue_token`. > > Communicating with autofs: root directory ioctls > ------------------------------------------------- > +================================================ > > The root directory of an autofs filesystem will respond to a number of > ioctls. The process issuing the ioctl must have the CAP_SYS_ADMIN > @@ -368,58 +371,66 @@ capability, or must be the automount daemon. > > The available ioctl commands are: > > -- **AUTOFS_IOC_READY**: a notification has been handled. The argument > - to the ioctl command is the "wait_queue_token" number > - corresponding to the notification being acknowledged. > -- **AUTOFS_IOC_FAIL**: similar to above, but indicates failure with > - the error code `ENOENT`. > -- **AUTOFS_IOC_CATATONIC**: Causes the autofs to enter "catatonic" > - mode meaning that it stops sending notifications to the daemon. > - This mode is also entered if a write to the pipe fails. > -- **AUTOFS_IOC_PROTOVER**: This returns the protocol version in use. > -- **AUTOFS_IOC_PROTOSUBVER**: Returns the protocol sub-version which > - is really a version number for the implementation. > -- **AUTOFS_IOC_SETTIMEOUT**: This passes a pointer to an unsigned > - long. The value is used to set the timeout for expiry, and > - the current timeout value is stored back through the pointer. > -- **AUTOFS_IOC_ASKUMOUNT**: Returns, in the pointed-to `int`, 1 if > - the filesystem could be unmounted. This is only a hint as > - the situation could change at any instant. This call can be > - used to avoid a more expensive full unmount attempt. > -- **AUTOFS_IOC_EXPIRE**: as described above, this asks if there is > - anything suitable to expire. A pointer to a packet: > - > - struct autofs_packet_expire_multi { > - int proto_version; /* Protocol version */ > - int type; /* Type of packet */ > - autofs_wqt_t wait_queue_token; > - int len; > - char name[NAME_MAX+1]; > - }; > +- **AUTOFS_IOC_READY**: > + a notification has been handled. The argument > + to the ioctl command is the "wait_queue_token" number > + corresponding to the notification being acknowledged. > +- **AUTOFS_IOC_FAIL**: > + similar to above, but indicates failure with > + the error code `ENOENT`. > +- **AUTOFS_IOC_CATATONIC**: > + Causes the autofs to enter "catatonic" > + mode meaning that it stops sending notifications to the daemon. > + This mode is also entered if a write to the pipe fails. > +- **AUTOFS_IOC_PROTOVER**: > + This returns the protocol version in use. > +- **AUTOFS_IOC_PROTOSUBVER**: > + Returns the protocol sub-version which > + is really a version number for the implementation. > +- **AUTOFS_IOC_SETTIMEOUT**: > + This passes a pointer to an unsigned > + long. The value is used to set the timeout for expiry, and > + the current timeout value is stored back through the pointer. > +- **AUTOFS_IOC_ASKUMOUNT**: > + Returns, in the pointed-to `int`, 1 if > + the filesystem could be unmounted. This is only a hint as > + the situation could change at any instant. This call can be > + used to avoid a more expensive full unmount attempt. > +- **AUTOFS_IOC_EXPIRE**: > + as described above, this asks if there is > + anything suitable to expire. A pointer to a packet: :: > + > + struct autofs_packet_expire_multi { > + struct autofs_packet_hdr hdr; > + autofs_wqt_t wait_queue_token; > + int len; > + char name[NAME_MAX+1]; > + }; > > - is required. This is filled in with the name of something > - that can be unmounted or removed. If nothing can be expired, > - `errno` is set to `EAGAIN`. Even though a `wait_queue_token` > - is present in the structure, no "wait queue" is established > - and no acknowledgment is needed. > -- **AUTOFS_IOC_EXPIRE_MULTI**: This is similar to > - **AUTOFS_IOC_EXPIRE** except that it causes notification to be > - sent to the daemon, and it blocks until the daemon acknowledges. > - The argument is an integer which can contain two different flags. > + is required. This is filled in with the name of something > + that can be unmounted or removed. If nothing can be expired, > + `errno` is set to `EAGAIN`. Even though a `wait_queue_token` > + is present in the structure, no "wait queue" is established > + and no acknowledgment is needed. > +- **AUTOFS_IOC_EXPIRE_MULTI**: > + This is similar to > + **AUTOFS_IOC_EXPIRE** except that it causes notification to be > + sent to the daemon, and it blocks until the daemon acknowledges. > + The argument is an integer which can contain two different flags. > > - **AUTOFS_EXP_IMMEDIATE** causes `last_used` time to be ignored > - and objects are expired if the are not in use. > + **AUTOFS_EXP_IMMEDIATE** causes `last_used` time to be ignored > + and objects are expired if the are not in use. > > - **AUTOFS_EXP_FORCED** causes the in use status to be ignored > - and objects are expired ieven if they are in use. This assumes > - that the daemon has requested this because it is capable of > - performing the umount. > + **AUTOFS_EXP_FORCED** causes the in use status to be ignored > + and objects are expired ieven if they are in use. This assumes > + that the daemon has requested this because it is capable of > + performing the umount. > > - **AUTOFS_EXP_LEAVES** will select a leaf rather than a top-level > - name to expire. This is only safe when *maxproto* is 4. > + **AUTOFS_EXP_LEAVES** will select a leaf rather than a top-level > + name to expire. This is only safe when *maxproto* is 4. > > Communicating with autofs: char-device ioctls > ---------------------------------------------- > +============================================= > > It is not always possible to open the root of an autofs filesystem, > particularly a *direct* mounted filesystem. If the automount daemon > @@ -429,9 +440,9 @@ need there is a "miscellaneous" character device (major 10, minor 235) > which can be used to communicate directly with the autofs filesystem. > It requires CAP_SYS_ADMIN for access. > > -The `ioctl`s that can be used on this device are described in a separate > +The `ioctl`\s that can be used on this device are described in a separate Better to just avoid the use of the backtick here. I'd say "ioctl()s" but that's me. If nothing else, change it to a regular apostrophe. Thanks, jon