From 6e54f6179cb9e9d5706901a06744b8f4667c24e7 Mon Sep 17 00:00:00 2001 From: Chuck Lever Date: Mon, 24 Sep 2007 11:29:10 -0400 Subject: [PATCH] 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 Signed-off-by: Neil Brown --- utils/mount/error.c | 55 +++++++++++++++++++++++++++++++++++++++++++++ utils/mount/error.h | 2 ++ 2 files changed, 57 insertions(+) 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 diff --git a/utils/mount/error.h b/utils/mount/error.h index ce9a7b6..8b8e9ae 100644 --- a/utils/mount/error.h +++ b/utils/mount/error.h @@ -25,4 +25,6 @@ char *nfs_strerror(int); void mount_error(const char *, const char *, int); void rpc_mount_errors(char *, int, int); +void sys_mount_errors(char *, int, int, int); + void umount_error(int, const char *); -- 2.39.5