256ebe
From 79fff98f9ca5f815cf0227312b9a997d555dad29 Mon Sep 17 00:00:00 2001
256ebe
From: Mohammed Rafi KC <rkavunga@redhat.com>
256ebe
Date: Wed, 22 May 2019 13:32:23 +0530
256ebe
Subject: [PATCH 166/169] glusterd/svc: glusterd_svcs_stop should call
256ebe
 individual wrapper function
256ebe
256ebe
glusterd_svcs_stop should call individual wrapper function to stop a
256ebe
daemon rather than calling glusterd_svc_stop. For example for shd,
256ebe
it should call glusterd_shdsvc_stop instead of calling basic API
256ebe
function to stop. Because the individual functions for each daemon
256ebe
could be doing some specific operation in their wrapper function.
256ebe
256ebe
Upstream patch: https://review.gluster.org/#/c/glusterfs/+/22761/
256ebe
256ebe
>Change-Id: Ie6d40590251ad470ef3901d1141ab7b22c3498f5
256ebe
>fixes: bz#1712741
256ebe
>Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com>
256ebe
256ebe
Change-Id: I6df03e53f08c337d5d9b0e855a0b77894a2aacc9
256ebe
BUG: 1716865
256ebe
Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com>
256ebe
Reviewed-on: https://code.engineering.redhat.com/gerrit/172288
256ebe
Tested-by: RHGS Build Bot <nigelb@redhat.com>
256ebe
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
256ebe
---
256ebe
 xlators/mgmt/glusterd/src/glusterd-shd-svc.c    | 12 ++++++++++--
256ebe
 xlators/mgmt/glusterd/src/glusterd-svc-helper.c | 10 +++++-----
256ebe
 2 files changed, 15 insertions(+), 7 deletions(-)
256ebe
256ebe
diff --git a/xlators/mgmt/glusterd/src/glusterd-shd-svc.c b/xlators/mgmt/glusterd/src/glusterd-shd-svc.c
256ebe
index 75f9a07..981cc87 100644
256ebe
--- a/xlators/mgmt/glusterd/src/glusterd-shd-svc.c
256ebe
+++ b/xlators/mgmt/glusterd/src/glusterd-shd-svc.c
256ebe
@@ -656,10 +656,18 @@ glusterd_shdsvc_stop(glusterd_svc_t *svc, int sig)
256ebe
     int pid = -1;
256ebe
 
256ebe
     conf = THIS->private;
256ebe
+    GF_VALIDATE_OR_GOTO("glusterd", conf, out);
256ebe
     GF_VALIDATE_OR_GOTO("glusterd", svc, out);
256ebe
     svc_proc = svc->svc_proc;
256ebe
-    GF_VALIDATE_OR_GOTO("glusterd", svc_proc, out);
256ebe
-    GF_VALIDATE_OR_GOTO("glusterd", conf, out);
256ebe
+    if (!svc_proc) {
256ebe
+        /*
256ebe
+         * This can happen when stop was called on a volume that is not shd
256ebe
+         * compatible.
256ebe
+         */
256ebe
+        gf_msg_debug("glusterd", 0, "svc_proc is null, ie shd already stopped");
256ebe
+        ret = 0;
256ebe
+        goto out;
256ebe
+    }
256ebe
 
256ebe
     /* Get volinfo->shd from svc object */
256ebe
     shd = cds_list_entry(svc, glusterd_shdsvc_t, svc);
256ebe
diff --git a/xlators/mgmt/glusterd/src/glusterd-svc-helper.c b/xlators/mgmt/glusterd/src/glusterd-svc-helper.c
256ebe
index f7be394..6a3ca52 100644
256ebe
--- a/xlators/mgmt/glusterd/src/glusterd-svc-helper.c
256ebe
+++ b/xlators/mgmt/glusterd/src/glusterd-svc-helper.c
256ebe
@@ -86,25 +86,25 @@ glusterd_svcs_stop(glusterd_volinfo_t *volinfo)
256ebe
     priv = this->private;
256ebe
     GF_ASSERT(priv);
256ebe
 
256ebe
-    ret = glusterd_svc_stop(&(priv->nfs_svc), SIGKILL);
256ebe
+    ret = priv->nfs_svc.stop(&(priv->nfs_svc), SIGKILL);
256ebe
     if (ret)
256ebe
         goto out;
256ebe
 
256ebe
-    ret = glusterd_svc_stop(&(priv->quotad_svc), SIGTERM);
256ebe
+    ret = priv->quotad_svc.stop(&(priv->quotad_svc), SIGTERM);
256ebe
     if (ret)
256ebe
         goto out;
256ebe
 
256ebe
     if (volinfo) {
256ebe
-        ret = glusterd_svc_stop(&(volinfo->shd.svc), PROC_START_NO_WAIT);
256ebe
+        ret = volinfo->shd.svc.stop(&(volinfo->shd.svc), SIGTERM);
256ebe
         if (ret)
256ebe
             goto out;
256ebe
     }
256ebe
 
256ebe
-    ret = glusterd_svc_stop(&(priv->bitd_svc), SIGTERM);
256ebe
+    ret = priv->bitd_svc.stop(&(priv->bitd_svc), SIGTERM);
256ebe
     if (ret)
256ebe
         goto out;
256ebe
 
256ebe
-    ret = glusterd_svc_stop(&(priv->scrub_svc), SIGTERM);
256ebe
+    ret = priv->scrub_svc.stop(&(priv->scrub_svc), SIGTERM);
256ebe
 out:
256ebe
     return ret;
256ebe
 }
256ebe
-- 
256ebe
1.8.3.1
256ebe