Re: [cifs-utils PATCH v1 0/2] man page cleanup

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Great, thanks! Will take a closer look and merge if no objections.

--
Best regards,
Pavel Shilovsky


2018-07-10 8:50 GMT-07:00 Aurelien Aptel <aaptel@xxxxxxxx>:
> Hi,
>
> I've noticed it's hard to keep the documentation for the mount options
> in sync with what the kernel implements.
>
> 1) Several options were not documented.
> 2) Several options were documented but were not implemented in the
>    kernel
> 3) Additionnaly there are some issues where the mount options are not
>    very consistent: we have negative options without positive ones
>    ("nosharesock" but no "sharesock").
>
> To help with that I've written a script that parses cifs.ko connect.c
> and mount.cifs.rst (nothing fancy but works) and tries to cross check
> for the 3 problems described above. For (1) it also prints the kernel
> code associated with the option.
>
> I've added some logic to skip a few cases where no documentation is OK:
>
> * If the option is mapped to Opt_ignored
> * If the negative ("noX" for "X" or "X" for "noX") option is
>   documented
> * If any of the option aliases (option mapped to the same Opt_X enum)
>   is documented
>
> Give this information I've fixed the man page by adding missing
> options, removing 2 (they were deprecated and not implemented by the
> kernel anymore for some time). I did not fix any problem from (3).
>
> There are still some undocumented options but I've left them as is as
> they are either internal options added by mount.cifs or because there
> is a better interface to the feature (sec vs. sign).
>
> Here's the output of the script against my master before this
> patchset:
>
>     $ ./checkopts  ~/prog/linux/for-next/fs/cifs/connect.c mount.cifs.rst
>     UNDOCUMENTED OPTIONS
>     ====================
>     # skipping _netdev (Opt_ignore)
>
>     OPTION noac ("noac" -> Opt_noac):
>     | pr_warn("CIFS: Mount option noac not supported. Instead set /proc/fs/cifs/LookupCacheEnabled to 0\n");
>     | break;
>
>     # skipping acl (noacl is documented)
>
>     # skipping noauto (Opt_ignore)
>
>     OPTION noautotune ("noautotune" -> Opt_noautotune):
>     | vol->noautotune = 1;
>     | break;
>
>     OPTION noblocksend ("noblocksend" -> Opt_noblocksend):
>     | vol->noblocksnd = 1;
>     | break;
>
>     # skipping brl (nobrl is documented)
>
>     # skipping nocifsacl (cifsacl is documented)
>
>     # skipping nodev (Opt_ignore)
>
>     # skipping dev (Opt_ignore)
>
>     OPTION nodfs ("nodfs" -> Opt_nodfs):
>     | vol->nodfs = 1;
>     | break;
>
>     # skipping dirmode (alias dir_mode is documented)
>
>     OPTION domainauto ("domainauto" -> Opt_domainauto):
>     | vol->domainauto = true;
>     | break;
>
>     # skipping nodynperm (dynperm is documented)
>
>     # skipping exec (Opt_ignore)
>
>     # skipping noexec (Opt_ignore)
>
>     # skipping noforcegid (forcegid is documented)
>
>     OPTION forcemand ("forcemand" -> Opt_forcemandatorylock):
>     | vol->mand_lock = 1;
>     | break;
>
>     OPTION forcemandatorylock ("forcemandatorylock" -> Opt_forcemandatorylock):
>     | vol->mand_lock = 1;
>     | break;
>
>     # skipping noforceuid (forceuid is documented)
>
>     # skipping nohard (hard is documented)
>
>     OPTION idsfromsid ("idsfromsid" -> Opt_setuidfromacl):
>     | vol->setuidfromacl = 1;
>     | break;
>
>     OPTION linux ("linux" -> Opt_unix):
>     | if (vol->no_linux_ext)
>     |   cifs_dbg(VFS,
>     |           "conflicting unix mount options\n");
>     | vol->linux_ext = 1;
>     | break;
>
>     # skipping nolinux (alias nounix is documented)
>
>     OPTION locallease ("locallease" -> Opt_locallease):
>     | vol->local_lease = 1;
>     | break;
>
>     # skipping nolock (alias nobrl is documented)
>
>     # skipping nomand (Opt_ignore)
>
>     # skipping mand (Opt_ignore)
>
>     OPTION nomapposix ("nomapposix" -> Opt_nomapposix):
>     | vol->remap = false;
>     | break;
>
>     OPTION mapposix ("mapposix" -> Opt_mapposix):
>     | vol->remap = true;
>     | vol->sfu_remap = false; /* disable SFU mapping */
>     | break;
>
>     OPTION max_credits ("max_credits=%s" -> Opt_max_credits):
>     |   if (get_option_ul(args, &option) || (option < 20) ||
>     |       (option > 60000)) {
>     |           cifs_dbg(VFS, "%s: Invalid max_credits value\n",
>     |                    __func__);
>     |           goto cifs_parse_mount_err;
>     |   }
>     |   vol->max_credits = option;
>     |   break;
>     |
>     | /* String Arguments */
>     |
>
>     # skipping path (Opt_ignore)
>
>     OPTION persistenthandles ("persistenthandles" -> Opt_persistent):
>     | vol->persistent = true;
>     | if ((vol->nopersistent) || (vol->resilient)) {
>     |   cifs_dbg(VFS,
>     |     "persistenthandles mount options conflict\n");
>     |   goto cifs_parse_mount_err;
>     | }
>     | break;
>
>     OPTION nopersistenthandles ("nopersistenthandles" -> Opt_nopersistent):
>     | vol->nopersistent = true;
>     | if (vol->persistent) {
>     |   cifs_dbg(VFS,
>     |     "persistenthandles mount options conflict\n");
>     |   goto cifs_parse_mount_err;
>     | }
>     | break;
>
>     # skipping noposix (alias nounix is documented)
>
>     OPTION posix ("posix" -> Opt_unix):
>     | if (vol->no_linux_ext)
>     |   cifs_dbg(VFS,
>     |           "conflicting unix mount options\n");
>     | vol->linux_ext = 1;
>     | break;
>
>     OPTION rdma ("rdma" -> Opt_rdma):
>     |   vol->rdma = true;
>     |   break;
>     |
>     | /* Numeric Values */
>
>     OPTION noresilienthandles ("noresilienthandles" -> Opt_noresilient):
>     | vol->resilient = false; /* already the default */
>     | break;
>
>     OPTION resilienthandles ("resilienthandles" -> Opt_resilient):
>     | vol->resilient = true;
>     | if (vol->persistent) {
>     |   cifs_dbg(VFS,
>     |     "persistenthandles mount options conflict\n");
>     |   goto cifs_parse_mount_err;
>     | }
>     | break;
>
>     # skipping nosfu (sfu is documented)
>
>     OPTION nosharesock ("nosharesock" -> Opt_nosharesock):
>     | vol->nosharesock = true;
>     | break;
>
>     OPTION sign ("sign" -> Opt_sign):
>     | vol->sign = true;
>     | break;
>
>     OPTION sloppy ("sloppy" -> Opt_sloppy):
>     | sloppy = true;
>     | break;
>
>     OPTION snapshot ("snapshot=%s" -> Opt_snapshot):
>     | if (get_option_ul(args, &option)) {
>     |   cifs_dbg(VFS, "%s: Invalid snapshot time\n",
>     |            __func__);
>     |   goto cifs_parse_mount_err;
>     | }
>     | vol->snapshot_time = option;
>     | break;
>
>     # skipping nosoft (soft is documented)
>
>     OPTION srcaddr ("srcaddr=%s" -> Opt_srcaddr):
>     | string = match_strdup(args);
>     | if (string == NULL)
>     |   goto out_nomem;
>     |
>     | if (!cifs_convert_address(
>     |           (struct sockaddr *)&vol->srcaddr,
>     |           string, strlen(string))) {
>     |   pr_warn("CIFS: Could not parse srcaddr: %s\n",
>     |           string);
>     |   goto cifs_parse_mount_err;
>     | }
>     | break;
>
>     OPTION strictsync ("strictsync" -> Opt_strictsync):
>     | vol->nostrictsync = 0;
>     | break;
>
>     OPTION nostrictsync ("nostrictsync" -> Opt_nostrictsync):
>     | vol->nostrictsync = 1;
>     | break;
>
>     # skipping nosuid (Opt_ignore)
>
>     # skipping suid (Opt_ignore)
>
>     # skipping target (Opt_ignore)
>
>     # skipping unc (Opt_ignore)
>
>     # skipping unix (nounix is documented)
>
>     # skipping user_xattr (nouser_xattr is documented)
>
>     OPTION ver ("ver=%s" -> Opt_ver):
>     | /* version of mount userspace tools, not dialect */
>     | string = match_strdup(args);
>     | if (string == NULL)
>     |   goto out_nomem;
>     |
>     | /* If interface changes in mount.cifs bump to new ver */
>     | if (strncasecmp(string, "1", 1) == 0) {
>     |   if (strlen(string) > 1) {
>     |           pr_warn("Bad mount helper ver=%s. Did "
>     |                   "you want SMB1 (CIFS) dialect "
>     |                   "and mean to type vers=1.0 "
>     |                   "instead?\n", string);
>     |           goto cifs_parse_mount_err;
>     |   }
>     |   /* This is the default */
>     |   break;
>     | }
>     | /* For all other value, error */
>     | pr_warn("CIFS: Invalid mount helper version specified\n");
>     | goto cifs_parse_mount_err;
>
>
>     DOCUMENTED BUT NON-EXISTING OPTIONS
>     ===================================
>     OPTION directio ("directio")
>     OPTION servernetbiosname ("servernetbiosname=arg")
>     OPTION strictcache ("strictcache")
>
>     NEGATIVE OPTIONS WITHOUT POSITIVE
>     =================================
>     OPTION noac exists but not ac
>     OPTION noauto exists but not auto
>     OPTION noautotune exists but not autotune
>     OPTION noblocksend exists but not blocksend
>     OPTION nocase exists but not case
>     OPTION nodfs exists but not dfs
>     OPTION nolock exists but not lock
>     OPTION nosharesock exists but not sharesock
>
>
> Aurelien Aptel (2):
>   checkopts: add python script to cross check mount options
>   mount.cifs.rst: document missing options, correct wrong ones
>
>  checkopts      | 240 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  mount.cifs.rst | 111 ++++++++++++++++++--------
>  2 files changed, 319 insertions(+), 32 deletions(-)
>  create mode 100755 checkopts
>
> --
> 2.13.6
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux