summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/afr/src/afr-dir-write.c
diff options
context:
space:
mode:
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);