Re: [RFC PATCH] Documentation: filesystems: convert vfat.txt to RST

From: Jonathan Corbet
Date: Tue Nov 12 2019 - 11:11:06 EST


On Fri, 8 Nov 2019 15:39:41 -0300
"Daniel W. S. Almeida" <dwlsalmeida@xxxxxxxxx> wrote:

> From: "Daniel W. S. Almeida" <dwlsalmeida@xxxxxxxxx>
>
> Converts vfat.txt to the reStructuredText format, improving presentation
> without changing the underlying content.
>
> Signed-off-by: Daniel W. S. Almeida <dwlsalmeida@xxxxxxxxx>

Thanks for doing this conversion! A number of my comments from the FUSE
patch apply here as well:

- Copy the maintainer

- Update MAINTAINERS

- Limit use of markup

- Consider a move to the admin guide. It's less obvious here, though,
because the information about the structure of the filesystem itself
arguably does not belong there. A better place, honestly, might be as a
DOC block in the driver source itself, but that would need to be run past
the maintainer.

A few other minor comments below.

> Documentation/filesystems/index.rst | 1 +
> Documentation/filesystems/vfat.rst | 389 ++++++++++++++++++++++++++++
> Documentation/filesystems/vfat.txt | 347 -------------------------
> 3 files changed, 390 insertions(+), 347 deletions(-)
> create mode 100644 Documentation/filesystems/vfat.rst
> delete mode 100644 Documentation/filesystems/vfat.txt
>
> diff --git a/Documentation/filesystems/index.rst b/Documentation/filesystems/index.rst
> index 2c3a9f761205..aaffaa9042c3 100644
> --- a/Documentation/filesystems/index.rst
> +++ b/Documentation/filesystems/index.rst
> @@ -47,3 +47,4 @@ Documentation for filesystem implementations.
> :maxdepth: 2
>
> virtiofs
> + vfat
> diff --git a/Documentation/filesystems/vfat.rst b/Documentation/filesystems/vfat.rst
> new file mode 100644
> index 000000000000..e24e69a2817d
> --- /dev/null
> +++ b/Documentation/filesystems/vfat.rst
> @@ -0,0 +1,389 @@
> +====
> +VFAT
> +====
> +
> +USING VFAT
> +==========
> +
> +To use the vfat filesystem, use the filesystem type 'vfat'. i.e.::
> +
> + mount -t vfat /dev/fd0 /mnt
> +
> +
> +No special partition formatter is required.
> +``mkdosfs`` will work fine if you want to format from within Linux.
> +
> +VFAT MOUNT OPTIONS
> +==================
> +
> +**uid=###**
> + Set the owner of all files on this filesystem.
> + The default is the *uid* of current process.
> +
> +**gid=###**
> + Set the group of all files on this filesystem.
> + The default is the *gid* of current process.
> +
> +**umask=###**
> + The permission mask (for files and directories, see *umask(1)*).
> + The default is the *umask* of current process.
> +
> +**dmask=###**
> + The permission mask for the directory.
> + The default is the *umask* of current process.
> +
> +**fmask=###**
> + The permission mask for files.
> + The default is the *umask* of current process.
> +
> +**allow_utime=###**
> + This option controls the permission check of mtime/atime.
> +
> + **-20**: If current process is in group of file's group ID, you can change timestamp.

This has become a very long line; it will be more readable if you break
it.

> +
> + **-2**: Other users can change timestamp.
> +
> + The default is set from ``dmask`` option. If the directory is
> + writable, *utime(2)* is also allowed. i.e. ``~dmask & 022``.
> +
> + Normally ``utime(2)`` checks current process is owner of
> + the file, or it has ``CAP_FOWNER`` capability. But FAT
> + filesystem doesn't have uid/gid on disk, so normal
> + check is too unflexible. With this option you can
> + relax it.
> +
> +**codepage=###**
> + Sets the codepage number for converting to shortname
> + characters on FAT filesystem.
> + By default, ``FAT_DEFAULT_CODEPAGE`` setting is used.
> +
> +**iocharset=<name>**
> + Character set to use for converting between the
> + encoding is used for user visible filename and 16 bit
> + Unicode characters. Long filenames are stored on disk
> + in Unicode format, but Unix for the most part doesn't
> + know how to deal with Unicode.
> + By default, ``FAT_DEFAULT_IOCHARSET`` setting is used.
> +
> + There is also an option of doing UTF-8 translations
> + with the utf8 option.
> +
> +.. note:: ``iocharset=utf8`` is not recommended. If unsure, you should consider the utf8 option instead.

