X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=utils%2Fmount%2Fstropts.c;h=b6d3a12292ff0a0ccd906010c5a831b611b1942a;hb=4ce9ddfb03de06e90fb4cf0eb5767cb0e3a98905;hp=1d2cde6d0386d4bfc702134b8f62b420289543bb;hpb=56cfa1320a00cec885fbdf51c54b72acb01a95c0;p=nfs-utils.git diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c index 1d2cde6..b6d3a12 100644 --- a/utils/mount/stropts.c +++ b/utils/mount/stropts.c @@ -237,6 +237,27 @@ static int set_mandatory_options(const char *type, return 1; } +/* + * Distinguish between permanent and temporary errors. + * + * Returns 0 if the passed-in error is temporary, thus the + * mount system call should be retried; returns one if the + * passed-in error is permanent, thus the mount system call + * should not be retried. + */ +static int is_permanent_error(int error) +{ + switch (error) { + case EACCES: + case ESTALE: + case ETIMEDOUT: + case ECONNREFUSED: + return 0; /* temporary */ + default: + return 1; /* permanent */ + } +} + /* * Reconstruct the mount option string based on a portmapper probe * of the server. Returns one if the server's portmapper returned @@ -538,23 +559,11 @@ int nfsmount_string(const char *spec, const char *node, const char *type, if (!set_mandatory_options(type, &saddr, options)) goto out; - if (po_join(options, extra_opts) == PO_FAILED) { - nfs_error(_("%s: internal option parsing error"), progname); + if (try_mount(spec, node, type, flags, options, fake, extra_opts)) { + mount_error(spec, node, errno); goto out; } - if (verbose) - printf(_("%s: text-based options: '%s'\n"), - progname, *extra_opts); - - if (!fake) { - if (mount(spec, node, type, - flags & ~(MS_USER|MS_USERS), *extra_opts)) { - mount_error(spec, node, errno); - goto out; - } - } - retval = EX_SUCCESS; out: