summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-snapshot.c
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-snapshot.c')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-snapshot.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot.c b/xlators/mgmt/glusterd/src/glusterd-snapshot.c
index 830903818..82335e892 100644
--- a/xlators/mgmt/glusterd/src/glusterd-snapshot.c
+++ b/xlators/mgmt/glusterd/src/glusterd-snapshot.c
@@ -2539,6 +2539,8 @@ glusterd_snap_brick_create (char *device, glusterd_volinfo_t *snap_volinfo,
char *mnt_pt = NULL;
struct mntent *entry = NULL;
FILE *mtab = NULL;
+ char *snap_brick_dir = NULL;
+ char snap_brick_path[PATH_MAX] = {0, };
this = THIS;
priv = this->private;
@@ -2569,13 +2571,30 @@ glusterd_snap_brick_create (char *device, glusterd_volinfo_t *snap_volinfo,
if (tmp[0] == '-')
tmp[0] = '/';
+ ret = glusterd_get_brick_root (original_brickinfo->path, &mnt_pt);
+ if (ret) {
+ gf_log (this->name, GF_LOG_WARNING, "could not get the root of"
+ "the brick path %s", original_brickinfo->path);
+ goto out;
+ }
+
+ if (strncmp (original_brickinfo->path, mnt_pt, strlen (mnt_pt))) {
+ gf_log (this->name, GF_LOG_WARNING, "brick: %s brick mount: %s",
+ original_brickinfo->path, mnt_pt);
+ goto out;
+ }
+
+ snap_brick_dir = &original_brickinfo->path[strlen (mnt_pt)];
+ if (snap_brick_dir)
+ snap_brick_dir++;
+
snprintf (snap_brick_mount_path, sizeof (snap_brick_mount_path),
"%s/%s%s-brick", GLUSTERD_DEFAULT_SNAPS_BRICK_DIR,
snap_volinfo->volname, tmp);
- ret = glusterd_get_brick_root (original_brickinfo->path, &mnt_pt);
- if (ret)
- goto out;
+ snprintf (snap_brick_path, sizeof (snap_brick_path), "%s/%s",
+ snap_brick_mount_path, snap_brick_dir);
+
entry = glusterd_get_mnt_entry_info (mnt_pt, mtab);
if (!entry) {
@@ -2611,7 +2630,7 @@ glusterd_snap_brick_create (char *device, glusterd_volinfo_t *snap_volinfo,
}
strcpy (snap_brickinfo->hostname, original_brickinfo->hostname);
- strcpy (snap_brickinfo->path, snap_brick_mount_path);
+ strcpy (snap_brickinfo->path, snap_brick_path);
LOCK (&snap_volinfo->lock);
{
list_add_tail (&snap_brickinfo->brick_list,
@@ -2629,6 +2648,7 @@ out:
endmntent (mtab);
gf_log ("", GF_LOG_TRACE, "Returning %d", ret);
+ GF_FREE (mnt_pt);
return ret;
}