Here too. This should be something like:

.. note::
``iocharset=utf8`` is not recommended. If unsure, you should consider
the utf8 option instead.

> +
> +**utf8=<bool>**
> + UTF-8 is the filesystem safe version of Unicode that
> + is used by the console. It can be enabled or disabled
> + for the filesystem with this option.
> + If 'uni_xlate' gets set, UTF-8 gets disabled.
> + By default, ``FAT_DEFAULT_UTF8`` setting is used.
> +
> +**uni_xlate=<bool>**
> + Translate unhandled Unicode characters to special
> + escaped sequences. This would let you backup and
> + restore filenames that are created with any Unicode
> + characters. Until Linux supports Unicode for real,
> + this gives you an alternative. Without this option,
> + a '?' is used when no translation is possible. The
> + escape character is ':' because it is otherwise
> + illegal on the vfat filesystem. The escape sequence
> + that gets used is ':' and the four digits of hexadecimal
> + unicode.
> +
> +**nonumtail=<bool>**
> + When creating 8.3 aliases, normally the alias will
> + end in '~1' or tilde followed by some number. If this
> + option is set, then if the filename is
> + "longfilename.txt" and "longfile.txt" does not
> + currently exist in the directory, ``longfile.txt`` will
> + be the short alias instead of ``longfi~1.txt``.
> +
> +**usefree**
> + Use the "free clusters" value stored on ``FSINFO``. It'll
> + be used to determine number of free clusters without
> + scanning disk. But it's not used by default, because
> + recent Windows don't update it correctly in some
> + case. If you are sure the "free clusters" on ``FSINFO`` is
> + correct, by this option you can avoid scanning disk.
> +
> +**quiet**
> + Stops printing certain warning messages.
> +
> +**check=s|r|n**
> + Case sensitivity checking setting.
> +
> + **s**: strict, case sensitive
> +
> + **r**: relaxed, case insensitive
> +
> + **n**: normal, default setting, currently case insensitive
> +
> +**nocase**
> + This was deprecated for vfat. Use ``shortname=win95`` instead.
> +
> +**shortname=lower|win95|winnt|mixed**
> + Shortname display/create setting.
> +
> + **lower**: convert to lowercase for display,
> + emulate the Windows 95 rule for create.
> +
> + **win95**: emulate the Windows 95 rule for display/create.
> +
> + **winnt**: emulate the Windows NT rule for display/create.
> +
> + **mixed**: emulate the Windows NT rule for display,
> + emulate the Windows 95 rule for create.
> +
> + Default setting is `mixed`.
> +
> +**tz=UTC**
> + Interpret timestamps as UTC rather than local time.
> + This option disables the conversion of timestamps
> + between local time (as used by Windows on FAT) and UTC
> + (which Linux uses internally). This is particularly
> + useful when mounting devices (like digital cameras)
> + that are set to UTC in order to avoid the pitfalls of
> + local time.
> +
> +**time_offset=minutes**
> + Set offset for conversion of timestamps from local time
> + used by FAT to UTC. I.e. <minutes> minutes will be subtracted
> + from each timestamp to convert it to UTC used internally by
> + Linux. This is useful when time zone set in ``sys_tz`` is
> + not the time zone used by the filesystem. Note that this
> + option still does not provide correct time stamps in all
> + cases in presence of DST - time stamps in a different DST
> + setting will be off by one hour.
> +
> +**showexec**
> + If set, the execute permission bits of the file will be
> + allowed only if the extension part of the name is ``.EXE``,
> + ``.COM``, or ``.BAT``. Not set by default.
> +
> +**debug**
> + Can be set, but unused by the current implementation.
> +
> +**sys_immutable**
> + If set, ATTR_SYS attribute on FAT is handled as
> + ``IMMUTABLE`` flag on Linux. Not set by default.
> +
> +**flush**
> + If set, the filesystem will try to flush to disk more
> + early than normal. Not set by default.
> +
> +**rodir**
> + FAT has the ``ATTR_RO`` (read-only) attribute. On Windows,
> + the ``ATTR_RO`` of the directory will just be ignored,
> + and is used only by applications as a flag (e.g. it's set
> + for the customized folder).
> +
> + If you want to use ``ATTR_RO`` as read-only flag even for
> + the directory, set this option.
> +
> +**errors=panic|continue|remount-ro**
> + specify FAT behavior on critical errors: panic, continue
> + without doing anything or remount the partition in
> + read-only mode (default behavior).
> +
> +**discard**
> + If set, issues discard/TRIM commands to the block
> + device when blocks are freed. This is useful for SSD devices
> + and sparse/thinly-provisoned LUNs.
> +
> +**nfs=stale_rw|nostale_ro**
> + Enable this only if you want to export the FAT filesystem
> + over NFS.
> +
> + **stale_rw**: This option maintains an index (cache) of directory
> + *inodes* by *i_logstart* which is used by the nfs-related code to
> + improve look-ups. Full file operations (read/write) over *NFS* is
> + supported but with cache eviction at *NFS* server, this could
> + result in ``ESTALE`` issues.
> +
> + **nostale_ro**: This option bases the *inode* number and filehandle
> + on the on-disk location of a file in the MS-DOS directory entry.
> + This ensures that ``ESTALE`` will not be returned after a file is
> + evicted from the *inode* cache. However, it means that operations
> + such as rename, create and unlink could cause filehandles that
> + previously pointed at one file to point at a different file,
> + potentially causing data corruption. For this reason, this
> + option also mounts the filesystem readonly.
> +
> + To maintain backward compatibility, ``'-o nfs'`` is also accepted,
> + defaulting to ``stale_rw``
> +
> +**dos1xfloppy <bool>: 0,1,yes,no,true,false**
> + If set, use a fallback default BIOS Parameter Block
> + configuration, determined by backing device size. These static
> + parameters match defaults assumed by DOS 1.x for 160 kiB,
> + 180 kiB, 320 kiB, and 360 kiB floppies and floppy images.
> +
> +
> +
> +LIMITATION
> +==========
> +The fallocated region of file is discarded at umount/evict time

