Blob Blame History Raw
From fd06789693cbd634676f6d8292b32ce1fa7e6bb7 Mon Sep 17 00:00:00 2001
From: Sanoj Unnikrishnan <sunnikri@redhat.com>
Date: Wed, 22 Mar 2017 15:02:12 +0530
Subject: [PATCH 417/426] Fixes quota aux mount failure

The aux mount is created on the first limit/remove_limit/list command
and it remains until volume is stopped / deleted / (quota is disabled)
, where we do a lazy unmount. If the process is uncleanly terminated,
then the mount entry remains and we get (Transport disconnected) error
on subsequent attempts to run quota list/limit-usage/remove commands.

Second issue, There is also a risk of inadvertent rm -rf on the
/var/run/gluster causing data loss for the user. Ideally, /var/run is
a temp path for application use and should not cause any data loss to
persistent storage.

Solution:
1) unmount the aux mount after each use.
2) clean stale mount before mounting, if any.

One caveat with doing mount/unmount on each command is that we cannot
use same mount point for both list and limit commands.
The reason for this is that list command needs mount to be accessible
in cli after response from glusterd, So it could be unmounted by a
limit command if executed in parallel (had we used same mount point)
Hence we use separate mount points for list and limit commands.

>Reviewed-on: https://review.gluster.org/16938
>NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
>Smoke: Gluster Build System <jenkins@build.gluster.org>
>Reviewed-by: Manikandan Selvaganesh <manikandancs333@gmail.com>
>CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
>Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
>Reviewed-by: Atin Mukherjee <amukherj@redhat.com>

Change-Id: I4f9e39da2ac2b65941399bffb6440db8a6ba59d0
BUG: 1414758
Signed-off-by: Sanoj Unnikrishnan <sunnikri@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/105515
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
---
 cli/src/cli-rpc-ops.c                              | 29 +++++++++++-
 cli/src/cli.h                                      |  7 +--
 tests/basic/ec/quota.t                             |  1 -
 tests/basic/quota-ancestry-building.t              |  1 -
 tests/basic/quota-anon-fd-nfs.t                    |  1 -
 tests/basic/quota-nfs.t                            |  1 -
 tests/basic/quota.t                                |  6 ---
 tests/basic/quota_aux_mount.t                      | 53 ++++++++++++++++++++++
 tests/bugs/cli/bug-1022905.t                       |  1 -
 tests/bugs/distribute/bug-1099890.t                |  1 -
 tests/bugs/distribute/bug-1161156.t                |  1 -
 ...ve-quota-related-option-after-disabling-quota.t |  1 -
 tests/bugs/glusterfs/bug-848251.t                  |  1 -
 tests/bugs/posix/bug-990028.t                      |  1 -
 tests/bugs/quota/bug-1087198.t                     |  1 -
 ...436-calculate-quota-cksum-during-snap-restore.t |  1 -
 tests/volume.rc                                    | 19 +++++++-
 xlators/mgmt/glusterd/src/glusterd-quota.c         | 49 +++++++++++---------
 xlators/mgmt/glusterd/src/glusterd-utils.c         | 11 +----
 xlators/mgmt/glusterd/src/glusterd-volume-ops.c    | 24 ----------
 xlators/mgmt/glusterd/src/glusterd.h               | 24 ++++++++--
 21 files changed, 151 insertions(+), 83 deletions(-)
 create mode 100755 tests/basic/quota_aux_mount.t

diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c
index 280605c..4c5c3bb 100644
--- a/cli/src/cli-rpc-ops.c
+++ b/cli/src/cli-rpc-ops.c
@@ -3620,6 +3620,26 @@ out:
 }
 
 int
+gluster_remove_auxiliary_mount (char *volname)
+{
+        int       ret                = -1;
+        char      mountdir[PATH_MAX] = {0,};
+        xlator_t  *this               = NULL;
+
+        this = THIS;
+        GF_ASSERT (this);
+
+        GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH (mountdir, volname, "/");
+        ret = gf_umount_lazy (this->name, mountdir, 1);
+        if (ret) {
+                gf_log("cli", GF_LOG_ERROR, "umount on %s failed, "
+                        "reason : %s", mountdir, strerror (errno));
+        }
+
+        return ret;
+}
+
+int
 gf_cli_print_limit_list_from_dict (cli_local_t *local, char *volname,
                                    dict_t *dict, char *default_sl, int count,
                                    int op_ret, int op_errno, char *op_errstr)
