summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/afr/src/afr-dir-write.c
diff options
context:
space:
mode:
authorPranith Kumar K <pkarampu@redhat.com>2014-08-21 10:44:14 +0530
committerPranith Kumar Karampuri <pkarampu@redhat.com>2014-08-21 07:53:47 -0700
commitf83067f2a9fc5d85bbd985e14fcda07346371ec8 (patch)
tree300db4d7649e802e968aa2ab32d180e16097273a /xlators/cluster/afr/src/afr-dir-write.c
parentbbb7da5abe6b7275d9b633f8ad7692a4f2132c71 (diff)
cluster/afr: Set pending changelog based on filetype for new entries
Change-Id: Ib6eea2dfe43aacf1f3446cc023adecbcf8645d48 BUG: 1132102 Signed-off-by: Pranith Kumar K <pkarampu@redhat.com> Reviewed-on: http://review.gluster.org/8506 Reviewed-by: Anuradha Talur <atalur@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com>
Diffstat (limited to 'xlators/cluster/afr/src/afr-dir-write.c')
-rw-r--r--xlators/cluster/afr/src/afr-dir-write.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/xlators/cluster/afr/src/afr-dir-write.c b/xlators/cluster/afr/src/afr-dir-write.c
index d59536fcb48..a9f272126ae 100644
--- a/xlators/cluster/afr/src/afr-dir-write.c
+++ b/xlators/cluster/afr/src/afr-dir-write.c
@@ -278,7 +278,8 @@ afr_mark_new_entry_changelog (call_frame_t *frame, xlator_t *this)
dict_t *xattr = NULL;
int32_t **changelog = NULL;
int i = 0;
- int idx = 0;
+ int idx = -1;
+ int m_idx = 0;
int op_errno = ENOMEM;
unsigned char *pending = NULL;
int call_count = 0;
@@ -298,11 +299,17 @@ afr_mark_new_entry_changelog (call_frame_t *frame, xlator_t *this)
if (!changelog)
goto out;
+ new_local->pending = changelog;
xattr = dict_new ();
if (!xattr)
goto out;
- idx = afr_index_for_transaction_type (AFR_DATA_TRANSACTION);
+ if (IA_ISREG (local->cont.dir_fop.buf.ia_type)) {
+ idx = afr_index_for_transaction_type (AFR_DATA_TRANSACTION);
+ } else if (IA_ISDIR (local->cont.dir_fop.buf.ia_type)) {
+ idx = afr_index_for_transaction_type (AFR_ENTRY_TRANSACTION);
+ }
+ m_idx = afr_index_for_transaction_type (AFR_METADATA_TRANSACTION);
pending = alloca0 (priv->child_count);
@@ -313,11 +320,12 @@ afr_mark_new_entry_changelog (call_frame_t *frame, xlator_t *this)
continue;
}
- changelog[i][idx] = hton32(1);
+ changelog[i][m_idx] = hton32(1);
+ if (idx != -1)
+ changelog[i][idx] = hton32(1);
pending[i] = 1;
}
- new_local->pending = changelog;
uuid_copy (new_local->loc.gfid, local->cont.dir_fop.buf.ia_gfid);
new_local->loc.inode = inode_ref (local->inode);