X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=utils%2Fmount%2Fstropts.c;h=b5956495eeebf164638d9613102faf81e503a4a5;hb=5df68929ceef7742f7669ba5925ea31b7b5a699c;hp=709f0ff24ed3e4d1fd7382c03de2f42919dcd0ee;hpb=e1eccc5fc317f73801522b3b498c6dab67b048d2;p=nfs-utils.git diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c index 709f0ff..b595649 100644 --- a/utils/mount/stropts.c +++ b/utils/mount/stropts.c @@ -93,9 +93,10 @@ struct nfsmount_info { child; /* forked bg child? */ }; -inline void set_default_version(struct nfsmount_info *mi); #ifdef MOUNT_CONFIG -inline void set_default_version(struct nfsmount_info *mi) +static void nfs_default_version(struct nfsmount_info *mi); + +static void nfs_default_version(struct nfsmount_info *mi) { extern unsigned long config_default_vers; /* @@ -108,7 +109,7 @@ inline void set_default_version(struct nfsmount_info *mi) } } #else -inline void set_default_version(struct nfsmount_info *mi) {} +inline void nfs_default_version(struct nfsmount_info *mi) {} #endif /* MOUNT_CONFIG */ /* @@ -276,6 +277,41 @@ static int nfs_append_sloppy_option(struct mount_options *options) return 0; return 1; } + +static int nfs_set_version(struct nfsmount_info *mi) +{ + if (!nfs_nfs_version(mi->options, &mi->version)) + return 0; + + if (strncmp(mi->type, "nfs4", 4) == 0) + mi->version = 4; + else { + char *option = po_get(mi->options, "proto"); + if (option && strcmp(option, "rdma") == 0) + mi->version = 3; + } + + /* + * If we still don't know, check for version-specific + * mount options. + */ + if (mi->version == 0) { + if (po_contains(mi->options, "mounthost") || + po_contains(mi->options, "mountaddr") || + po_contains(mi->options, "mountvers") || + po_contains(mi->options, "mountproto")) + mi->version = 3; + } + + /* + * If enabled, see if the default version was + * set in the config file + */ + nfs_default_version(mi); + + return 1; +} + /* * Set up mandatory non-version specific NFS mount options. * @@ -292,21 +328,8 @@ static int nfs_validate_options(struct nfsmount_info *mi) if (!nfs_name_to_address(mi->hostname, sap, &mi->salen)) return 0; - if (!nfs_nfs_version(mi->options, &mi->version)) + if (!nfs_set_version(mi)) return 0; - if (strncmp(mi->type, "nfs4", 4) == 0) - mi->version = 4; - else { - char *option = po_get(mi->options, "proto"); - if (option && strcmp(option, "rdma") == 0) - mi->version = 3; - } - - /* - * If enabled, see if the default version was - * set in the config file - */ - set_default_version(mi); if (!nfs_append_sloppy_option(mi->options)) return 0; @@ -598,12 +621,13 @@ static int nfs_try_mount_v4(struct nfsmount_info *mi) errno = EINVAL; goto out_fail; } + /* * Update option string to be recorded in /etc/mtab. */ if (po_join(options, mi->extra_opts) == PO_FAILED) { errno = ENOMEM; - return 0; + goto out_fail; } result = nfs_sys_mount(mi, options);