diff options
| author | Ravishankar N <ravishankar@redhat.com> | 2017-08-04 16:23:46 +0530 | 
|---|---|---|
| committer | Ravishankar N <ravishankar@redhat.com> | 2017-08-08 03:37:01 +0000 | 
| commit | bead74a6e085001225bc0704bad1a5db36dd75a1 (patch) | |
| tree | 1e1890c0af98da40ed79d1e58898a773563ef72f /xlators/cluster | |
| parent | e11296f8e52b7e3b13d21b41d4fa34baea878edf (diff) | |
afr: Prevent null gfids in self-heal entry re-creation
Change-Id: I5acb8bd0a19fc4e764d61e349bb690b5236ee610
BUG: 1478297
Signed-off-by: Ravishankar N <ravishankar@redhat.com>
Reviewed-on: https://review.gluster.org/17981
Smoke: Gluster Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Karthik U S <ksubrahm@redhat.com>
Diffstat (limited to 'xlators/cluster')
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-entry.c | 14 | 
1 files changed, 11 insertions, 3 deletions
diff --git a/xlators/cluster/afr/src/afr-self-heal-entry.c b/xlators/cluster/afr/src/afr-self-heal-entry.c index d7e9e60a7bf..afa3f9044e1 100644 --- a/xlators/cluster/afr/src/afr-self-heal-entry.c +++ b/xlators/cluster/afr/src/afr-self-heal-entry.c @@ -84,10 +84,20 @@ afr_selfheal_recreate_entry (call_frame_t *frame, int dst, int source,          unsigned char *newentry = NULL;          priv = this->private; +	iatt = &replies[source].poststat; +        if (iatt->ia_type == IA_INVAL || gf_uuid_is_null (iatt->ia_gfid)) { +                gf_msg (this->name, GF_LOG_ERROR, 0, AFR_MSG_SELF_HEAL_FAILED, +                        "Invalid ia_type (%d) or gfid(%s). source brick=%d, " +                        "pargfid=%s, name=%s", iatt->ia_type, +                        uuid_utoa(iatt->ia_gfid), source, +                        uuid_utoa(dir->gfid), name); +                ret = -EINVAL; +                goto out; +        } +  	xdata = dict_new();  	if (!xdata)  		return -ENOMEM; -          newentry = alloca0 (priv->child_count);  	loc.parent = inode_ref (dir);  	gf_uuid_copy (loc.pargfid, dir->gfid); @@ -103,8 +113,6 @@ afr_selfheal_recreate_entry (call_frame_t *frame, int dst, int source,  	if (ret)  		goto out; -	iatt = &replies[source].poststat; -  	srcloc.inode = inode_ref (inode);  	gf_uuid_copy (srcloc.gfid, iatt->ia_gfid);          if (iatt->ia_type != IA_IFDIR)  | 
