X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmount%2Fstropts.c;h=a9c0b504e400ae386289e546e8ca0e3a61b4e18d;hp=3564f15c098dbe434727f8dc9f6a76ede8ab2674;hb=6ab9cdacd2ea314a837c7affb840aeeec620cb66;hpb=c641800eb0fcaa819199e58e5c4c8d1c2a9dab5d diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c index 3564f15..a9c0b50 100644 --- a/utils/mount/stropts.c +++ b/utils/mount/stropts.c @@ -33,8 +33,11 @@ #include #include #include + #include #include +#include +#include #include "xcommon.h" #include "mount.h" @@ -45,6 +48,7 @@ #include "error.h" #include "network.h" #include "parse_opt.h" +#include "version.h" #ifdef HAVE_RPCSVC_NFS_PROT_H #include @@ -76,6 +80,7 @@ extern int nfs_mount_data_version; extern char *progname; extern int verbose; +extern int sloppy; struct nfsmount_info { const char *spec, /* server:/path */ @@ -287,6 +292,16 @@ static int verify_lock_option(struct mount_options *options) return 1; } +static int nfs_append_sloppy_option(struct mount_options *options) +{ + if (!sloppy || linux_version_code() < MAKE_VERSION(2, 6, 27)) + return 1; + + if (po_append(options, "sloppy") == PO_FAILED) + return 0; + return 1; +} + /* * Set up mandatory NFS mount options. * @@ -309,6 +324,9 @@ static int nfs_validate_options(struct nfsmount_info *mi) return 0; } + if (!nfs_append_sloppy_option(mi->options)) + return 0; + if (!append_addr_option(&saddr, mi->options)) return 0; @@ -357,9 +375,12 @@ static struct mount_options *rewrite_mount_options(char *str) int p; options = po_split(str); - if (!options) + if (!options) { + errno = EFAULT; return NULL; + } + errno = EINVAL; option = po_get(options, "addr"); if (option) { nfs_server.saddr.sin_family = AF_INET; @@ -426,7 +447,7 @@ static struct mount_options *rewrite_mount_options(char *str) po_remove_all(options, "udp"); if (!probe_bothports(&mnt_server, &nfs_server)) { - rpc_mount_errors("rpcbind", 0, 0); + errno = ESPIPE; goto err; } @@ -452,6 +473,7 @@ static struct mount_options *rewrite_mount_options(char *str) } + errno = 0; return options; err: @@ -498,10 +520,8 @@ static int nfs_retry_nfs23mount(struct nfsmount_info *mi) char **extra_opts = mi->extra_opts; retry_options = rewrite_mount_options(*extra_opts); - if (!retry_options) { - errno = EIO; + if (!retry_options) return 0; - } if (po_join(retry_options, &retry_str) == PO_FAILED) { po_destroy(retry_options);