From 8061a5cd2899beb17bf2b82c48c47d87e5b46908 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Fri, 13 Apr 2018 11:38:37 -0700 Subject: [PATCH] scoutfs: add server bind warning Emit an error message if the server fails to bind. It can mean that there is a bad configured address. But we might want to be able to bind if the address becomes available, so we don't hard error. We only emit the message once for a series of failures. Signed-off-by: Zach Brown --- kmod/src/server.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/kmod/src/server.c b/kmod/src/server.c index 7482e4bd..89a39d81 100644 --- a/kmod/src/server.c +++ b/kmod/src/server.c @@ -47,6 +47,7 @@ struct server_info { struct mutex mutex; bool shutting_down; + bool bind_warned; struct task_struct *listen_task; struct socket *listen_sock; @@ -906,8 +907,20 @@ static void scoutfs_server_func(struct work_struct *work) goto out; addrlen = sizeof(sin); - ret = kernel_bind(sock, (struct sockaddr *)&sin, addrlen) ?: - kernel_getsockname(sock, (struct sockaddr *)&sin, &addrlen); + ret = kernel_bind(sock, (struct sockaddr *)&sin, addrlen); + if (ret) { + if (!server->bind_warned) { + scoutfs_err(sb, "server failed to bind to "SIN_FMT", errno %d%s. Retrying indefinitely..", + SIN_ARG(&sin), ret, + ret == -EADDRNOTAVAIL ? " (Bad address?)" + : ""); + server->bind_warned = true; + } + goto out; + } + server->bind_warned = false; + + kernel_getsockname(sock, (struct sockaddr *)&sin, &addrlen); if (ret) goto out;