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