diff options
author | Krutika Dhananjay <kdhananj@redhat.com> | 2013-08-11 10:11:30 +0530 |
---|---|---|
committer | Krutika Dhananjay <kdhananj@redhat.com> | 2013-08-12 16:28:29 +0530 |
commit | 7e35da01d35301215a22cebce7b1b473a3e9e5a3 (patch) | |
tree | 1775737bc44ce1e616d08a58a2e3b4878250c637 | |
parent | 8a681105436f953062d69d2c1dcf559d9dcd7984 (diff) |
glusterd: Remove aux mounts on every node in cluster during 'quota disable'
With this patch, upon disablement of quota on a given volume, the auxiliary
mounts if present are removed on every node by glusterd during commit op.
Change-Id: Ie50fda8da28635f3f65a25106e2277b4a2fc45f9
Signed-off-by: Krutika Dhananjay <kdhananj@redhat.com>
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-quota.c | 46 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.h | 4 |
2 files changed, 49 insertions, 1 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-quota.c b/xlators/mgmt/glusterd/src/glusterd-quota.c index 48bf9cb7..846a9631 100644 --- a/xlators/mgmt/glusterd/src/glusterd-quota.c +++ b/xlators/mgmt/glusterd/src/glusterd-quota.c @@ -484,6 +484,45 @@ out: return ret; } +static int +glusterd_remove_auxiliary_mount (char *volname) +{ + int ret = -1; + runner_t runner = {0,}; + 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_log (this->name, GF_LOG_DEBUG, "Aux mount of volume %s " + "absent, hence returning", volname); + return 0; + } + + snprintf (mountdir, sizeof (mountdir)-1, "/tmp/%s", volname); + + runinit (&runner); + runner_add_args (&runner, "umount", + +#if GF_LINUX_HOST_OS + "-l", +#endif + mountdir, NULL); + ret = runner_run_reuse (&runner); + if (ret) + gf_log (this->name, GF_LOG_ERROR, "umount on %s failed, " + "reason : %s", mountdir, strerror (errno)); + runner_end (&runner); + + rmdir (mountdir); + return ret; +} + int32_t glusterd_quota_disable (glusterd_volinfo_t *volinfo, char **op_errstr) { @@ -534,7 +573,12 @@ glusterd_quota_disable (glusterd_volinfo_t *volinfo, char **op_errstr) } else { dict_del (volinfo->dict, quota_options[i]); } - } + } + + //Remove aux mount of the volume on every node in the cluster + ret = glusterd_remove_auxiliary_mount (volinfo->volname); + if (ret) + goto out; ret = 0; out: diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h index ac58e2a6..02d2c85e 100644 --- a/xlators/mgmt/glusterd/src/glusterd.h +++ b/xlators/mgmt/glusterd/src/glusterd.h @@ -424,6 +424,10 @@ 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) { \ + snprintf (pidfile, PATH_MAX-1, \ + DEFAULT_VAR_RUN_DIRECTORY"/%s.pid", volname); \ + } int glusterd_uuid_init(); |