Put a blank line after the subheading markup.

> +when using fallocate with FALLOC_FL_KEEP_SIZE.
> +So, User should assume that fallocated region can be discarded at
> +last close if there is memory pressure resulting in eviction of
> +the inode from the memory. As a result, for any dependency on
> +the fallocated region, user should make sure to recheck fallocate
> +after reopening the file.
> +
> +TODO
> +====
> +Need to get rid of the raw scanning stuff. Instead, always use
> +a get next directory entry approach. The only thing left that uses
> +raw scanning is the directory renaming code.
> +
> +
> +POSSIBLE PROBLEMS
> +=================
> +
> +- vfat_valid_longname does not properly checked reserved names.
> +- When a volume name is the same as a directory name in the root
> + directory of the filesystem, the directory name sometimes shows
> + up as an empty file.
> +- autoconv option does not work correctly.
> +
> +BUG REPORTS
> +===========
> +If you have trouble with the *VFAT* filesystem, mail bug reports to
> +chaffee@xxxxxxxxxxxxxxxxxxxxx
> +
> +Please specify the filename and the operation that gave you trouble.
> +
> +TEST SUITE
> +==========
> +If you plan to make any modifications to the vfat filesystem, please
> +get the test suite that comes with the vfat distribution at
> +
> +`<http://web.archive.org/web/*/http://bmrc.berkeley.edu/people/chaffee/vfat.html>`_
> +
> +This tests quite a few parts of the vfat filesystem and additional
> +tests for new features or untested features would be appreciated.
> +
> +NOTES ON THE STRUCTURE OF THE VFAT FILESYSTEM
> +=============================================
> +This documentation was provided by Galen C. Hunt gchunt@xxxxxxxxxxxxxxxx and lightly annotated by Gordon Chaffee.

One more time, please avoid these really long lines.

> +
> +This document presents a very rough, technical overview of my
> +knowledge of the extended FAT file system used in Windows NT 3.5 and
> +Windows 95. I don't guarantee that any of the following is correct,
> +but it appears to be so.

A paragraph like that suggests that this information might be a wee bit out
of date - even if VFAT hasn't been changing much. It might be worth asking
the maintainer for an opinion on how current things are and maybe putting
in a warning if it's truly obsolete.

> +The extended FAT file system is almost identical to the FAT
> +file system used in DOS versions up to and including *6.223410239847*
> +:-). The significant change has been the addition of long file names.
> +These names support up to *255* characters including spaces and lower
> +case characters as opposed to the traditional *8.3* short names.
> +
> +Here is the description of the traditional *FAT* entry in the current
> +Windows 95 filesystem: ::

Too many colons, just say "filesystem::". There's a number of these.

I'll stop here, that's enough to work on for now.

Thanks,

jon