From a6304aec8c366ad7853f95348aa6c73a0b873678 Mon Sep 17 00:00:00 2001 From: Pranith K Date: Tue, 12 Oct 2010 03:08:46 +0000 Subject: mgmt/glusterd: create brick path if does not exist Signed-off-by: Pranith Kumar K Signed-off-by: Vijay Bellur BUG: 971 (dynamic volume management) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=971 --- xlators/mgmt/glusterd/src/glusterd-utils.c | 36 ++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'xlators/mgmt/glusterd/src/glusterd-utils.c') diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 1ce1dac27b4..f6fa6f66e92 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -2387,3 +2387,39 @@ glusterd_rb_check_bricks (glusterd_volinfo_t *volinfo, } return 0; } + +int +glusterd_brick_create_path (char *host, char *path, mode_t mode, + char **op_errstr) +{ + int ret = -1; + char msg[2048] = {0}; + struct stat st_buf = {0}; + + ret = stat (path, &st_buf); + if ((!ret) && (!S_ISDIR (st_buf.st_mode))) { + snprintf (msg, sizeof (msg), "brick %s:%s, " + "path %s is not a directory", host, path, path); + gf_log ("", GF_LOG_ERROR, "%s", msg); + *op_errstr = gf_strdup (msg); + ret = -1; + goto out; + } else if (!ret) { + goto out; + } + + ret = mkdir (path, mode); + if ((ret == -1) && (EEXIST != errno)) { + snprintf (msg, sizeof (msg), "brick: %s:%s, path " + "creation failed, reason: %s", + host, path, strerror(errno)); + gf_log ("glusterd",GF_LOG_ERROR, "%s", msg); + *op_errstr = gf_strdup (msg); + } else { + ret = 0; + } + +out: + gf_log ("", GF_LOG_DEBUG, "returning %d", ret); + return ret; +} -- cgit