]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/statd/callback.c
statd: Replace note() with xlog() in rpc.statd
[nfs-utils.git] / utils / statd / callback.c
index 8a85ce90737c7de3aa8ce1db7b9f1bf214b83b90..2f98aeb2adb468ae6e6d79a38a11d2a4a8346f8c 100644 (file)
@@ -9,6 +9,11 @@
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
+
+#include <arpa/inet.h>
+
+#include "rpcmisc.h"
+#include "misc.h"
 #include "statd.h"
 #include "notlist.h"
 
@@ -27,16 +32,16 @@ sm_notify_1_svc(struct stat_chge *argp, struct svc_req *rqstp)
 {
        notify_list    *lp, *call;
        static char    *result = NULL;
+       struct sockaddr_in *sin = nfs_getrpccaller_in(rqstp->rq_xprt);
+       char *ip_addr = xstrdup(inet_ntoa(sin->sin_addr));
 
-       dprintf(N_DEBUG, "Received SM_NOTIFY from %s, state: %d",
+       xlog(D_CALL, "Received SM_NOTIFY from %s, state: %d",
                                argp->mon_name, argp->state);
 
        /* quick check - don't bother if we're not monitoring anyone */
-       /* LH - this was != MULL, meaning that if anyone _was_ in our RTNL,
-        * we'd never pass this point. */
-       if (!(lp = rtnl)) {
-               note(N_WARNING, "SM_NOTIFY from %s while not monitoring any hosts.",
-                               argp->mon_name, argp->state);
+       if (rtnl == NULL) {
+               xlog_warn("SM_NOTIFY from %s while not monitoring any hosts",
+                               argp->mon_name);
                return ((void *) &result);
        }
 
@@ -45,15 +50,15 @@ sm_notify_1_svc(struct stat_chge *argp, struct svc_req *rqstp)
         * it. Lockd will want to continue monitoring the remote host
         * until it issues an SM_UNMON call.
         */
-       while ((lp = nlist_gethost(lp, argp->mon_name, 0)) != NULL) {
-               if (NL_STATE(lp) != argp->state) {
+       for (lp = rtnl ; lp ; lp = lp->next)
+               if (NL_STATE(lp) != argp->state &&
+                   (matchhostname(argp->mon_name, lp->dns_name) ||
+                    matchhostname(ip_addr, lp->dns_name))) {
                        NL_STATE(lp) = argp->state;
                        call = nlist_clone(lp);
-                       NL_TYPE(call) = NOTIFY_CALLBACK;
                        nlist_insert(&notify, call);
                }
-               lp = NL_NEXT(lp);
-       }
+
 
        return ((void *) &result);
 }