diff options
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-snapshot.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-snapshot.c | 28 |
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; } |