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