diff options
Diffstat (limited to 'xlators/cluster/afr/src/afr-dir-write.c')
| -rw-r--r-- | xlators/cluster/afr/src/afr-dir-write.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/xlators/cluster/afr/src/afr-dir-write.c b/xlators/cluster/afr/src/afr-dir-write.c index 3cdec64536d..f996181cd2e 100644 --- a/xlators/cluster/afr/src/afr-dir-write.c +++ b/xlators/cluster/afr/src/afr-dir-write.c @@ -80,26 +80,35 @@ __dir_entry_fop_common_cbk (call_frame_t *frame, int child_index, struct iatt *postparent, struct iatt *prenewparent, struct iatt *postnewparent) { - afr_local_t *local = NULL; + afr_local_t *local = NULL; + inode_t *parent = NULL; + inode_t *parent2 = NULL; local = frame->local; + parent = local->loc.parent; + parent2 = local->newloc.parent; + if (afr_fop_failed (op_ret, op_errno)) afr_transaction_fop_failed (frame, this, child_index); if (op_ret > -1) { local->op_ret = op_ret; + AFR_UPDATE_PARENT_BUF (parent, this, child_index, local, + local->cont.dir_fop.preparent, + local->cont.dir_fop.postparent, + preparent, postparent); + + AFR_UPDATE_PARENT_BUF (parent2, this, child_index, local, + local->cont.dir_fop.prenewparent, + local->cont.dir_fop.postnewparent, + prenewparent, postnewparent); + if ((local->success_count == 0) || (child_index == local->read_child_index)) { - local->cont.dir_fop.preparent = *preparent; - local->cont.dir_fop.postparent = *postparent; if (buf) local->cont.dir_fop.buf = *buf; - if (prenewparent) - local->cont.dir_fop.prenewparent = *prenewparent; - if (postnewparent) - local->cont.dir_fop.postnewparent = *postnewparent; } local->cont.dir_fop.inode = inode; @@ -934,8 +943,8 @@ afr_link_unwind (call_frame_t *frame, xlator_t *this) local->op_ret, local->op_errno, local->cont.dir_fop.inode, &local->cont.dir_fop.buf, - &local->cont.dir_fop.preparent, - &local->cont.dir_fop.postparent, + &local->cont.dir_fop.prenewparent, + &local->cont.dir_fop.postnewparent, NULL); } @@ -958,7 +967,7 @@ afr_link_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, { __dir_entry_fop_common_cbk (frame, child_index, this, op_ret, op_errno, inode, buf, - preparent, postparent, NULL, NULL); + NULL, NULL, preparent, postparent); } UNLOCK (&frame->lock); |
