diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2007-09-24 11:29:10 -0400 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2007-09-25 11:50:16 +1000 |
commit | 6e54f6179cb9e9d5706901a06744b8f4667c24e7 (patch) | |
tree | c767c19e83deaec302997ec7eb336013c4ec41d9 /utils/mount/error.c | |
parent | 4398901d336340f5bef59991d4cea77b2970f2fe (diff) | |
download | nfs-utils-6e54f6179cb9e9d5706901a06744b8f4667c24e7.tar.gz nfs-utils-6e54f6179cb9e9d5706901a06744b8f4667c24e7.tar.xz nfs-utils-6e54f6179cb9e9d5706901a06744b8f4667c24e7.zip |
text-based mount.nfs: Add text-based error reporting function
The mount_errors() function prints an error based on what just happened in
the user-space RPC library. This is meaningless for text-based mounts,
since they don't use the RPC library for most things.
Add a new error printing function that the text-based logic can use to
report an error.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Neil Brown <neilb@suse.de>
Diffstat (limited to 'utils/mount/error.c')
-rw-r--r-- | utils/mount/error.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/utils/mount/error.c b/utils/mount/error.c index 3f7458c..480c944 100644 --- a/utils/mount/error.c +++ b/utils/mount/error.c @@ -130,6 +130,61 @@ void rpc_mount_errors(char *server, int will_retry, int bg) fprintf(stderr, "%s\n", errbuf); } +/** + * sys_mount_errors - log an error that occurred during a mount system call + * @server: C string containing name of server we are attempting to mount + * @error: errno value to report + * @will_retry: one indicates mount will retry at some later point + * @bg: one indicates this is a background mount + * + * Passed an errno value generated by a mount system call, and reports it + * on stderr (fg mount) or in the system log (bg mount). + */ +void sys_mount_errors(char *server, int error, int will_retry, int bg) +{ + int pos = 0; + char *tmp; + static int onlyonce = 0; + + tmp = &errbuf[pos]; + if (bg) + pos = snprintf(tmp, (erreob - tmp), + _("mount to NFS server '%s' failed: "), + server); + else + pos = snprintf(tmp, (erreob - tmp), + _("%s: mount to NFS server '%s' failed: "), + progname, server); + + tmp = &errbuf[pos]; + if (error == ETIMEDOUT) { + if (will_retry) + pos = snprintf(tmp, (erreob - tmp), + _("timed out, retrying")); + else + pos = snprintf(tmp, (erreob - tmp), + _("timed out, giving up")); + } else { + if (bg) { + if (will_retry) + pos = snprintf(tmp, (erreob - tmp), + _("%s, retrying"), + strerror(error)); + else + pos = snprintf(tmp, (erreob - tmp), + _("%s, giving up"), + strerror(error)); + } + } + + if (bg) { + if (onlyonce++ < 1) + openlog("mount", LOG_CONS|LOG_PID, LOG_AUTH); + syslog(LOG_ERR, "%s", errbuf); + } else + fprintf(stderr, "%s\n", errbuf); +} + /* * mount_error - report a foreground mount error * @spec: C string containing the device name being mounted |