@@ -3667,7 +3687,7 @@ gf_cli_print_limit_list_from_dict (cli_local_t *local, char *volname,
                 ret = gf_canonicalize_path (path);
                 if (ret)
                         goto out;
-                GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH (mountdir, volname, path);
+                GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH (mountdir, volname, path);
                 ret = print_quota_list_from_mountdir (local, mountdir,
                                                       default_sl, path, type);
         }
@@ -4153,6 +4173,7 @@ gf_cli_quota_cbk (struct rpc_req *req, struct iovec *iov,
         }
 
 xml_output:
+
         if (global_state->mode & GLUSTER_MODE_XML) {
                 ret = cli_xml_output_str ("volQuota", NULL, rsp.op_ret,
                                           rsp.op_errno, rsp.op_errstr);
@@ -4168,6 +4189,12 @@ xml_output:
 
         ret = rsp.op_ret;
 out:
+
+        if ((type == GF_QUOTA_OPTION_TYPE_LIST)
+            || (type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS)) {
+                gluster_remove_auxiliary_mount (volname);
+        }
+
         cli_cmd_broadcast_response (ret);
         if (dict)
                 dict_unref (dict);
diff --git a/cli/src/cli.h b/cli/src/cli.h
index ba0d845..d61d170 100644
--- a/cli/src/cli.h
+++ b/cli/src/cli.h
@@ -62,9 +62,10 @@ typedef enum {
 #define GLUSTER_MODE_WIGNORE   (1 << 3)
 
 
-#define GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH(abspath, volname, path)      \
-        snprintf (abspath, sizeof (abspath)-1,                          \
-                  DEFAULT_VAR_RUN_DIRECTORY"/%s%s", volname, path);
+#define GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH(abspath, volname, path) do {       \
+        snprintf (abspath, sizeof (abspath)-1,                                \
+                  DEFAULT_VAR_RUN_DIRECTORY"/%s_quota_list%s", volname, path);\
+        } while (0)
 
 struct cli_state;
 struct cli_cmd_word;
diff --git a/tests/basic/ec/quota.t b/tests/basic/ec/quota.t
index b023240..c9612c8 100755
--- a/tests/basic/ec/quota.t
+++ b/tests/basic/ec/quota.t
@@ -40,7 +40,6 @@ EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "8.0MB" quotausage "/test"
 TEST rm $M0/test/file2.txt
 EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "0Bytes" quotausage "/test"
 TEST $CLI volume stop $V0
-EXPECT "1" get_aux
 
 rm -f $QDD
 cleanup;
diff --git a/tests/basic/quota-ancestry-building.t b/tests/basic/quota-ancestry-building.t
index 99c9718..5d2f4a7 100755
--- a/tests/basic/quota-ancestry-building.t
+++ b/tests/basic/quota-ancestry-building.t
@@ -65,7 +65,6 @@ exec 5>&-
 exec 6>&-
 
 TEST $CLI volume stop $V0
-EXPECT "1" get_aux
 
 rm -f $QDD
 cleanup;
diff --git a/tests/basic/quota-anon-fd-nfs.t b/tests/basic/quota-anon-fd-nfs.t
index ea07b52..279700d 100755
--- a/tests/basic/quota-anon-fd-nfs.t
+++ b/tests/basic/quota-anon-fd-nfs.t
@@ -107,7 +107,6 @@ EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $N0
 sleep 3
 
 TEST $CLI volume stop $V0
-EXPECT "1" get_aux
 
 rm -f $QDD
 
diff --git a/tests/basic/quota-nfs.t b/tests/basic/quota-nfs.t
index 74fde40..663a8da 100755
--- a/tests/basic/quota-nfs.t
+++ b/tests/basic/quota-nfs.t
@@ -58,7 +58,6 @@ TEST rm -f $N0/$deep/newfile_2
 EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" umount_nfs $N0
 
 TEST $CLI volume stop $V0
-EXPECT "1" get_aux
 
 rm -f $QDD
 cleanup;
diff --git a/tests/basic/quota.t b/tests/basic/quota.t
index 17d5710..7f8b21d 100755
--- a/tests/basic/quota.t
+++ b/tests/basic/quota.t
@@ -40,12 +40,8 @@ EXPECT 'on' volinfo_field $V0 'features.quota'
 EXPECT 'on' volinfo_field $V0 'features.inode-quota'
 EXPECT 'on' volinfo_field $V0 'features.quota-deem-statfs'
 
-#Wait for the auxiliarymount to come up
-sleep 3
 
 TEST $CLI volume quota $V0 limit-usage /test_dir 100MB
-# Checking for auxiliary mount
-EXPECT "0"  get_aux
 
 TEST $CLI volume quota $V0 limit-usage /test_dir/in_test_dir 150MB
 
@@ -231,9 +227,7 @@ EXPECT 'off' volinfo_field $V0 'features.quota'
 EXPECT 'off' volinfo_field $V0 'features.inode-quota'
 EXPECT '' volinfo_field $V0 'features.quota-deem-statfs'
 
-# aux mount should be removed
 TEST $CLI volume stop $V0;
-EXPECT "1" get_aux
 
 rm -f $QDD
 cleanup;
diff --git a/tests/basic/quota_aux_mount.t b/tests/basic/quota_aux_mount.t
new file mode 100755
index 0000000..78d7f47
--- /dev/null
+++ b/tests/basic/quota_aux_mount.t
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+. $(dirname $0)/../include.rc
+. $(dirname $0)/../volume.rc
+
+cleanup;
+
+##-------------------------------------------------------------
+## Tests to verify that aux mount is unmounted after each quota
+## command executes.
+##-------------------------------------------------------------
+
+TEST glusterd
+TEST pidof glusterd
+TEST $CLI volume info;
+
+TEST $CLI volume create $V0 replica 2  $H0:$B0/${V0}{1,2,3,4};
+
+EXPECT "$V0" volinfo_field $V0 'Volume Name';
+EXPECT 'Created' volinfo_field $V0 'Status';
+EXPECT '4' brick_count $V0
+
+TEST $CLI volume start $V0;
+EXPECT 'Started' volinfo_field $V0 'Status';
+
+TEST $GFS -s $H0 --volfile-id $V0 $M0;
+
+TEST mkdir -p $M0/test_dir/
+
+TEST $CLI volume quota $V0 enable
+EXPECT 'on' volinfo_field $V0 'features.quota'
+EXPECT 'on' volinfo_field $V0 'features.inode-quota'
+
+TEST $CLI volume quota $V0 limit-usage /test_dir 150MB
+EXPECT "1"  get_limit_aux
+TEST $CLI volume quota $V0 limit-objects /test_dir 10
+EXPECT "1"  get_limit_aux
+EXPECT "150.0MB" quota_hard_limit "/test_dir";
+EXPECT "1"  get_list_aux
+EXPECT "10" quota_object_hard_limit "/test_dir";
+EXPECT "1"  get_list_aux
+
+TEST $CLI volume quota $V0 remove /test_dir/
+EXPECT "1"  get_limit_aux
+TEST $CLI volume quota $V0 remove-objects /test_dir
+EXPECT "1"  get_limit_aux
+
+TEST $CLI volume quota $V0 disable
+
+TEST $CLI volume stop $V0;
+
+cleanup;
+#G_TESTDEF_TEST_STATUS_NETBSD7=BAD_TEST,BUG=1447344
diff --git a/tests/bugs/cli/bug-1022905.t b/tests/bugs/cli/bug-1022905.t
index 1d8981e..ee629e9 100644
--- a/tests/bugs/cli/bug-1022905.t
+++ b/tests/bugs/cli/bug-1022905.t
@@ -32,7 +32,6 @@ TEST $CLI volume set $V0 diagnostics.client-log-level DEBUG
 TEST $CLI volume reset $V0 force;
 
 TEST $CLI volume stop $V0
-EXPECT "1" get_aux
 TEST $CLI volume delete $V0
 
 cleanup;
diff --git a/tests/bugs/distribute/bug-1099890.t b/tests/bugs/distribute/bug-1099890.t
index 40f70d4..1a19ba8 100644
--- a/tests/bugs/distribute/bug-1099890.t
+++ b/tests/bugs/distribute/bug-1099890.t
@@ -123,7 +123,6 @@ EXPECT "1" is_dht_linkfile "$B0/${V0}1/zz"
 
 force_umount $M0
 TEST $CLI volume stop $V0
-EXPECT "1" get_aux
 UMOUNT_LOOP ${B0}/${V0}{1,2}
 rm -f ${B0}/brick{1,2}
 
diff --git a/tests/bugs/distribute/bug-1161156.t b/tests/bugs/distribute/bug-1161156.t
index 44a234c..fed90e7 100755
--- a/tests/bugs/distribute/bug-1161156.t
+++ b/tests/bugs/distribute/bug-1161156.t
@@ -50,7 +50,6 @@ TEST ! mv $N0/dir/newfile_3 $N0/newdir/
 
 umount_nfs $N0
 TEST $CLI volume stop $V0
-EXPECT "1" get_aux
 
 rm -f $QDD
 
diff --git a/tests/bugs/glusterd/bug-765230-remove-quota-related-option-after-disabling-quota.t b/tests/bugs/glusterd/bug-765230-remove-quota-related-option-after-disabling-quota.t
index 9fe55a3..de48c09 100755
--- a/tests/bugs/glusterd/bug-765230-remove-quota-related-option-after-disabling-quota.t
+++ b/tests/bugs/glusterd/bug-765230-remove-quota-related-option-after-disabling-quota.t
@@ -54,7 +54,6 @@ EXPECT '' volinfo_field $V0 'features.quota-deem-statfs'
 
 ## Finish up
 TEST $CLI volume stop $V0
-EXPECT "1" get_aux
 EXPECT 'Stopped' volinfo_field $V0 'Status';
 
 TEST $CLI volume delete $V0;
diff --git a/tests/bugs/glusterfs/bug-848251.t b/tests/bugs/glusterfs/bug-848251.t
index ed3caa3..69ffe68 100644
--- a/tests/bugs/glusterfs/bug-848251.t
+++ b/tests/bugs/glusterfs/bug-848251.t
@@ -48,6 +48,5 @@ EXPECT "80%" quota_list
 EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $MOUNTDIR
 TEST   rm -rf $MOUNTDIR
 TEST $CLI volume stop $V0
-EXPECT "1" get_aux
 
 cleanup;
diff --git a/tests/bugs/posix/bug-990028.t b/tests/bugs/posix/bug-990028.t
index d04bb2b..c864214 100755
--- a/tests/bugs/posix/bug-990028.t
+++ b/tests/bugs/posix/bug-990028.t
@@ -153,6 +153,5 @@ __init;
 links_in_same_directory;
 links_across_directories;
 TEST $CLI volume stop $V0
-EXPECT "1" get_aux
 
 cleanup
diff --git a/tests/bugs/quota/bug-1087198.t b/tests/bugs/quota/bug-1087198.t
index 0694b25..9513308 100644
--- a/tests/bugs/quota/bug-1087198.t
+++ b/tests/bugs/quota/bug-1087198.t
@@ -78,7 +78,6 @@ TEST grep -e "\"Usage is above soft limit:.*used by /\"" -- $BRICK_LOG_DIR/*
 EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $N0
 
 TEST $CLI volume stop $V0
-EXPECT "1" get_aux
 
 rm -f $QDD
 
diff --git a/tests/bugs/snapshot/bug-1202436-calculate-quota-cksum-during-snap-restore.t b/tests/bugs/snapshot/bug-1202436-calculate-quota-cksum-during-snap-restore.t
index 3669372..addc059 100644
--- a/tests/bugs/snapshot/bug-1202436-calculate-quota-cksum-during-snap-restore.t
+++ b/tests/bugs/snapshot/bug-1202436-calculate-quota-cksum-during-snap-restore.t
@@ -27,7 +27,6 @@ EXPECT '1' get_snap_count CLI_1 $V0
 
 TEST $CLI_1 volume stop $V0
 EXPECT 'Stopped' volinfo_field $V0 'Status'
-EXPECT "1" get_aux
 
 TEST $CLI_1 snapshot restore $($CLI_1 snapshot list)
 EXPECT '0' get_snap_count CLI_1 $V0
diff --git a/tests/volume.rc b/tests/volume.rc
index 7b13e13..336d9df 100644
--- a/tests/volume.rc
+++ b/tests/volume.rc
@@ -591,8 +591,9 @@ function num_graphs
 function get_aux()
 {
 ##Check if a auxiliary mount is there
+local aux_suffix=$1
 local rundir=$(gluster --print-statedumpdir)
-local pidfile="${rundir}/${V0}.pid"
+local pidfile="${rundir}/${V0}$aux_suffix.pid"
 if [ -f $pidfile ];
 then
         local pid=$(cat ${rundir}/${V0}.pid)
@@ -609,6 +610,18 @@ else
 fi
 }
 
+function get_list_aux()
+{
+# check for quota list aux mount
+	get_aux "_quota_list"
+}
+
+function get_limit_aux()
+{
+# check for quota list aux mount
+	get_aux "_quota_limit"
+}
+
 function check_for_xattr {
         local xattr=$1
         local filepath=$2
@@ -693,6 +706,10 @@ function quota_hl_exceeded()
 
 }
 
+function quota_object_hard_limit()
+{
+        quota_object_list_field $1 2
+}
 
 function scrub_status()
 {
diff --git a/xlators/mgmt/glusterd/src/glusterd-quota.c b/xlators/mgmt/glusterd/src/glusterd-quota.c
index 451eb86..a31e037 100644
--- a/xlators/mgmt/glusterd/src/glusterd-quota.c
+++ b/xlators/mgmt/glusterd/src/glusterd-quota.c
@@ -702,11 +702,6 @@ glusterd_quota_disable (glusterd_volinfo_t *volinfo, char **op_errstr,
                 }
         }
 
-        //Remove aux mount of the volume on every node in the cluster
-        ret = glusterd_remove_auxiliary_mount (volinfo->volname);
-        if (ret)
-                goto out;
-
         *crawl = _gf_true;
 
         (void) glusterd_clean_up_quota_store (volinfo);
@@ -736,7 +731,7 @@ glusterd_set_quota_limit (char *volname, char *path, char *hard_limit,
         priv = this->private;
         GF_ASSERT (priv);
 
-        GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH (abspath, volname, path);
+        GLUSTERD_GET_QUOTA_LIMIT_MOUNT_PATH (abspath, volname, path);
         ret = gf_lstat_dir (abspath, NULL);
         if (ret) {
                 gf_asprintf (op_errstr, "Failed to find the directory %s. "
@@ -1364,7 +1359,7 @@ glusterd_remove_quota_limit (char *volname, char *path, char **op_errstr,
         priv = this->private;
         GF_ASSERT (priv);
 
-        GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH (abspath, volname, path);
+        GLUSTERD_GET_QUOTA_LIMIT_MOUNT_PATH (abspath, volname, path);
         ret = gf_lstat_dir (abspath, NULL);
         if (ret) {
                 gf_asprintf (op_errstr, "Failed to find the directory %s. "
@@ -1695,6 +1690,16 @@ glusterd_op_quota (dict_t *dict, char **op_errstr, dict_t *rsp_dict)
 
         ret = 0;
 out:
+        if (type == GF_QUOTA_OPTION_TYPE_LIMIT_USAGE ||
+            type == GF_QUOTA_OPTION_TYPE_LIMIT_OBJECTS ||
+            type == GF_QUOTA_OPTION_TYPE_REMOVE ||
+            type == GF_QUOTA_OPTION_TYPE_REMOVE_OBJECTS) {
+                /* During a list operation we need the aux mount to be
+                 * accessible until the listing is done at the cli
+                 */
+                glusterd_remove_auxiliary_mount (volinfo->volname);
+        }
+
         return ret;
 }
 
