text-based mount.nfs: sort between permanent and temporary errors
authorChuck Lever <chuck.lever@oracle.com>
Wed, 10 Oct 2007 19:06:39 +0000 (15:06 -0400)
committerNeil Brown <neilb@suse.de>
Thu, 11 Oct 2007 01:03:18 +0000 (11:03 +1000)
The text-based mount.nfs program must distinguish between different types
of errors returned from the kernel.  Permanent errors, like bad mount
options, should cause an immediate failure.  Temporary errors, such as a
connection timeout, should result in a retry of some type.

Add a function that sorts between the two types of errors.  The list of
permanent errors can be adjusted later if needed.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Neil Brown <neilb@suse.de>
utils/mount/stropts.c

index 13523f8..b6d3a12 100644 (file)
@@ -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