cli: Cleanup the maintainence mount points used by quota.

Signed-off-by: Junaid <junaid@gluster.com>
Signed-off-by: Anand Avati <avati@gluster.com>

BUG: 2704 (Stale mount-points seen after execting quota list command)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2704
This commit is contained in:
Junaid 2011-04-09 05:34:23 +00:00 committed by Anand Avati
parent 11c2526e04
commit 0a05984fd9

View File

@ -32,7 +32,8 @@
#include "compat-errno.h"
#include "cli-cmd.h"
#include <sys/uio.h>
#include <stdlib.h>
#include <sys/mount.h>
#include "cli1-xdr.h"
#include "cli1.h"
#include "protocol-common.h"
@ -1308,46 +1309,43 @@ out:
int32_t
print_limit_list (char *volname, char *limit_list)
{
char mount [1024] = {0, };
char cmd_str [1024] = {0, };
char path [1024] = {0, };
char ret_str [1024] = {0, };
char value [1024] = {0, };
char umount_str [1024] = {0, };
int64_t size = 0;
int64_t limit_value = 0;
int32_t i, j, k, len, ret;
int64_t size = 0;
int64_t limit_value = 0;
int32_t i, j, k;
int32_t len = 0, ret = -1;
char path [PATH_MAX] = {0, };
char ret_str [1024] = {0, };
char value [1024] = {0, };
char mountdir [] = "/tmp/mntXXXXXX";
char cmd_str [PATH_MAX + 1024] = {0, };
if (volname == NULL || limit_list == NULL)
return -1;
GF_VALIDATE_OR_GOTO ("cli", volname, out);
GF_VALIDATE_OR_GOTO ("cli", limit_list, out);
snprintf (mount, sizeof (mount), "/etc/glusterd/mountlist/%s", volname);
snprintf (cmd_str, sizeof (cmd_str), "mkdir -p %s", mount);
snprintf (umount_str, sizeof (umount_str), "umount %s>>/dev/null 2>&1", mount);
system (umount_str);
ret = system (cmd_str);
if (ret) {
if (mkdtemp (mountdir) == NULL) {
gf_log ("cli", GF_LOG_WARNING, "failed to create a temporary "
"mount directory");
ret = -1;
goto out;
}
/* Mount a temporary client to fetch the disk usage
* of the directory on which the limit is set.
*/
snprintf (cmd_str, sizeof (cmd_str), GFS_PREFIX "/sbin/glusterfs -s localhost "
"--volfile-id %s %s", volname, mount);
"--volfile-id %s %s", volname, mountdir);
ret = system (cmd_str);
if (ret) {
gf_log ("cli", GF_LOG_WARNING, "failed to mount glusterfs client");
ret = -1;
goto out;
goto rm_dir;
}
len = strlen (limit_list);
if (len == 0) {
cli_out ("quota limit not set ");
goto out;
goto unmount;
}
i = 0;
@ -1371,8 +1369,8 @@ print_limit_list (char *volname, char *limit_list)
}
value [j] = '\0';
memset (&cmd_str, 0, 1024);
snprintf (cmd_str, sizeof (cmd_str), "%s%s", mount, path);
memset (&cmd_str, 0, sizeof (cmd_str));
snprintf (cmd_str, sizeof (cmd_str), "%s/%s", mountdir, path);
ret = getxattr (cmd_str, "trusted.limit.list", (void *) ret_str, 4096);
if (ret < 0) {
@ -1385,9 +1383,18 @@ print_limit_list (char *volname, char *limit_list)
}
i++;
}
out:
system (umount_str);
unmount:
memset (&cmd_str, 0, sizeof (cmd_str));
#if GF_LINUX_HOST_OS
snprintf (cmd_str, sizeof (cmd_str), "umount -l %s", mountdir);
#else
snprintf (cmd_str, sizeof (cmd_str), "umount %s", mountdir);
#endif
system (cmd_str);
rm_dir:
rmdir (mountdir);
out:
return ret;
}