@@ -1853,7 +1858,7 @@ out:
 }
 
 static int
-glusterd_create_quota_auxiliary_mount (xlator_t *this, char *volname)
+glusterd_create_quota_auxiliary_mount (xlator_t *this, char *volname, int type)
 {
         int                ret                     = -1;
         int                retry                   = 0;
@@ -1864,28 +1869,30 @@ glusterd_create_quota_auxiliary_mount (xlator_t *this, char *volname)
         char              *volfileserver           = NULL;
         glusterd_conf_t   *priv                    = NULL;
         struct stat        buf                     = {0,};
+        FILE              *file                    = NULL;
 
         GF_VALIDATE_OR_GOTO ("glusterd", this, out);
         priv = this->private;
         GF_VALIDATE_OR_GOTO (this->name, priv, out);
 
-        GLUSTERFS_GET_AUX_MOUNT_PIDFILE (pidfile_path, volname);
 
-        if (gf_is_service_running (pidfile_path, NULL)) {
-                gf_msg_debug (this->name, 0, "Aux mount of volume %s is running"
-                              " already", volname);
-                ret = 0;
-                goto out;
+        if (type == GF_QUOTA_OPTION_TYPE_LIST ||
+            type == GF_QUOTA_OPTION_TYPE_LIST_OBJECTS) {
+                GLUSTERFS_GET_QUOTA_LIST_MOUNT_PIDFILE (pidfile_path, volname);
+                GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH (mountdir, volname, "/");
+        } else {
+                GLUSTERFS_GET_QUOTA_LIMIT_MOUNT_PIDFILE (pidfile_path, volname);
+                GLUSTERD_GET_QUOTA_LIMIT_MOUNT_PATH (mountdir, volname, "/");
         }
 
-        if (glusterd_is_fuse_available () == _gf_false) {
-                gf_msg (this->name, GF_LOG_ERROR, 0,
-                        GD_MSG_MOUNT_REQ_FAIL, "Fuse unavailable");
-                ret = -1;
-                goto out;
+        file = fopen (pidfile_path, "r");
+        if (file) {
+                /* Previous command did not clean up pid file.
+                 * remove aux mount if it exists*/
+                gf_umount_lazy (this->name, mountdir, 1);
+                fclose(file);
         }
 
-        GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH (mountdir, volname, "/");
         ret = sys_mkdir (mountdir, 0777);
         if (ret && errno != EEXIST) {
                 gf_msg (this->name, GF_LOG_ERROR, errno,
@@ -2039,7 +2046,7 @@ glusterd_op_stage_quota (dict_t *dict, char **op_errstr, dict_t *rsp_dict)
                  */
                 if (is_origin_glusterd (dict)) {
                         ret = glusterd_create_quota_auxiliary_mount (this,
-                                                                     volname);
+                                                            volname, type);
                         if (ret) {
                                 *op_errstr = gf_strdup ("Failed to start aux "
                                                         "mount");
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index 19b6dcc..9eb6502 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -11200,21 +11200,12 @@ glusterd_remove_auxiliary_mount (char *volname)
 {
         int       ret                = -1;
         char      mountdir[PATH_MAX] = {0,};
-        char      pidfile[PATH_MAX]  = {0,};
         xlator_t *this               = NULL;
 
         this = THIS;
         GF_ASSERT (this);
 
-        GLUSTERFS_GET_AUX_MOUNT_PIDFILE (pidfile, volname);
-
-        if (!gf_is_service_running (pidfile, NULL)) {
-                gf_msg_debug (this->name, 0, "Aux mount of volume %s "
-                        "absent, hence returning", volname);
-                return 0;
-        }
-
-        GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH (mountdir, volname, "/");
+        GLUSTERD_GET_QUOTA_LIMIT_MOUNT_PATH (mountdir, volname, "/");
         ret = gf_umount_lazy (this->name, mountdir, 1);
         if (ret) {
                 gf_msg (this->name, GF_LOG_ERROR, errno,
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
index dd1a39a..f6dec07 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
@@ -2680,8 +2680,6 @@ glusterd_stop_volume (glusterd_volinfo_t *volinfo)
 {
         int                     ret                     = -1;
         glusterd_brickinfo_t    *brickinfo              = NULL;
-        char                    mountdir[PATH_MAX]      = {0,};
-        char                    pidfile[PATH_MAX]       = {0,};
         xlator_t                *this                   = NULL;
         glusterd_svc_t          *svc                    = NULL;
 
@@ -2710,24 +2708,6 @@ glusterd_stop_volume (glusterd_volinfo_t *volinfo)
                 goto out;
         }
 
-        /* If quota auxiliary mount is present, unmount it */
-        GLUSTERFS_GET_AUX_MOUNT_PIDFILE (pidfile, volinfo->volname);
-
-        if (!gf_is_service_running (pidfile, NULL)) {
-                gf_msg_debug (this->name, 0, "Aux mount of volume %s "
-                        "absent", volinfo->volname);
-        } else {
-                GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH (mountdir, volinfo->volname,
-                                                   "/");
-
-                ret = gf_umount_lazy (this->name, mountdir, 0);
-                if (ret)
-                        gf_msg (this->name, GF_LOG_ERROR, errno,
-                                GD_MSG_UNOUNT_FAILED,
-                                "umount on %s failed",
-                                mountdir);
-        }
-
         if (!volinfo->is_snap_volume) {
                 svc = &(volinfo->snapd.svc);
                 ret = svc->manager (svc, volinfo, PROC_START_NO_WAIT);
@@ -2809,10 +2789,6 @@ glusterd_op_delete_volume (dict_t *dict)
                 goto out;
         }
 
-        ret = glusterd_remove_auxiliary_mount (volname);
-        if (ret)
-                goto out;
-
         if (glusterd_check_ganesha_export (volinfo)) {
                 ret = manage_export_config (volname, "off", NULL);
                 if (ret)
diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h
index 0a97657..e3cc6ee 100644
--- a/xlators/mgmt/glusterd/src/glusterd.h
+++ b/xlators/mgmt/glusterd/src/glusterd.h
@@ -599,9 +599,15 @@ typedef ssize_t (*gd_serialize_t) (struct iovec outmsg, void *args);
 #define GLUSTERD_GET_QUOTAD_DIR(path, priv) \
         snprintf (path, PATH_MAX, "%s/quotad", priv->workdir);
 
-#define GLUSTERD_GET_QUOTA_AUX_MOUNT_PATH(abspath, volname, path)      \
-        snprintf (abspath, sizeof (abspath)-1,                          \
-                  DEFAULT_VAR_RUN_DIRECTORY"/%s%s", volname, path);
+#define GLUSTERD_GET_QUOTA_LIMIT_MOUNT_PATH(abspath, volname, path) do {      \
+        snprintf (abspath, sizeof (abspath)-1,                                \
+                 DEFAULT_VAR_RUN_DIRECTORY"/%s_quota_limit%s", volname, path);\
+        } while (0)
+
+#define GLUSTERD_GET_QUOTA_LIST_MOUNT_PATH(abspath, volname, path) do {       \
+        snprintf (abspath, sizeof (abspath)-1,                                \
+                  DEFAULT_VAR_RUN_DIRECTORY"/%s_quota_list%s", volname, path);\
+        } while (0)
 
 #define GLUSTERD_GET_TMP_PATH(abspath, path) do {                       \
         snprintf (abspath, sizeof (abspath)-1,                          \
@@ -690,11 +696,19 @@ typedef ssize_t (*gd_serialize_t) (struct iovec outmsg, void *args);
                            uuid_utoa(MY_UUID));                         \
         } while (0)
 
-#define GLUSTERFS_GET_AUX_MOUNT_PIDFILE(pidfile, volname) {               \
+#define GLUSTERFS_GET_QUOTA_LIMIT_MOUNT_PIDFILE(pidfile, volname) {       \
                 snprintf (pidfile, PATH_MAX-1,                            \
-                          DEFAULT_VAR_RUN_DIRECTORY"/%s.pid", volname);   \
+                          DEFAULT_VAR_RUN_DIRECTORY"/%s_quota_limit.pid", \
+                           volname);                                      \
         }
 
+#define GLUSTERFS_GET_QUOTA_LIST_MOUNT_PIDFILE(pidfile, volname) {    \
+                snprintf (pidfile, PATH_MAX-1,                            \
+                          DEFAULT_VAR_RUN_DIRECTORY"/%s_quota_list.pid",  \
+                          volname);                                       \
+        }
+
+
 #define GLUSTERD_GET_UUID_NOHYPHEN(ret_string, uuid) do {               \
                 char *snap_volname_ptr = ret_string;                    \
                 char  tmp_uuid[64];                                     \
-- 
1.8.3.1