diff options
Diffstat (limited to 'xlators/cluster/afr/src/afr-inode-write.c')
| -rw-r--r-- | xlators/cluster/afr/src/afr-inode-write.c | 3534 | 
1 files changed, 1714 insertions, 1820 deletions
diff --git a/xlators/cluster/afr/src/afr-inode-write.c b/xlators/cluster/afr/src/afr-inode-write.c index 755e928ef62..f9e2b302f8d 100644 --- a/xlators/cluster/afr/src/afr-inode-write.c +++ b/xlators/cluster/afr/src/afr-inode-write.c @@ -8,7 +8,6 @@    cases as published by the Free Software Foundation.  */ -  #include <libgen.h>  #include <unistd.h>  #include <fnmatch.h> @@ -35,771 +34,736 @@  #include "afr-messages.h"  static void -__afr_inode_write_finalize (call_frame_t *frame, xlator_t *this) -{ -	int                       i               = 0; -        int                       ret             = 0; -	int                       read_subvol     = 0; -        struct iatt              *stbuf           = NULL; -	afr_local_t              *local           = NULL; -	afr_private_t            *priv            = NULL; -        afr_read_subvol_args_t    args            = {0,}; - -	local = frame->local; -	priv = this->private; -        GF_VALIDATE_OR_GOTO (this->name, local->inode, out); - -        /*This code needs to stay till DHT sends fops on linked -         * inodes*/ -        if (!inode_is_linked (local->inode)) { -                for (i = 0; i < priv->child_count; i++) { -                        if (!local->replies[i].valid) -                                continue; -                        if (local->replies[i].op_ret == -1) -                                continue; -                        if (!gf_uuid_is_null -                                        (local->replies[i].poststat.ia_gfid)) { -                                gf_uuid_copy (args.gfid, -                                            local->replies[i].poststat.ia_gfid); -                                args.ia_type = -                                        local->replies[i].poststat.ia_type; -                                break; -                        } else { -                                ret = dict_get_bin (local->replies[i].xdata, -                                                    DHT_IATT_IN_XDATA_KEY, -                                                    (void **) &stbuf); -                                if (ret) -                                        continue; -                                gf_uuid_copy (args.gfid, stbuf->ia_gfid); -                                args.ia_type = stbuf->ia_type; -                                break; -                        } -                } +__afr_inode_write_finalize(call_frame_t *frame, xlator_t *this) +{ +    int i = 0; +    int ret = 0; +    int read_subvol = 0; +    struct iatt *stbuf = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; +    afr_read_subvol_args_t args = { +        0, +    }; + +    local = frame->local; +    priv = this->private; +    GF_VALIDATE_OR_GOTO(this->name, local->inode, out); + +    /*This code needs to stay till DHT sends fops on linked +     * inodes*/ +    if (!inode_is_linked(local->inode)) { +        for (i = 0; i < priv->child_count; i++) { +            if (!local->replies[i].valid) +                continue; +            if (local->replies[i].op_ret == -1) +                continue; +            if (!gf_uuid_is_null(local->replies[i].poststat.ia_gfid)) { +                gf_uuid_copy(args.gfid, local->replies[i].poststat.ia_gfid); +                args.ia_type = local->replies[i].poststat.ia_type; +                break; +            } else { +                ret = dict_get_bin(local->replies[i].xdata, +                                   DHT_IATT_IN_XDATA_KEY, (void **)&stbuf); +                if (ret) +                    continue; +                gf_uuid_copy(args.gfid, stbuf->ia_gfid); +                args.ia_type = stbuf->ia_type; +                break; +            }          } - -        if (local->transaction.type == AFR_METADATA_TRANSACTION) { -                read_subvol = afr_metadata_subvol_get (local->inode, this, -                                                       NULL, local->readable, -                                                       NULL, &args); -	} else { -                read_subvol = afr_data_subvol_get (local->inode, this, -                                                   NULL, local->readable, -                                                   NULL, &args); +    } + +    if (local->transaction.type == AFR_METADATA_TRANSACTION) { +        read_subvol = afr_metadata_subvol_get(local->inode, this, NULL, +                                              local->readable, NULL, &args); +    } else { +        read_subvol = afr_data_subvol_get(local->inode, this, NULL, +                                          local->readable, NULL, &args); +    } + +    local->op_ret = -1; +    local->op_errno = afr_final_errno(local, priv); +    afr_pick_error_xdata(local, priv, local->inode, local->readable, NULL, +                         NULL); + +    for (i = 0; i < priv->child_count; i++) { +        if (!local->replies[i].valid) +            continue; +        if (local->replies[i].op_ret < 0) +            continue; + +        /* Order of checks in the compound conditional +           below is important. + +           - Highest precedence: largest op_ret +           - Next precedence: if all op_rets are equal, read subvol +           - Least precedence: any succeeded subvol +        */ +        if ((local->op_ret < local->replies[i].op_ret) || +            ((local->op_ret == local->replies[i].op_ret) && +             (i == read_subvol))) { +            local->op_ret = local->replies[i].op_ret; +            local->op_errno = local->replies[i].op_errno; + +            local->cont.inode_wfop.prebuf = local->replies[i].prestat; +            local->cont.inode_wfop.postbuf = local->replies[i].poststat; + +            if (local->replies[i].xdata) { +                if (local->xdata_rsp) +                    dict_unref(local->xdata_rsp); +                local->xdata_rsp = dict_ref(local->replies[i].xdata); +            } +            if (local->replies[i].xattr) { +                if (local->xattr_rsp) +                    dict_unref(local->xattr_rsp); +                local->xattr_rsp = dict_ref(local->replies[i].xattr); +            }          } +    } -	local->op_ret = -1; -	local->op_errno = afr_final_errno (local, priv); -        afr_pick_error_xdata (local, priv, local->inode, local->readable, NULL, -                              NULL); - -	for (i = 0; i < priv->child_count; i++) { -		if (!local->replies[i].valid) -			continue; -		if (local->replies[i].op_ret < 0) -			continue; - -		/* Order of checks in the compound conditional -		   below is important. - -		   - Highest precedence: largest op_ret -		   - Next precedence: if all op_rets are equal, read subvol -		   - Least precedence: any succeeded subvol -		*/ -		if ((local->op_ret < local->replies[i].op_ret) || -		    ((local->op_ret == local->replies[i].op_ret) && -		     (i == read_subvol))) { - -			local->op_ret = local->replies[i].op_ret; -			local->op_errno = local->replies[i].op_errno; - -			local->cont.inode_wfop.prebuf = -				local->replies[i].prestat; -			local->cont.inode_wfop.postbuf = -				local->replies[i].poststat; - -			if (local->replies[i].xdata) { -				if (local->xdata_rsp) -					dict_unref (local->xdata_rsp); -				local->xdata_rsp = -					dict_ref (local->replies[i].xdata); -			} -			if (local->replies[i].xattr) { -				if (local->xattr_rsp) -					dict_unref (local->xattr_rsp); -				local->xattr_rsp = -					dict_ref (local->replies[i].xattr); -			} -		} -	} - -        afr_set_in_flight_sb_status (this, frame, local->inode); +    afr_set_in_flight_sb_status(this, frame, local->inode);  out: -        return; +    return;  } -  static void -__afr_inode_write_fill (call_frame_t *frame, xlator_t *this, int child_index, -			int op_ret, int op_errno, -			struct iatt *prebuf, struct iatt *postbuf, -			dict_t *xattr, dict_t *xdata) +__afr_inode_write_fill(call_frame_t *frame, xlator_t *this, int child_index, +                       int op_ret, int op_errno, struct iatt *prebuf, +                       struct iatt *postbuf, dict_t *xattr, dict_t *xdata)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        local = frame->local; -        priv = this->private; +    local = frame->local; +    priv = this->private; -	local->replies[child_index].valid = 1; +    local->replies[child_index].valid = 1; -        if (AFR_IS_ARBITER_BRICK(priv, child_index) && op_ret == 1) -                op_ret = iov_length (local->cont.writev.vector, -                                     local->cont.writev.count); +    if (AFR_IS_ARBITER_BRICK(priv, child_index) && op_ret == 1) +        op_ret = iov_length(local->cont.writev.vector, +                            local->cont.writev.count); -	local->replies[child_index].op_ret = op_ret; -	local->replies[child_index].op_errno = op_errno; -        if (xdata) -                local->replies[child_index].xdata = dict_ref (xdata); +    local->replies[child_index].op_ret = op_ret; +    local->replies[child_index].op_errno = op_errno; +    if (xdata) +        local->replies[child_index].xdata = dict_ref(xdata); -	if (op_ret >= 0) { -		if (prebuf) -			local->replies[child_index].prestat = *prebuf; -		if (postbuf) -			local->replies[child_index].poststat = *postbuf; -		if (xattr) -			local->replies[child_index].xattr = dict_ref (xattr); -	} else { -		afr_transaction_fop_failed (frame, this, child_index); -	} +    if (op_ret >= 0) { +        if (prebuf) +            local->replies[child_index].prestat = *prebuf; +        if (postbuf) +            local->replies[child_index].poststat = *postbuf; +        if (xattr) +            local->replies[child_index].xattr = dict_ref(xattr); +    } else { +        afr_transaction_fop_failed(frame, this, child_index); +    } -        return; +    return;  } -  static int -__afr_inode_write_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf, -                       struct iatt *postbuf, dict_t *xattr, dict_t *xdata) +__afr_inode_write_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf, +                      struct iatt *postbuf, dict_t *xattr, dict_t *xdata)  { -        afr_local_t *local = NULL; -        int child_index = (long) cookie; -        int call_count = -1; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    int child_index = (long)cookie; +    int call_count = -1; +    afr_private_t *priv = NULL; -        priv = this->private; -        local = frame->local; +    priv = this->private; +    local = frame->local; -        LOCK (&frame->lock); -        { -                __afr_inode_write_fill (frame, this, child_index, op_ret, -					op_errno, prebuf, postbuf, xattr, -					xdata); -        } -        UNLOCK (&frame->lock); +    LOCK(&frame->lock); +    { +        __afr_inode_write_fill(frame, this, child_index, op_ret, op_errno, +                               prebuf, postbuf, xattr, xdata); +    } +    UNLOCK(&frame->lock); -        call_count = afr_frame_return (frame); +    call_count = afr_frame_return(frame); -        if (call_count == 0) { -		__afr_inode_write_finalize (frame, this); +    if (call_count == 0) { +        __afr_inode_write_finalize(frame, this); -		if (afr_txn_nothing_failed (frame, this)) { -                        /*if it did pre-op, it will do post-op changing ctime*/ -                        if (priv->consistent_metadata && -                            afr_needs_changelog_update (local)) -                                afr_zero_fill_stat (local); -                        local->transaction.unwind (frame, this); -                } - -                afr_transaction_resume (frame, this); +        if (afr_txn_nothing_failed(frame, this)) { +            /*if it did pre-op, it will do post-op changing ctime*/ +            if (priv->consistent_metadata && afr_needs_changelog_update(local)) +                afr_zero_fill_stat(local); +            local->transaction.unwind(frame, this);          } -        return 0; +        afr_transaction_resume(frame, this); +    } + +    return 0;  }  /* {{{ writev */  void -afr_writev_copy_outvars (call_frame_t *src_frame, call_frame_t *dst_frame) +afr_writev_copy_outvars(call_frame_t *src_frame, call_frame_t *dst_frame)  { -        afr_local_t *src_local = NULL; -        afr_local_t *dst_local = NULL; +    afr_local_t *src_local = NULL; +    afr_local_t *dst_local = NULL; -        src_local = src_frame->local; -        dst_local = dst_frame->local; +    src_local = src_frame->local; +    dst_local = dst_frame->local; -        dst_local->op_ret = src_local->op_ret; -        dst_local->op_errno = src_local->op_errno; -        dst_local->cont.inode_wfop.prebuf = src_local->cont.inode_wfop.prebuf; -        dst_local->cont.inode_wfop.postbuf = src_local->cont.inode_wfop.postbuf; -	if (src_local->xdata_rsp) -		dst_local->xdata_rsp = dict_ref (src_local->xdata_rsp); +    dst_local->op_ret = src_local->op_ret; +    dst_local->op_errno = src_local->op_errno; +    dst_local->cont.inode_wfop.prebuf = src_local->cont.inode_wfop.prebuf; +    dst_local->cont.inode_wfop.postbuf = src_local->cont.inode_wfop.postbuf; +    if (src_local->xdata_rsp) +        dst_local->xdata_rsp = dict_ref(src_local->xdata_rsp);  }  void -afr_writev_unwind (call_frame_t *frame, xlator_t *this) +afr_writev_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t *   local = NULL; -        afr_private_t *priv = this->private; +    afr_local_t *local = NULL; +    afr_private_t *priv = this->private; -        local = frame->local; +    local = frame->local; -       if (priv->consistent_metadata) -               afr_zero_fill_stat (local); +    if (priv->consistent_metadata) +        afr_zero_fill_stat(local); -        AFR_STACK_UNWIND (writev, frame, -                          local->op_ret, local->op_errno, -                          &local->cont.inode_wfop.prebuf, -                          &local->cont.inode_wfop.postbuf, -                          local->xdata_rsp); +    AFR_STACK_UNWIND(writev, frame, local->op_ret, local->op_errno, +                     &local->cont.inode_wfop.prebuf, +                     &local->cont.inode_wfop.postbuf, local->xdata_rsp);  } -  int -afr_transaction_writev_unwind (call_frame_t *frame, xlator_t *this) +afr_transaction_writev_unwind(call_frame_t *frame, xlator_t *this)  { -        call_frame_t *fop_frame = NULL; +    call_frame_t *fop_frame = NULL; -        fop_frame = afr_transaction_detach_fop_frame (frame); +    fop_frame = afr_transaction_detach_fop_frame(frame); -        if (fop_frame) { -                afr_writev_copy_outvars (frame, fop_frame); -                afr_writev_unwind (fop_frame, this); -        } -        return 0; +    if (fop_frame) { +        afr_writev_copy_outvars(frame, fop_frame); +        afr_writev_unwind(fop_frame, this); +    } +    return 0;  }  static void -afr_writev_handle_short_writes (call_frame_t *frame, xlator_t *this) -{ -        afr_local_t   *local = NULL; -        afr_private_t *priv  = NULL; -        int           i      = 0; - -        local = frame->local; -        priv = this->private; -        /* -         * We already have the best case result of the writev calls staged -         * as the return value. Any writev that returns some value less -         * than the best case is now out of sync, so mark the fop as -         * failed. Note that fops that have returned with errors have -         * already been marked as failed. -         */ -        for (i = 0; i < priv->child_count; i++) { -                if ((!local->replies[i].valid) || -                    (local->replies[i].op_ret == -1)) -                        continue; - -                if (local->replies[i].op_ret < local->op_ret) -                        afr_transaction_fop_failed (frame, this, i); -        } +afr_writev_handle_short_writes(call_frame_t *frame, xlator_t *this) +{ +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; +    int i = 0; + +    local = frame->local; +    priv = this->private; +    /* +     * We already have the best case result of the writev calls staged +     * as the return value. Any writev that returns some value less +     * than the best case is now out of sync, so mark the fop as +     * failed. Note that fops that have returned with errors have +     * already been marked as failed. +     */ +    for (i = 0; i < priv->child_count; i++) { +        if ((!local->replies[i].valid) || (local->replies[i].op_ret == -1)) +            continue; + +        if (local->replies[i].op_ret < local->op_ret) +            afr_transaction_fop_failed(frame, this, i); +    }  }  void -afr_inode_write_fill (call_frame_t *frame, xlator_t *this, int child_index, +afr_inode_write_fill(call_frame_t *frame, xlator_t *this, int child_index,                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf,                       struct iatt *postbuf, dict_t *xdata)  { -        int ret = 0; -        afr_local_t *local = frame->local; -        uint32_t open_fd_count = 0; -        uint32_t write_is_append = 0; - -        LOCK (&frame->lock); -        { -                __afr_inode_write_fill (frame, this, child_index, op_ret, -					op_errno, prebuf, postbuf, NULL, xdata); -		if (op_ret == -1 || !xdata) -			goto unlock; - -		write_is_append = 0; -		ret = dict_get_uint32 (xdata, GLUSTERFS_WRITE_IS_APPEND, -				       &write_is_append); -		if (ret || !write_is_append) -			local->append_write = _gf_false; - -                ret = dict_get_uint32 (xdata, GLUSTERFS_ACTIVE_FD_COUNT, -                                       &open_fd_count); -                if (ret < 0) -                        goto unlock; -		if (open_fd_count > local->open_fd_count) { -                        local->open_fd_count = open_fd_count; -                        local->update_open_fd_count = _gf_true; -		} +    int ret = 0; +    afr_local_t *local = frame->local; +    uint32_t open_fd_count = 0; +    uint32_t write_is_append = 0; + +    LOCK(&frame->lock); +    { +        __afr_inode_write_fill(frame, this, child_index, op_ret, op_errno, +                               prebuf, postbuf, NULL, xdata); +        if (op_ret == -1 || !xdata) +            goto unlock; + +        write_is_append = 0; +        ret = dict_get_uint32(xdata, GLUSTERFS_WRITE_IS_APPEND, +                              &write_is_append); +        if (ret || !write_is_append) +            local->append_write = _gf_false; + +        ret = dict_get_uint32(xdata, GLUSTERFS_ACTIVE_FD_COUNT, &open_fd_count); +        if (ret < 0) +            goto unlock; +        if (open_fd_count > local->open_fd_count) { +            local->open_fd_count = open_fd_count; +            local->update_open_fd_count = _gf_true;          } +    }  unlock: -        UNLOCK (&frame->lock); +    UNLOCK(&frame->lock);  }  void -afr_process_post_writev (call_frame_t *frame, xlator_t *this) +afr_process_post_writev(call_frame_t *frame, xlator_t *this)  { -        afr_local_t     *local = NULL; +    afr_local_t *local = NULL; -        local = frame->local; +    local = frame->local; -        if (!local->stable_write && !local->append_write) -                /* An appended write removes the necessity to -                   fsync() the file. This is because self-heal -                   has the logic to check for larger file when -                   the xattrs are not reliably pointing at -                   a stale file. -                */ -                afr_fd_report_unstable_write (this, local); +    if (!local->stable_write && !local->append_write) +        /* An appended write removes the necessity to +           fsync() the file. This is because self-heal +           has the logic to check for larger file when +           the xattrs are not reliably pointing at +           a stale file. +        */ +        afr_fd_report_unstable_write(this, local); -        __afr_inode_write_finalize (frame, this); +    __afr_inode_write_finalize(frame, this); -        afr_writev_handle_short_writes (frame, this); - -        if (local->update_open_fd_count) -                local->inode_ctx->open_fd_count = local->open_fd_count; +    afr_writev_handle_short_writes(frame, this); +    if (local->update_open_fd_count) +        local->inode_ctx->open_fd_count = local->open_fd_count;  }  int -afr_writev_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf, -                     struct iatt *postbuf, dict_t *xdata) +afr_writev_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf, +                    struct iatt *postbuf, dict_t *xdata)  { -        call_frame_t    *fop_frame = NULL; -        int child_index = (long) cookie; -        int call_count  = -1; - -        afr_inode_write_fill (frame, this, child_index, op_ret, op_errno, -                              prebuf, postbuf, xdata); - -        call_count = afr_frame_return (frame); - -        if (call_count == 0) { -                afr_process_post_writev (frame, this); - -                if (!afr_txn_nothing_failed (frame, this)) { -                        //Don't unwind until post-op is complete -                        afr_transaction_resume (frame, this); -                } else { -                /* -                 * Generally inode-write fops do transaction.unwind then -                 * transaction.resume, but writev needs to make sure that -                 * delayed post-op frame is placed in fdctx before unwind -                 * happens. This prevents the race of flush doing the -                 * changelog wakeup first in fuse thread and then this -                 * writev placing its delayed post-op frame in fdctx. -                 * This helps flush make sure all the delayed post-ops are -                 * completed. -                 */ - -                        fop_frame = afr_transaction_detach_fop_frame (frame); -                        afr_writev_copy_outvars (frame, fop_frame); -                        afr_transaction_resume (frame, this); -                        afr_writev_unwind (fop_frame, this); -                } +    call_frame_t *fop_frame = NULL; +    int child_index = (long)cookie; +    int call_count = -1; + +    afr_inode_write_fill(frame, this, child_index, op_ret, op_errno, prebuf, +                         postbuf, xdata); + +    call_count = afr_frame_return(frame); + +    if (call_count == 0) { +        afr_process_post_writev(frame, this); + +        if (!afr_txn_nothing_failed(frame, this)) { +            // Don't unwind until post-op is complete +            afr_transaction_resume(frame, this); +        } else { +            /* +             * Generally inode-write fops do transaction.unwind then +             * transaction.resume, but writev needs to make sure that +             * delayed post-op frame is placed in fdctx before unwind +             * happens. This prevents the race of flush doing the +             * changelog wakeup first in fuse thread and then this +             * writev placing its delayed post-op frame in fdctx. +             * This helps flush make sure all the delayed post-ops are +             * completed. +             */ + +            fop_frame = afr_transaction_detach_fop_frame(frame); +            afr_writev_copy_outvars(frame, fop_frame); +            afr_transaction_resume(frame, this); +            afr_writev_unwind(fop_frame, this);          } -        return 0; +    } +    return 0;  }  static int -afr_arbiter_writev_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_arbiter_writev_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t *local = frame->local; -        afr_private_t *priv = this->private; -        static char byte = 0xFF; -        static struct iovec vector = {&byte, 1}; -        int32_t count = 1; +    afr_local_t *local = frame->local; +    afr_private_t *priv = this->private; +    static char byte = 0xFF; +    static struct iovec vector = {&byte, 1}; +    int32_t count = 1; -        STACK_WIND_COOKIE (frame, afr_writev_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->writev, -			   local->fd, &vector, count, local->cont.writev.offset, -			   local->cont.writev.flags, local->cont.writev.iobref, -			   local->xdata_req); +    STACK_WIND_COOKIE( +        frame, afr_writev_wind_cbk, (void *)(long)subvol, +        priv->children[subvol], priv->children[subvol]->fops->writev, local->fd, +        &vector, count, local->cont.writev.offset, local->cont.writev.flags, +        local->cont.writev.iobref, local->xdata_req); -        return 0; +    return 0;  }  int -afr_writev_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_writev_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        local = frame->local; -        priv = this->private; - -        if (AFR_IS_ARBITER_BRICK(priv, subvol)) { -                afr_arbiter_writev_wind (frame, this, subvol); -                return 0; -        } +    local = frame->local; +    priv = this->private; -	STACK_WIND_COOKIE (frame, afr_writev_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->writev, -			   local->fd, local->cont.writev.vector, -			   local->cont.writev.count, local->cont.writev.offset, -			   local->cont.writev.flags, local->cont.writev.iobref, -			   local->xdata_req); +    if (AFR_IS_ARBITER_BRICK(priv, subvol)) { +        afr_arbiter_writev_wind(frame, this, subvol);          return 0; -} +    } +    STACK_WIND_COOKIE(frame, afr_writev_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->writev, local->fd, +                      local->cont.writev.vector, local->cont.writev.count, +                      local->cont.writev.offset, local->cont.writev.flags, +                      local->cont.writev.iobref, local->xdata_req); +    return 0; +}  int -afr_do_writev (call_frame_t *frame, xlator_t *this) +afr_do_writev(call_frame_t *frame, xlator_t *this)  { -        call_frame_t    *transaction_frame = NULL; -        afr_local_t     *local             = NULL; -        int             ret   = -1; -        int             op_errno = ENOMEM; - -        transaction_frame = copy_frame (frame); -        if (!transaction_frame) -                goto out; - -        local = frame->local; -        transaction_frame->local = local; -	frame->local = NULL; +    call_frame_t *transaction_frame = NULL; +    afr_local_t *local = NULL; +    int ret = -1; +    int op_errno = ENOMEM; -	if (!AFR_FRAME_INIT (frame, op_errno)) -		goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -        local->op = GF_FOP_WRITE; +    local = frame->local; +    transaction_frame->local = local; +    frame->local = NULL; -        local->transaction.wind   = afr_writev_wind; -        local->transaction.unwind = afr_transaction_writev_unwind; +    if (!AFR_FRAME_INIT(frame, op_errno)) +        goto out; -        local->transaction.main_frame = frame; +    local->op = GF_FOP_WRITE; -        if (local->fd->flags & O_APPEND) { -               /* -                * Backend vfs ignores the 'offset' for append mode fd so -                * locking just the region provided for the writev does not -                * give consistency guarantee. The actual write may happen at a -                * completely different range than the one provided by the -                * offset, len in the fop. So lock the entire file. -                */ -                local->transaction.start   = 0; -                local->transaction.len     = 0; -        } else { -                local->transaction.start   = local->cont.writev.offset; -                local->transaction.len     = iov_length (local->cont.writev.vector, -                                                         local->cont.writev.count); -        } +    local->transaction.wind = afr_writev_wind; +    local->transaction.unwind = afr_transaction_writev_unwind; -        ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION); -        if (ret < 0) { -            op_errno = -ret; -            goto out; -        } +    local->transaction.main_frame = frame; -	return 0; +    if (local->fd->flags & O_APPEND) { +        /* +         * Backend vfs ignores the 'offset' for append mode fd so +         * locking just the region provided for the writev does not +         * give consistency guarantee. The actual write may happen at a +         * completely different range than the one provided by the +         * offset, len in the fop. So lock the entire file. +         */ +        local->transaction.start = 0; +        local->transaction.len = 0; +    } else { +        local->transaction.start = local->cont.writev.offset; +        local->transaction.len = iov_length(local->cont.writev.vector, +                                            local->cont.writev.count); +    } + +    ret = afr_transaction(transaction_frame, this, AFR_DATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } + +    return 0;  out: -	if (transaction_frame) -		AFR_STACK_DESTROY (transaction_frame); +    if (transaction_frame) +        AFR_STACK_DESTROY(transaction_frame); -	AFR_STACK_UNWIND (writev, frame, -1, op_errno, NULL, NULL, NULL); -        return 0; +    AFR_STACK_UNWIND(writev, frame, -1, op_errno, NULL, NULL, NULL); +    return 0;  } -  int -afr_writev (call_frame_t *frame, xlator_t *this, fd_t *fd, -            struct iovec *vector, int32_t count, off_t offset, -            uint32_t flags, struct iobref *iobref, dict_t *xdata) +afr_writev(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iovec *vector, +           int32_t count, off_t offset, uint32_t flags, struct iobref *iobref, +           dict_t *xdata)  { -        afr_local_t *local = NULL; -        int op_errno = ENOMEM; -        int ret = -1; +    afr_local_t *local = NULL; +    int op_errno = ENOMEM; +    int ret = -1; -	local = AFR_FRAME_INIT (frame, op_errno); -	if (!local) -		goto out; +    local = AFR_FRAME_INIT(frame, op_errno); +    if (!local) +        goto out; -        local->cont.writev.vector = iov_dup (vector, count); -	if (!local->cont.writev.vector) -		goto out; -        local->cont.writev.count      = count; -        local->cont.writev.offset     = offset; -        local->cont.writev.flags      = flags; -        local->cont.writev.iobref     = iobref_ref (iobref); +    local->cont.writev.vector = iov_dup(vector, count); +    if (!local->cont.writev.vector) +        goto out; +    local->cont.writev.count = count; +    local->cont.writev.offset = offset; +    local->cont.writev.flags = flags; +    local->cont.writev.iobref = iobref_ref(iobref); -	if (xdata) -		local->xdata_req = dict_copy_with_ref (xdata, NULL); -	else -		local->xdata_req = dict_new (); +    if (xdata) +        local->xdata_req = dict_copy_with_ref(xdata, NULL); +    else +        local->xdata_req = dict_new(); -	if (!local->xdata_req) -		goto out; +    if (!local->xdata_req) +        goto out; -        local->fd = fd_ref (fd); -        ret = afr_set_inode_local (this, local, fd->inode); -        if (ret) -                goto out; +    local->fd = fd_ref(fd); +    ret = afr_set_inode_local(this, local, fd->inode); +    if (ret) +        goto out; -        if (dict_set_uint32 (local->xdata_req, GLUSTERFS_ACTIVE_FD_COUNT, 4)) { -                op_errno = ENOMEM; -                goto out; -        } +    if (dict_set_uint32(local->xdata_req, GLUSTERFS_ACTIVE_FD_COUNT, 4)) { +        op_errno = ENOMEM; +        goto out; +    } -	if (dict_set_uint32 (local->xdata_req, GLUSTERFS_WRITE_IS_APPEND, 4)) { -		op_errno = ENOMEM; -		goto out; -	} +    if (dict_set_uint32(local->xdata_req, GLUSTERFS_WRITE_IS_APPEND, 4)) { +        op_errno = ENOMEM; +        goto out; +    } -	/* Set append_write to be true speculatively. If on any -	   server it turns not be true, we unset it in the -	   callback. -	*/ -	local->append_write = _gf_true; +    /* Set append_write to be true speculatively. If on any +       server it turns not be true, we unset it in the +       callback. +    */ +    local->append_write = _gf_true; -	/* detect here, but set it in writev_wind_cbk *after* the unstable -	   write is performed -	*/ -	local->stable_write = !!((fd->flags|flags)&(O_SYNC|O_DSYNC)); +    /* detect here, but set it in writev_wind_cbk *after* the unstable +       write is performed +    */ +    local->stable_write = !!((fd->flags | flags) & (O_SYNC | O_DSYNC)); -        afr_fix_open (fd, this); +    afr_fix_open(fd, this); -        afr_do_writev (frame, this); +    afr_do_writev(frame, this); -	return 0; +    return 0;  out: -	AFR_STACK_UNWIND (writev, frame, -1, op_errno, NULL, NULL, NULL); +    AFR_STACK_UNWIND(writev, frame, -1, op_errno, NULL, NULL, NULL); -        return 0; +    return 0;  } -  /* }}} */  /* {{{ truncate */  int -afr_truncate_unwind (call_frame_t *frame, xlator_t *this) +afr_truncate_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t *   local = NULL; -        call_frame_t   *main_frame = NULL; - -        local = frame->local; +    afr_local_t *local = NULL; +    call_frame_t *main_frame = NULL; -	main_frame = afr_transaction_detach_fop_frame (frame); -	if (!main_frame) -		return 0; +    local = frame->local; -	AFR_STACK_UNWIND (truncate, main_frame, local->op_ret, local->op_errno, -			  &local->cont.inode_wfop.prebuf, -			  &local->cont.inode_wfop.postbuf, local->xdata_rsp); +    main_frame = afr_transaction_detach_fop_frame(frame); +    if (!main_frame)          return 0; -} +    AFR_STACK_UNWIND(truncate, main_frame, local->op_ret, local->op_errno, +                     &local->cont.inode_wfop.prebuf, +                     &local->cont.inode_wfop.postbuf, local->xdata_rsp); +    return 0; +}  int -afr_truncate_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf, -                       struct iatt *postbuf, dict_t *xdata) +afr_truncate_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf, +                      struct iatt *postbuf, dict_t *xdata)  { -	afr_local_t *local = NULL; +    afr_local_t *local = NULL; -	local = frame->local; +    local = frame->local; -	if (op_ret == 0 && prebuf->ia_size != postbuf->ia_size) -		local->stable_write = _gf_false; +    if (op_ret == 0 && prebuf->ia_size != postbuf->ia_size) +        local->stable_write = _gf_false; -	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno, -				      prebuf, postbuf, NULL, xdata); +    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, prebuf, +                                 postbuf, NULL, xdata);  } -  int -afr_truncate_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_truncate_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        local = frame->local; -        priv = this->private; +    local = frame->local; +    priv = this->private; -	STACK_WIND_COOKIE (frame, afr_truncate_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->truncate, -			   &local->loc, local->cont.truncate.offset, -			   local->xdata_req); -        return 0; +    STACK_WIND_COOKIE(frame, afr_truncate_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->truncate, &local->loc, +                      local->cont.truncate.offset, local->xdata_req); +    return 0;  } -  int -afr_truncate (call_frame_t *frame, xlator_t *this, -              loc_t *loc, off_t offset, dict_t *xdata) +afr_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset, +             dict_t *xdata)  { -        afr_local_t   * local = NULL; -        call_frame_t   *transaction_frame = NULL; -	int ret = -1; -        int op_errno = ENOMEM; +    afr_local_t *local = NULL; +    call_frame_t *transaction_frame = NULL; +    int ret = -1; +    int op_errno = ENOMEM; -        transaction_frame = copy_frame (frame); -        if (!transaction_frame) -                goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -	local = AFR_FRAME_INIT (transaction_frame, op_errno); -	if (!local) -		goto out; +    local = AFR_FRAME_INIT(transaction_frame, op_errno); +    if (!local) +        goto out; -        local->cont.truncate.offset  = offset; -	if (xdata) -		local->xdata_req = dict_copy_with_ref (xdata, NULL); -	else -		local->xdata_req = dict_new (); +    local->cont.truncate.offset = offset; +    if (xdata) +        local->xdata_req = dict_copy_with_ref(xdata, NULL); +    else +        local->xdata_req = dict_new(); -	if (!local->xdata_req) -		goto out; +    if (!local->xdata_req) +        goto out; -	local->transaction.wind   = afr_truncate_wind; -        local->transaction.unwind = afr_truncate_unwind; +    local->transaction.wind = afr_truncate_wind; +    local->transaction.unwind = afr_truncate_unwind; -        loc_copy (&local->loc, loc); -        ret = afr_set_inode_local (this, local, loc->inode); -        if (ret) -                goto out; +    loc_copy(&local->loc, loc); +    ret = afr_set_inode_local(this, local, loc->inode); +    if (ret) +        goto out; -        local->op = GF_FOP_TRUNCATE; +    local->op = GF_FOP_TRUNCATE; -        local->transaction.main_frame = frame; -        local->transaction.start   = offset; -        local->transaction.len     = 0; +    local->transaction.main_frame = frame; +    local->transaction.start = offset; +    local->transaction.len = 0; -	/* Set it true speculatively, will get reset in afr_truncate_wind_cbk -	   if truncate was not a NOP */ -	local->stable_write = _gf_true; +    /* Set it true speculatively, will get reset in afr_truncate_wind_cbk +       if truncate was not a NOP */ +    local->stable_write = _gf_true; -        ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION); -        if (ret < 0) { -		op_errno = -ret; -		goto out; -        } +    ret = afr_transaction(transaction_frame, this, AFR_DATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } -	return 0; +    return 0;  out: -	if (transaction_frame) -		AFR_STACK_DESTROY (transaction_frame); +    if (transaction_frame) +        AFR_STACK_DESTROY(transaction_frame); -	AFR_STACK_UNWIND (truncate, frame, -1, op_errno, NULL, NULL, NULL); -        return 0; +    AFR_STACK_UNWIND(truncate, frame, -1, op_errno, NULL, NULL, NULL); +    return 0;  } -  /* }}} */  /* {{{ ftruncate */ -  int -afr_ftruncate_unwind (call_frame_t *frame, xlator_t *this) +afr_ftruncate_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t *   local = NULL; -        call_frame_t   *main_frame = NULL; - -        local = frame->local; +    afr_local_t *local = NULL; +    call_frame_t *main_frame = NULL; -	main_frame = afr_transaction_detach_fop_frame (frame); -	if (!main_frame) -		return 0; +    local = frame->local; -	AFR_STACK_UNWIND (ftruncate, main_frame, local->op_ret, local->op_errno, -			  &local->cont.inode_wfop.prebuf, -			  &local->cont.inode_wfop.postbuf, local->xdata_rsp); +    main_frame = afr_transaction_detach_fop_frame(frame); +    if (!main_frame)          return 0; -} +    AFR_STACK_UNWIND(ftruncate, main_frame, local->op_ret, local->op_errno, +                     &local->cont.inode_wfop.prebuf, +                     &local->cont.inode_wfop.postbuf, local->xdata_rsp); +    return 0; +}  int -afr_ftruncate_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                        int32_t op_ret, int32_t op_errno, struct iatt *prebuf, -                        struct iatt *postbuf, dict_t *xdata) +afr_ftruncate_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf, +                       struct iatt *postbuf, dict_t *xdata)  { -	afr_local_t *local = NULL; +    afr_local_t *local = NULL; -	local = frame->local; +    local = frame->local; -	if (op_ret == 0 && prebuf->ia_size != postbuf->ia_size) -		local->stable_write = _gf_false; +    if (op_ret == 0 && prebuf->ia_size != postbuf->ia_size) +        local->stable_write = _gf_false; -	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno, -				      prebuf, postbuf, NULL, xdata); +    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, prebuf, +                                 postbuf, NULL, xdata);  } -  int -afr_ftruncate_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_ftruncate_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -	local = frame->local; -	priv = this->private; +    local = frame->local; +    priv = this->private; -	STACK_WIND_COOKIE (frame, afr_ftruncate_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->ftruncate, -			   local->fd, local->cont.ftruncate.offset, -			   local->xdata_req); -        return 0; +    STACK_WIND_COOKIE(frame, afr_ftruncate_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->ftruncate, local->fd, +                      local->cont.ftruncate.offset, local->xdata_req); +    return 0;  } -  int -afr_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, -	       dict_t *xdata) +afr_ftruncate(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, +              dict_t *xdata)  { -        afr_local_t *local = NULL; -	call_frame_t *transaction_frame = NULL; -	int ret = -1; -        int op_errno = ENOMEM; +    afr_local_t *local = NULL; +    call_frame_t *transaction_frame = NULL; +    int ret = -1; +    int op_errno = ENOMEM; -	transaction_frame = copy_frame (frame); -	if (!transaction_frame) -		goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -        local = AFR_FRAME_INIT (transaction_frame, op_errno); -        if (!local) -		goto out; +    local = AFR_FRAME_INIT(transaction_frame, op_errno); +    if (!local) +        goto out; -        local->cont.ftruncate.offset  = offset; -	if (xdata) -		local->xdata_req = dict_copy_with_ref (xdata, NULL); -	else -		local->xdata_req = dict_new (); +    local->cont.ftruncate.offset = offset; +    if (xdata) +        local->xdata_req = dict_copy_with_ref(xdata, NULL); +    else +        local->xdata_req = dict_new(); -	if (!local->xdata_req) -		goto out; +    if (!local->xdata_req) +        goto out; -        local->fd = fd_ref (fd); -        ret = afr_set_inode_local (this, local, fd->inode); -        if (ret) -                goto out; +    local->fd = fd_ref(fd); +    ret = afr_set_inode_local(this, local, fd->inode); +    if (ret) +        goto out; -        local->op = GF_FOP_FTRUNCATE; +    local->op = GF_FOP_FTRUNCATE; -	local->transaction.wind   = afr_ftruncate_wind; -        local->transaction.unwind = afr_ftruncate_unwind; +    local->transaction.wind = afr_ftruncate_wind; +    local->transaction.unwind = afr_ftruncate_unwind; -        local->transaction.main_frame = frame; +    local->transaction.main_frame = frame; -        local->transaction.start   = local->cont.ftruncate.offset; -        local->transaction.len     = 0; +    local->transaction.start = local->cont.ftruncate.offset; +    local->transaction.len = 0; -        afr_fix_open (fd, this); +    afr_fix_open(fd, this); -	/* Set it true speculatively, will get reset in afr_ftruncate_wind_cbk -	   if truncate was not a NOP */ -	local->stable_write = _gf_true; +    /* Set it true speculatively, will get reset in afr_ftruncate_wind_cbk +       if truncate was not a NOP */ +    local->stable_write = _gf_true; -        ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION); -        if (ret < 0) { -		op_errno = -ret; -		goto out; -        } +    ret = afr_transaction(transaction_frame, this, AFR_DATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } -	return 0; +    return 0;  out: -	AFR_STACK_UNWIND (ftruncate, frame, -1, op_errno, NULL, NULL, NULL); +    AFR_STACK_UNWIND(ftruncate, frame, -1, op_errno, NULL, NULL, NULL); -        return 0; +    return 0;  }  /* }}} */ @@ -807,1813 +771,1743 @@ out:  /* {{{ setattr */  int -afr_setattr_unwind (call_frame_t *frame, xlator_t *this) +afr_setattr_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t *local = NULL; -        call_frame_t *main_frame = NULL; +    afr_local_t *local = NULL; +    call_frame_t *main_frame = NULL; -        local = frame->local; +    local = frame->local; -	main_frame = afr_transaction_detach_fop_frame (frame); -	if (!main_frame) -		return 0; - -	AFR_STACK_UNWIND (setattr, main_frame, local->op_ret, local->op_errno, -			  &local->cont.inode_wfop.prebuf, -			  &local->cont.inode_wfop.postbuf, -			  local->xdata_rsp); +    main_frame = afr_transaction_detach_fop_frame(frame); +    if (!main_frame)          return 0; -} +    AFR_STACK_UNWIND(setattr, main_frame, local->op_ret, local->op_errno, +                     &local->cont.inode_wfop.prebuf, +                     &local->cont.inode_wfop.postbuf, local->xdata_rsp); +    return 0; +}  int -afr_setattr_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                      int op_ret, int op_errno, -                      struct iatt *preop, struct iatt *postop, dict_t *xdata) +afr_setattr_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                     int op_ret, int op_errno, struct iatt *preop, +                     struct iatt *postop, dict_t *xdata)  { -	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno, -				      preop, postop, NULL, xdata); +    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, preop, +                                 postop, NULL, xdata);  } -  int -afr_setattr_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_setattr_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        local = frame->local; -        priv = this->private; +    local = frame->local; +    priv = this->private; -	STACK_WIND_COOKIE (frame, afr_setattr_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->setattr, -			   &local->loc, &local->cont.setattr.in_buf, -			   local->cont.setattr.valid, local->xdata_req); -        return 0; +    STACK_WIND_COOKIE(frame, afr_setattr_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->setattr, &local->loc, +                      &local->cont.setattr.in_buf, local->cont.setattr.valid, +                      local->xdata_req); +    return 0;  } -  int -afr_setattr (call_frame_t *frame, xlator_t *this, loc_t *loc, struct iatt *buf, -	     int32_t valid, dict_t *xdata) +afr_setattr(call_frame_t *frame, xlator_t *this, loc_t *loc, struct iatt *buf, +            int32_t valid, dict_t *xdata)  { -        afr_local_t *local = NULL; -        call_frame_t *transaction_frame = NULL; -        int ret = -1; -        int op_errno = ENOMEM; +    afr_local_t *local = NULL; +    call_frame_t *transaction_frame = NULL; +    int ret = -1; +    int op_errno = ENOMEM; -        transaction_frame = copy_frame (frame); -        if (!transaction_frame) -                goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -	local = AFR_FRAME_INIT (transaction_frame, op_errno); -	if (!local) -		goto out; +    local = AFR_FRAME_INIT(transaction_frame, op_errno); +    if (!local) +        goto out; -        local->cont.setattr.in_buf = *buf; -        local->cont.setattr.valid  = valid; -	if (xdata) -		local->xdata_req = dict_copy_with_ref (xdata, NULL); -	else -		local->xdata_req = dict_new (); +    local->cont.setattr.in_buf = *buf; +    local->cont.setattr.valid = valid; +    if (xdata) +        local->xdata_req = dict_copy_with_ref(xdata, NULL); +    else +        local->xdata_req = dict_new(); -	if (!local->xdata_req) -		goto out; +    if (!local->xdata_req) +        goto out; -        local->transaction.wind   = afr_setattr_wind; -        local->transaction.unwind = afr_setattr_unwind; +    local->transaction.wind = afr_setattr_wind; +    local->transaction.unwind = afr_setattr_unwind; -        loc_copy (&local->loc, loc); -        ret = afr_set_inode_local (this, local, loc->inode); -        if (ret) -                goto out; +    loc_copy(&local->loc, loc); +    ret = afr_set_inode_local(this, local, loc->inode); +    if (ret) +        goto out; -	local->op = GF_FOP_SETATTR; +    local->op = GF_FOP_SETATTR; -        local->transaction.main_frame = frame; -        local->transaction.start   = LLONG_MAX - 1; -        local->transaction.len     = 0; +    local->transaction.main_frame = frame; +    local->transaction.start = LLONG_MAX - 1; +    local->transaction.len = 0; -        ret = afr_transaction (transaction_frame, this, AFR_METADATA_TRANSACTION); -        if (ret < 0) { -		op_errno = -ret; -		goto out; -        } +    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } -	return 0; +    return 0;  out: -	if (transaction_frame) -		AFR_STACK_DESTROY (transaction_frame); +    if (transaction_frame) +        AFR_STACK_DESTROY(transaction_frame); -	AFR_STACK_UNWIND (setattr, frame, -1, op_errno, NULL, NULL, NULL); -        return 0; +    AFR_STACK_UNWIND(setattr, frame, -1, op_errno, NULL, NULL, NULL); +    return 0;  }  /* {{{ fsetattr */  int -afr_fsetattr_unwind (call_frame_t *frame, xlator_t *this) +afr_fsetattr_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t *   local = NULL; -        call_frame_t   *main_frame = NULL; - -        local = frame->local; +    afr_local_t *local = NULL; +    call_frame_t *main_frame = NULL; -	main_frame = afr_transaction_detach_fop_frame (frame); -        if (!main_frame) -		return 0; +    local = frame->local; -	AFR_STACK_UNWIND (fsetattr, main_frame, local->op_ret, local->op_errno, -			  &local->cont.inode_wfop.prebuf, -			  &local->cont.inode_wfop.postbuf, local->xdata_rsp); +    main_frame = afr_transaction_detach_fop_frame(frame); +    if (!main_frame)          return 0; -} +    AFR_STACK_UNWIND(fsetattr, main_frame, local->op_ret, local->op_errno, +                     &local->cont.inode_wfop.prebuf, +                     &local->cont.inode_wfop.postbuf, local->xdata_rsp); +    return 0; +}  int -afr_fsetattr_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                       int32_t op_ret, int32_t op_errno, -                       struct iatt *preop, struct iatt *postop, dict_t *xdata) +afr_fsetattr_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                      int32_t op_ret, int32_t op_errno, struct iatt *preop, +                      struct iatt *postop, dict_t *xdata)  { -	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno, -				      preop, postop, NULL, xdata); +    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, preop, +                                 postop, NULL, xdata);  } -  int -afr_fsetattr_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_fsetattr_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        local = frame->local; -        priv = this->private; +    local = frame->local; +    priv = this->private; -	STACK_WIND_COOKIE (frame, afr_fsetattr_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->fsetattr, -			   local->fd, &local->cont.fsetattr.in_buf, -			   local->cont.fsetattr.valid, local->xdata_req); -        return 0; +    STACK_WIND_COOKIE(frame, afr_fsetattr_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->fsetattr, local->fd, +                      &local->cont.fsetattr.in_buf, local->cont.fsetattr.valid, +                      local->xdata_req); +    return 0;  } -  int -afr_fsetattr (call_frame_t *frame, xlator_t *this, -              fd_t *fd, struct iatt *buf, int32_t valid, dict_t *xdata) +afr_fsetattr(call_frame_t *frame, xlator_t *this, fd_t *fd, struct iatt *buf, +             int32_t valid, dict_t *xdata)  { -        afr_local_t *local = NULL; -        call_frame_t *transaction_frame = NULL; -        int ret = -1; -        int op_errno = ENOMEM; +    afr_local_t *local = NULL; +    call_frame_t *transaction_frame = NULL; +    int ret = -1; +    int op_errno = ENOMEM; -        transaction_frame = copy_frame (frame); -        if (!transaction_frame) -                goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -	local = AFR_FRAME_INIT (transaction_frame, op_errno); -	if (!local) -		goto out; +    local = AFR_FRAME_INIT(transaction_frame, op_errno); +    if (!local) +        goto out; -        local->cont.fsetattr.in_buf = *buf; -        local->cont.fsetattr.valid  = valid; -	if (xdata) -		local->xdata_req = dict_copy_with_ref (xdata, NULL); -	else -		local->xdata_req = dict_new (); +    local->cont.fsetattr.in_buf = *buf; +    local->cont.fsetattr.valid = valid; +    if (xdata) +        local->xdata_req = dict_copy_with_ref(xdata, NULL); +    else +        local->xdata_req = dict_new(); -	if (!local->xdata_req) -		goto out; +    if (!local->xdata_req) +        goto out; -        local->transaction.wind   = afr_fsetattr_wind; -        local->transaction.unwind = afr_fsetattr_unwind; +    local->transaction.wind = afr_fsetattr_wind; +    local->transaction.unwind = afr_fsetattr_unwind; -        local->fd                 = fd_ref (fd); -        ret = afr_set_inode_local (this, local, fd->inode); -        if (ret) -                goto out; +    local->fd = fd_ref(fd); +    ret = afr_set_inode_local(this, local, fd->inode); +    if (ret) +        goto out; -	local->op = GF_FOP_FSETATTR; +    local->op = GF_FOP_FSETATTR; -        afr_fix_open (fd, this); +    afr_fix_open(fd, this); -        local->transaction.main_frame = frame; -        local->transaction.start   = LLONG_MAX - 1; -        local->transaction.len     = 0; +    local->transaction.main_frame = frame; +    local->transaction.start = LLONG_MAX - 1; +    local->transaction.len = 0; -        ret = afr_transaction (transaction_frame, this, AFR_METADATA_TRANSACTION); -        if (ret < 0) { -		op_errno = -ret; -		goto out; -        } +    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } -	return 0; +    return 0;  out: -	if (transaction_frame) -		AFR_STACK_DESTROY (transaction_frame); +    if (transaction_frame) +        AFR_STACK_DESTROY(transaction_frame); -	AFR_STACK_UNWIND (fsetattr, frame, -1, op_errno, NULL, NULL, NULL); -        return 0; +    AFR_STACK_UNWIND(fsetattr, frame, -1, op_errno, NULL, NULL, NULL); +    return 0;  } -  /* {{{ setxattr */ -  int -afr_setxattr_unwind (call_frame_t *frame, xlator_t *this) +afr_setxattr_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t *   local = NULL; -        call_frame_t   *main_frame = NULL; - -        local = frame->local; +    afr_local_t *local = NULL; +    call_frame_t *main_frame = NULL; -	main_frame = afr_transaction_detach_fop_frame (frame); -	if (!main_frame) -		return 0; +    local = frame->local; -	AFR_STACK_UNWIND (setxattr, main_frame, local->op_ret, local->op_errno, -			  local->xdata_rsp); +    main_frame = afr_transaction_detach_fop_frame(frame); +    if (!main_frame)          return 0; -} +    AFR_STACK_UNWIND(setxattr, main_frame, local->op_ret, local->op_errno, +                     local->xdata_rsp); +    return 0; +}  int -afr_setxattr_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                       int32_t op_ret, int32_t op_errno, dict_t *xdata) +afr_setxattr_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                      int32_t op_ret, int32_t op_errno, dict_t *xdata)  { -        return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno, -				      NULL, NULL, NULL, xdata); +    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, NULL, +                                 NULL, NULL, xdata);  } -  int -afr_setxattr_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_setxattr_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t      *local         = NULL; -        afr_private_t    *priv          = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        local = frame->local; -        priv = this->private; +    local = frame->local; +    priv = this->private; -	STACK_WIND_COOKIE (frame, afr_setxattr_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->setxattr, -			   &local->loc, local->cont.setxattr.dict, -			   local->cont.setxattr.flags, local->xdata_req); -        return 0; +    STACK_WIND_COOKIE(frame, afr_setxattr_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->setxattr, &local->loc, +                      local->cont.setxattr.dict, local->cont.setxattr.flags, +                      local->xdata_req); +    return 0;  }  int -afr_emptyb_set_pending_changelog_cbk (call_frame_t *frame, void *cookie, -                                  xlator_t *this, int op_ret, int op_errno, -                                  dict_t *xattr, dict_t *xdata) +afr_emptyb_set_pending_changelog_cbk(call_frame_t *frame, void *cookie, +                                     xlator_t *this, int op_ret, int op_errno, +                                     dict_t *xattr, dict_t *xdata)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; -        int i, ret = 0; -        char *op_type = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; +    int i, ret = 0; +    char *op_type = NULL; -        local = frame->local; -        priv = this->private; -        i = (long) cookie; +    local = frame->local; +    priv = this->private; +    i = (long)cookie; -        local->replies[i].valid = 1; -        local->replies[i].op_ret = op_ret; -        local->replies[i].op_errno = op_errno; +    local->replies[i].valid = 1; +    local->replies[i].op_ret = op_ret; +    local->replies[i].op_errno = op_errno; -        ret = dict_get_str (local->xdata_req, "replicate-brick-op", &op_type); -        if (ret) -                goto out; +    ret = dict_get_str(local->xdata_req, "replicate-brick-op", &op_type); +    if (ret) +        goto out; -        gf_msg (this->name, op_ret ? GF_LOG_ERROR : GF_LOG_INFO, -                op_ret ? op_errno : 0, -                afr_get_msg_id (op_type), -                "Set of pending xattr %s on" -                " %s.", op_ret ? "failed" : "succeeded", -                priv->children[i]->name); +    gf_msg(this->name, op_ret ? GF_LOG_ERROR : GF_LOG_INFO, +           op_ret ? op_errno : 0, afr_get_msg_id(op_type), +           "Set of pending xattr %s on" +           " %s.", +           op_ret ? "failed" : "succeeded", priv->children[i]->name);  out: -        syncbarrier_wake (&local->barrier); -        return 0; +    syncbarrier_wake(&local->barrier); +    return 0;  }  int -afr_emptyb_set_pending_changelog (call_frame_t *frame, xlator_t *this, -                                unsigned char *locked_nodes) +afr_emptyb_set_pending_changelog(call_frame_t *frame, xlator_t *this, +                                 unsigned char *locked_nodes)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; -        int ret = 0, i = 0; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; +    int ret = 0, i = 0; -        local = frame->local; -        priv = this->private; +    local = frame->local; +    priv = this->private; -        AFR_ONLIST (locked_nodes, frame, afr_emptyb_set_pending_changelog_cbk, -                    xattrop, &local->loc, GF_XATTROP_ADD_ARRAY, -                    local->xattr_req, NULL); +    AFR_ONLIST(locked_nodes, frame, afr_emptyb_set_pending_changelog_cbk, +               xattrop, &local->loc, GF_XATTROP_ADD_ARRAY, local->xattr_req, +               NULL); -        /* It is sufficient if xattrop was successful on one child */ -        for (i = 0; i < priv->child_count; i++) { -                if (!local->replies[i].valid) -                        continue; - -                if (local->replies[i].op_ret == 0) { -                        ret = 0; -                        goto out; -                } else { -                        ret = afr_higher_errno (ret, -                                                local->replies[i].op_errno); -                } +    /* It is sufficient if xattrop was successful on one child */ +    for (i = 0; i < priv->child_count; i++) { +        if (!local->replies[i].valid) +            continue; + +        if (local->replies[i].op_ret == 0) { +            ret = 0; +            goto out; +        } else { +            ret = afr_higher_errno(ret, local->replies[i].op_errno);          } +    }  out: -        return -ret; +    return -ret;  }  int -_afr_handle_empty_brick_type (xlator_t *this, call_frame_t *frame, -                            loc_t *loc, int empty_index, -                            afr_transaction_type type, -                            char *op_type) +_afr_handle_empty_brick_type(xlator_t *this, call_frame_t *frame, loc_t *loc, +                             int empty_index, afr_transaction_type type, +                             char *op_type)  { -        int              count            = 0; -        int              ret              = -ENOMEM; -        int              idx              = -1; -        int              d_idx            = -1; -        unsigned char   *locked_nodes     = NULL; -        afr_local_t     *local            = NULL; -        afr_private_t   *priv             = NULL; +    int count = 0; +    int ret = -ENOMEM; +    int idx = -1; +    int d_idx = -1; +    unsigned char *locked_nodes = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        priv = this->private; -        local = frame->local; +    priv = this->private; +    local = frame->local; -        locked_nodes = alloca0 (priv->child_count); +    locked_nodes = alloca0(priv->child_count); -        idx = afr_index_for_transaction_type (type); -        d_idx = afr_index_for_transaction_type (AFR_DATA_TRANSACTION); +    idx = afr_index_for_transaction_type(type); +    d_idx = afr_index_for_transaction_type(AFR_DATA_TRANSACTION); -        local->pending = afr_matrix_create (priv->child_count, -                                            AFR_NUM_CHANGE_LOGS); -        if (!local->pending) -                goto out; +    local->pending = afr_matrix_create(priv->child_count, AFR_NUM_CHANGE_LOGS); +    if (!local->pending) +        goto out; -        local->pending[empty_index][idx] = hton32 (1); +    local->pending[empty_index][idx] = hton32(1); -        if ((priv->esh_granular) && (type == AFR_ENTRY_TRANSACTION)) -                        local->pending[empty_index][d_idx] = hton32 (1); +    if ((priv->esh_granular) && (type == AFR_ENTRY_TRANSACTION)) +        local->pending[empty_index][d_idx] = hton32(1); -        local->xdata_req = dict_new (); -        if (!local->xdata_req) -                goto out; +    local->xdata_req = dict_new(); +    if (!local->xdata_req) +        goto out; -        ret = dict_set_str (local->xdata_req, "replicate-brick-op", op_type); -        if (ret) -                goto out; +    ret = dict_set_str(local->xdata_req, "replicate-brick-op", op_type); +    if (ret) +        goto out; -        local->xattr_req = dict_new (); -        if (!local->xattr_req) -                goto out; +    local->xattr_req = dict_new(); +    if (!local->xattr_req) +        goto out; -        ret = afr_set_pending_dict (priv, local->xattr_req, local->pending); -        if (ret < 0) -                goto out; +    ret = afr_set_pending_dict(priv, local->xattr_req, local->pending); +    if (ret < 0) +        goto out; -        if (AFR_ENTRY_TRANSACTION == type) { -                count = afr_selfheal_entrylk (frame, this, loc->inode, -                                              this->name, NULL, locked_nodes); -        } else { -                count = afr_selfheal_inodelk (frame, this, loc->inode, -                                              this->name, LLONG_MAX - 1, 0, -                                              locked_nodes); -        } +    if (AFR_ENTRY_TRANSACTION == type) { +        count = afr_selfheal_entrylk(frame, this, loc->inode, this->name, NULL, +                                     locked_nodes); +    } else { +        count = afr_selfheal_inodelk(frame, this, loc->inode, this->name, +                                     LLONG_MAX - 1, 0, locked_nodes); +    } -        if (!count) { -                gf_msg (this->name, GF_LOG_ERROR, EAGAIN, -                        AFR_MSG_REPLACE_BRICK_STATUS, "Couldn't acquire lock on" -                        " any child."); -                ret = -EAGAIN; -                goto unlock; -        } +    if (!count) { +        gf_msg(this->name, GF_LOG_ERROR, EAGAIN, AFR_MSG_REPLACE_BRICK_STATUS, +               "Couldn't acquire lock on" +               " any child."); +        ret = -EAGAIN; +        goto unlock; +    } -        ret = afr_emptyb_set_pending_changelog (frame, this, locked_nodes); -        if (ret) -                goto unlock; -        ret = 0; +    ret = afr_emptyb_set_pending_changelog(frame, this, locked_nodes); +    if (ret) +        goto unlock; +    ret = 0;  unlock: -        if (AFR_ENTRY_TRANSACTION == type) { -                afr_selfheal_unentrylk (frame, this, loc->inode, this->name, -                                        NULL, locked_nodes, NULL); -        } else { -                afr_selfheal_uninodelk (frame, this, loc->inode, this->name, -                                        LLONG_MAX - 1, 0, locked_nodes); -        } +    if (AFR_ENTRY_TRANSACTION == type) { +        afr_selfheal_unentrylk(frame, this, loc->inode, this->name, NULL, +                               locked_nodes, NULL); +    } else { +        afr_selfheal_uninodelk(frame, this, loc->inode, this->name, +                               LLONG_MAX - 1, 0, locked_nodes); +    }  out: -        return ret; +    return ret;  }  void -afr_brick_args_cleanup (void *opaque) +afr_brick_args_cleanup(void *opaque)  { -        afr_empty_brick_args_t *data = NULL; +    afr_empty_brick_args_t *data = NULL; -        data = opaque; -        loc_wipe (&data->loc); -        GF_FREE (data); +    data = opaque; +    loc_wipe(&data->loc); +    GF_FREE(data);  }  int -_afr_handle_empty_brick_cbk (int ret, call_frame_t *frame, void *opaque) +_afr_handle_empty_brick_cbk(int ret, call_frame_t *frame, void *opaque)  { -        afr_brick_args_cleanup (opaque); -        return 0; +    afr_brick_args_cleanup(opaque); +    return 0;  }  int -_afr_handle_empty_brick (void *opaque) +_afr_handle_empty_brick(void *opaque)  { +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; +    int empty_index = -1; +    int ret = -1; +    int op_errno = ENOMEM; +    call_frame_t *frame = NULL; +    xlator_t *this = NULL; +    char *op_type = NULL; +    afr_empty_brick_args_t *data = NULL; -        afr_local_t     *local          = NULL; -        afr_private_t   *priv           = NULL; -        int              empty_index       = -1; -        int              ret            = -1; -        int              op_errno       = ENOMEM; -        call_frame_t    *frame          = NULL; -        xlator_t        *this           = NULL; -        char            *op_type        = NULL; -        afr_empty_brick_args_t *data  = NULL; +    data = opaque; +    frame = data->frame; +    empty_index = data->empty_index; +    op_type = data->op_type; +    this = frame->this; +    priv = this->private; -        data = opaque; -        frame = data->frame; -        empty_index = data->empty_index; -        op_type = data->op_type; -        this = frame->this; -        priv = this->private; +    local = AFR_FRAME_INIT(frame, op_errno); +    if (!local) +        goto out; -        local = AFR_FRAME_INIT (frame, op_errno); -        if (!local) -                goto out; +    loc_copy(&local->loc, &data->loc); -        loc_copy (&local->loc, &data->loc); +    gf_msg(this->name, GF_LOG_INFO, 0, 0, "New brick is : %s", +           priv->children[empty_index]->name); -        gf_msg (this->name, GF_LOG_INFO, 0, 0, "New brick is : %s", -                priv->children[empty_index]->name); +    ret = _afr_handle_empty_brick_type(this, frame, &local->loc, empty_index, +                                       AFR_METADATA_TRANSACTION, op_type); +    if (ret) { +        op_errno = -ret; +        ret = -1; +        goto out; +    } -        ret = _afr_handle_empty_brick_type (this, frame, &local->loc, empty_index, -                                          AFR_METADATA_TRANSACTION, op_type); -        if (ret) { -                op_errno = -ret; -                ret = -1; -                goto out; -        } - -        dict_unref (local->xdata_req); -        dict_unref (local->xattr_req); -        afr_matrix_cleanup (local->pending, priv->child_count); -        local->pending = NULL; -        local->xattr_req = NULL; -        local->xdata_req = NULL; +    dict_unref(local->xdata_req); +    dict_unref(local->xattr_req); +    afr_matrix_cleanup(local->pending, priv->child_count); +    local->pending = NULL; +    local->xattr_req = NULL; +    local->xdata_req = NULL; -        ret = _afr_handle_empty_brick_type (this, frame, &local->loc, empty_index, -                                          AFR_ENTRY_TRANSACTION, op_type); -        if (ret) { -                op_errno = -ret; -                ret = -1; -                goto out; -        } -        ret = 0; +    ret = _afr_handle_empty_brick_type(this, frame, &local->loc, empty_index, +                                       AFR_ENTRY_TRANSACTION, op_type); +    if (ret) { +        op_errno = -ret; +        ret = -1; +        goto out; +    } +    ret = 0;  out: -        AFR_STACK_UNWIND (setxattr, frame, ret, op_errno, NULL); -        return 0; +    AFR_STACK_UNWIND(setxattr, frame, ret, op_errno, NULL); +    return 0; +} + +int +afr_split_brain_resolve_do(call_frame_t *frame, xlator_t *this, loc_t *loc, +                           char *data) +{ +    afr_local_t *local = NULL; +    int ret = -1; +    int op_errno = EINVAL; + +    local = frame->local; +    local->xdata_req = dict_new(); + +    if (!local->xdata_req) { +        op_errno = ENOMEM; +        goto out; +    } + +    ret = dict_set_int32(local->xdata_req, "heal-op", +                         GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK); +    if (ret) { +        op_errno = -ret; +        ret = -1; +        goto out; +    } +    ret = dict_set_str(local->xdata_req, "child-name", data); +    if (ret) { +        op_errno = -ret; +        ret = -1; +        goto out; +    } +    /* set spb choice to -1 whether heal succeeds or not: +     * If heal succeeds : spb-choice should be set to -1 as +     *                    it is no longer valid; file is not +     *                    in split-brain anymore. +     * If heal doesn't succeed: +     *                    spb-choice should be set to -1 +     *                    otherwise reads will be served +     *                    from spb-choice which is misleading. +     */ +    ret = afr_inode_split_brain_choice_set(loc->inode, this, -1); +    if (ret) +        gf_msg(this->name, GF_LOG_WARNING, 0, AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR, +               "Failed to set" +               "split-brain choice to -1"); +    afr_heal_splitbrain_file(frame, this, loc); +    ret = 0; +out: +    if (ret < 0) +        AFR_STACK_UNWIND(setxattr, frame, -1, op_errno, NULL); +    return 0;  } -  int -afr_split_brain_resolve_do (call_frame_t *frame, xlator_t *this, loc_t *loc, -                            char *data) +afr_get_split_brain_child_index(xlator_t *this, void *value, size_t len)  { -        afr_local_t    *local             = NULL; -        int     ret                       = -1; -        int     op_errno                  = EINVAL; +    int spb_child_index = -1; +    char *spb_child_str = NULL; -        local = frame->local; -        local->xdata_req = dict_new (); +    spb_child_str = alloca0(len + 1); +    memcpy(spb_child_str, value, len); -        if (!local->xdata_req) { -                op_errno = ENOMEM; -                goto out; -        } +    if (!strcmp(spb_child_str, "none")) +        return -2; -        ret = dict_set_int32 (local->xdata_req, "heal-op", -                              GF_SHD_OP_SBRAIN_HEAL_FROM_BRICK); -        if (ret) { -                op_errno = -ret; -                ret = -1; -                goto out; -        } -        ret = dict_set_str (local->xdata_req, "child-name", data); -        if (ret) { -                op_errno = -ret; -                ret = -1; -                goto out; -        } -        /* set spb choice to -1 whether heal succeeds or not: -         * If heal succeeds : spb-choice should be set to -1 as -         *                    it is no longer valid; file is not -         *                    in split-brain anymore. -         * If heal doesn't succeed: -         *                    spb-choice should be set to -1 -         *                    otherwise reads will be served -         *                    from spb-choice which is misleading. -         */ -        ret = afr_inode_split_brain_choice_set (loc->inode, this, -1); -        if (ret) -                gf_msg (this->name, GF_LOG_WARNING, 0, -                        AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR, "Failed to set" -                        "split-brain choice to -1"); -        afr_heal_splitbrain_file (frame, this, loc); -        ret = 0; -out: -        if (ret < 0) -                AFR_STACK_UNWIND (setxattr, frame, -1, op_errno, NULL); -        return 0; +    spb_child_index = afr_get_child_index_from_name(this, spb_child_str); +    if (spb_child_index < 0) { +        gf_msg(this->name, GF_LOG_ERROR, 0, AFR_MSG_INVALID_SUBVOL, +               "Invalid subvol: %s", spb_child_str); +    } +    return spb_child_index;  }  int -afr_get_split_brain_child_index (xlator_t *this, void *value, size_t len) +afr_can_set_split_brain_choice(void *opaque)  { -        int             spb_child_index   = -1; -        char           *spb_child_str     = NULL; +    afr_spbc_timeout_t *data = opaque; +    call_frame_t *frame = NULL; +    xlator_t *this = NULL; +    loc_t *loc = NULL; +    int ret = -1; -        spb_child_str =  alloca0 (len + 1); -        memcpy (spb_child_str, value, len); +    frame = data->frame; +    loc = data->loc; +    this = frame->this; -        if (!strcmp (spb_child_str, "none")) -                return -2; +    ret = afr_is_split_brain(frame, this, loc->inode, loc->gfid, &data->d_spb, +                             &data->m_spb); -        spb_child_index = afr_get_child_index_from_name (this, -                                                         spb_child_str); -        if (spb_child_index < 0) { -                gf_msg (this->name, GF_LOG_ERROR, 0, -                        AFR_MSG_INVALID_SUBVOL, "Invalid subvol: %s", -                        spb_child_str); -        } -        return spb_child_index; +    if (ret) +        gf_msg(this->name, GF_LOG_ERROR, 0, AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR, +               "Failed to determine if %s" +               " is in split-brain. " +               "Aborting split-brain-choice set.", +               uuid_utoa(loc->gfid)); +    return ret;  }  int -afr_can_set_split_brain_choice (void *opaque) +afr_handle_split_brain_commands(xlator_t *this, call_frame_t *frame, loc_t *loc, +                                dict_t *dict)  { -        afr_spbc_timeout_t        *data         = opaque; -        call_frame_t              *frame        = NULL; -        xlator_t                  *this         = NULL; -        loc_t                     *loc          = NULL; -        int                        ret          = -1; +    void *value = NULL; +    afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_spbc_timeout_t *data = NULL; +    int len = 0; +    int spb_child_index = -1; +    int ret = -1; +    int op_errno = EINVAL; -        frame = data->frame; -        loc = data->loc; -        this = frame->this; +    priv = this->private; -        ret = afr_is_split_brain (frame, this, loc->inode, loc->gfid, -                                  &data->d_spb, &data->m_spb); +    local = AFR_FRAME_INIT(frame, op_errno); +    if (!local) { +        ret = 1; +        goto out; +    } -        if (ret) -                gf_msg (this->name, GF_LOG_ERROR, 0, -                        AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR, -                        "Failed to determine if %s" -                        " is in split-brain. " -                        "Aborting split-brain-choice set.", -                        uuid_utoa (loc->gfid)); -        return ret; -} +    local->op = GF_FOP_SETXATTR; -int -afr_handle_split_brain_commands (xlator_t *this, call_frame_t *frame, -                                loc_t *loc, dict_t *dict) -{ -        void           *value             = NULL; -        afr_private_t  *priv              = NULL; -        afr_local_t    *local             = NULL; -        afr_spbc_timeout_t *data          = NULL; -        int             len               = 0; -        int             spb_child_index   = -1; -        int             ret               = -1; -        int             op_errno          = EINVAL; - -        priv = this->private; - -        local = AFR_FRAME_INIT (frame, op_errno); -        if (!local) { +    ret = dict_get_ptr_and_len(dict, GF_AFR_SBRAIN_CHOICE, &value, &len); +    if (value) { +        spb_child_index = afr_get_split_brain_child_index(this, value, len); +        if (spb_child_index < 0) { +            /* Case where value was "none" */ +            if (spb_child_index == -2) +                spb_child_index = -1; +            else {                  ret = 1; +                op_errno = EINVAL;                  goto out; +            }          } -        local->op = GF_FOP_SETXATTR; - -        ret =  dict_get_ptr_and_len (dict, GF_AFR_SBRAIN_CHOICE, &value, -                                     &len); -        if (value) { -                spb_child_index = afr_get_split_brain_child_index (this, value, -                                                                   len); -                if (spb_child_index < 0) { -                        /* Case where value was "none" */ -                        if (spb_child_index == -2) -                                spb_child_index = -1; -                        else { -                                ret = 1; -                                op_errno = EINVAL; -                                goto out; -                        } -                } - -                data = GF_CALLOC (1, sizeof (*data), gf_afr_mt_spbc_timeout_t); -                if (!data) { -                        ret = 1; -                        goto out; -                } -                data->spb_child_index = spb_child_index; -                data->frame = frame; -                loc_copy (&local->loc, loc); -                data->loc = &local->loc; -                ret = synctask_new (this->ctx->env, -                                    afr_can_set_split_brain_choice, -                                    afr_set_split_brain_choice, NULL, data); -                if (ret) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, -                                AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR, -                                "Failed to create" -                                " synctask. Aborting split-brain choice set" -                                " for %s", loc->name); -                        ret = 1; -                        op_errno = ENOMEM; -                        goto out; -                } -                ret = 0; -                goto out; +        data = GF_CALLOC(1, sizeof(*data), gf_afr_mt_spbc_timeout_t); +        if (!data) { +            ret = 1; +            goto out;          } +        data->spb_child_index = spb_child_index; +        data->frame = frame; +        loc_copy(&local->loc, loc); +        data->loc = &local->loc; +        ret = synctask_new(this->ctx->env, afr_can_set_split_brain_choice, +                           afr_set_split_brain_choice, NULL, data); +        if (ret) { +            gf_msg(this->name, GF_LOG_ERROR, 0, +                   AFR_MSG_SPLIT_BRAIN_CHOICE_ERROR, +                   "Failed to create" +                   " synctask. Aborting split-brain choice set" +                   " for %s", +                   loc->name); +            ret = 1; +            op_errno = ENOMEM; +            goto out; +        } +        ret = 0; +        goto out; +    } -        ret = dict_get_ptr_and_len (dict, GF_AFR_SBRAIN_RESOLVE, &value, &len); -        if (value) { -                spb_child_index = afr_get_split_brain_child_index (this, value, -                                                                   len); -                if (spb_child_index < 0) { -                        ret = 1; -                        goto out; -                } - -                afr_split_brain_resolve_do (frame, this, loc, -                                            priv->children[spb_child_index]->name); -                ret = 0; +    ret = dict_get_ptr_and_len(dict, GF_AFR_SBRAIN_RESOLVE, &value, &len); +    if (value) { +        spb_child_index = afr_get_split_brain_child_index(this, value, len); +        if (spb_child_index < 0) { +            ret = 1; +            goto out;          } + +        afr_split_brain_resolve_do(frame, this, loc, +                                   priv->children[spb_child_index]->name); +        ret = 0; +    }  out: -        /* key was correct but value was invalid when ret == 1 */ -        if (ret == 1) { -                AFR_STACK_UNWIND (setxattr, frame, -1, op_errno, NULL); -                if (data) -                        GF_FREE (data); -                ret = 0; -        } -        return ret; +    /* key was correct but value was invalid when ret == 1 */ +    if (ret == 1) { +        AFR_STACK_UNWIND(setxattr, frame, -1, op_errno, NULL); +        if (data) +            GF_FREE(data); +        ret = 0; +    } +    return ret;  }  int -afr_handle_spb_choice_timeout (xlator_t *this, call_frame_t *frame, -                               dict_t *dict) +afr_handle_spb_choice_timeout(xlator_t *this, call_frame_t *frame, dict_t *dict)  { -        int             ret               = -1; -        int             op_errno          = 0; -        uint64_t        timeout           = 0; -        afr_private_t  *priv              = NULL; +    int ret = -1; +    int op_errno = 0; +    uint64_t timeout = 0; +    afr_private_t *priv = NULL; -        priv = this->private; +    priv = this->private; -        ret = dict_get_uint64 (dict, GF_AFR_SPB_CHOICE_TIMEOUT, &timeout); -        if (!ret) { -                priv->spb_choice_timeout = timeout * 60; -                AFR_STACK_UNWIND (setxattr, frame, ret, op_errno, NULL); -        } +    ret = dict_get_uint64(dict, GF_AFR_SPB_CHOICE_TIMEOUT, &timeout); +    if (!ret) { +        priv->spb_choice_timeout = timeout * 60; +        AFR_STACK_UNWIND(setxattr, frame, ret, op_errno, NULL); +    } -        return ret; +    return ret;  }  int -afr_handle_empty_brick (xlator_t *this, call_frame_t *frame, loc_t *loc, -                        dict_t *dict) +afr_handle_empty_brick(xlator_t *this, call_frame_t *frame, loc_t *loc, +                       dict_t *dict)  { -        int             ret               = -1; -        int             ab_ret            = -1; -        int             empty_index        = -1; -        int             op_errno          = EPERM; -        char           *empty_brick         = NULL; -        char           *op_type           = NULL; -        afr_empty_brick_args_t *data        = NULL; +    int ret = -1; +    int ab_ret = -1; +    int empty_index = -1; +    int op_errno = EPERM; +    char *empty_brick = NULL; +    char *op_type = NULL; +    afr_empty_brick_args_t *data = NULL; -        ret =  dict_get_str (dict, GF_AFR_REPLACE_BRICK, &empty_brick); -        if (!ret) -                op_type = GF_AFR_REPLACE_BRICK; +    ret = dict_get_str(dict, GF_AFR_REPLACE_BRICK, &empty_brick); +    if (!ret) +        op_type = GF_AFR_REPLACE_BRICK; -        ab_ret = dict_get_str (dict, GF_AFR_ADD_BRICK, &empty_brick); -        if (!ab_ret) -                op_type = GF_AFR_ADD_BRICK; +    ab_ret = dict_get_str(dict, GF_AFR_ADD_BRICK, &empty_brick); +    if (!ab_ret) +        op_type = GF_AFR_ADD_BRICK; -        if (ret && ab_ret) -                goto out; +    if (ret && ab_ret) +        goto out; -        if (frame->root->pid != GF_CLIENT_PID_SELF_HEALD) { -                gf_msg (this->name, GF_LOG_ERROR, EPERM, -                        afr_get_msg_id (op_type), -                        "'%s' is an internal extended attribute.", -                        op_type); -                ret = 1; -                goto out; +    if (frame->root->pid != GF_CLIENT_PID_SELF_HEALD) { +        gf_msg(this->name, GF_LOG_ERROR, EPERM, afr_get_msg_id(op_type), +               "'%s' is an internal extended attribute.", op_type); +        ret = 1; +        goto out; +    } +    empty_index = afr_get_child_index_from_name(this, empty_brick); + +    if (empty_index < 0) { +        /* Didn't belong to this replica pair +         * Just do a no-op +         */ +        AFR_STACK_UNWIND(setxattr, frame, 0, 0, NULL); +        return 0; +    } else { +        data = GF_CALLOC(1, sizeof(*data), gf_afr_mt_empty_brick_t); +        if (!data) { +            ret = 1; +            op_errno = ENOMEM; +            goto out;          } -        empty_index = afr_get_child_index_from_name (this, empty_brick); - -        if (empty_index < 0) { -                 /* Didn't belong to this replica pair -                  * Just do a no-op -                  */ -                AFR_STACK_UNWIND (setxattr, frame, 0, 0, NULL); -                return 0; -        } else { -                data = GF_CALLOC (1, sizeof (*data), -                                  gf_afr_mt_empty_brick_t); -                if (!data) { -                        ret = 1; -                        op_errno = ENOMEM; -                        goto out; -                } -                data->frame = frame; -                loc_copy (&data->loc, loc); -                data->empty_index = empty_index; -                data->op_type = op_type; -                ret = synctask_new (this->ctx->env, -                                    _afr_handle_empty_brick, -                                    _afr_handle_empty_brick_cbk, -                                    NULL, data); -                if (ret) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, -                                afr_get_msg_id (op_type), -                                "Failed to create synctask."); -                        ret = 1; -                        op_errno = ENOMEM; -                        afr_brick_args_cleanup (data); -                        goto out; -                } +        data->frame = frame; +        loc_copy(&data->loc, loc); +        data->empty_index = empty_index; +        data->op_type = op_type; +        ret = synctask_new(this->ctx->env, _afr_handle_empty_brick, +                           _afr_handle_empty_brick_cbk, NULL, data); +        if (ret) { +            gf_msg(this->name, GF_LOG_ERROR, 0, afr_get_msg_id(op_type), +                   "Failed to create synctask."); +            ret = 1; +            op_errno = ENOMEM; +            afr_brick_args_cleanup(data); +            goto out;          } -        ret = 0; +    } +    ret = 0;  out: -        if (ret == 1) { -                AFR_STACK_UNWIND (setxattr, frame, -1, op_errno, NULL); -                ret = 0; -        } -        return ret; +    if (ret == 1) { +        AFR_STACK_UNWIND(setxattr, frame, -1, op_errno, NULL); +        ret = 0; +    } +    return ret;  }  static int -afr_handle_special_xattr (xlator_t *this, call_frame_t *frame, loc_t *loc, -                          dict_t *dict) +afr_handle_special_xattr(xlator_t *this, call_frame_t *frame, loc_t *loc, +                         dict_t *dict)  { -        int     ret     = -1; +    int ret = -1; -        ret = afr_handle_split_brain_commands (this, frame, loc, dict); -        if (ret == 0) -                goto out; +    ret = afr_handle_split_brain_commands(this, frame, loc, dict); +    if (ret == 0) +        goto out; -        ret = afr_handle_spb_choice_timeout (this, frame, dict); -        if (ret == 0) -                goto out; +    ret = afr_handle_spb_choice_timeout(this, frame, dict); +    if (ret == 0) +        goto out; -        /* Applicable for replace-brick and add-brick commands */ -        ret = afr_handle_empty_brick (this, frame, loc, dict); +    /* Applicable for replace-brick and add-brick commands */ +    ret = afr_handle_empty_brick(this, frame, loc, dict);  out: -        return ret; +    return ret;  }  int -afr_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict, -	      int32_t flags, dict_t *xdata) +afr_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict, +             int32_t flags, dict_t *xdata)  { -        afr_local_t    *local             = NULL; -        call_frame_t   *transaction_frame = NULL; -        int             ret               = -1; -        int             op_errno          = EINVAL; +    afr_local_t *local = NULL; +    call_frame_t *transaction_frame = NULL; +    int ret = -1; +    int op_errno = EINVAL; -        GF_IF_INTERNAL_XATTR_GOTO ("trusted.afr.*", dict, -                                   op_errno, out); +    GF_IF_INTERNAL_XATTR_GOTO("trusted.afr.*", dict, op_errno, out); -        GF_IF_INTERNAL_XATTR_GOTO ("trusted.glusterfs.afr.*", dict, -                                   op_errno, out); +    GF_IF_INTERNAL_XATTR_GOTO("trusted.glusterfs.afr.*", dict, op_errno, out); -        ret = afr_handle_special_xattr (this, frame, loc, dict); -        if (ret == 0) -                return 0; +    ret = afr_handle_special_xattr(this, frame, loc, dict); +    if (ret == 0) +        return 0; -        transaction_frame = copy_frame (frame); -        if (!transaction_frame) -                goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -	local = AFR_FRAME_INIT (transaction_frame, op_errno); -	if (!local) -                goto out; +    local = AFR_FRAME_INIT(transaction_frame, op_errno); +    if (!local) +        goto out; -        local->cont.setxattr.dict  = dict_ref (dict); -        local->cont.setxattr.flags = flags; -	if (xdata) -		local->xdata_req = dict_copy_with_ref (xdata, NULL); -	else -		local->xdata_req = dict_new (); +    local->cont.setxattr.dict = dict_ref(dict); +    local->cont.setxattr.flags = flags; +    if (xdata) +        local->xdata_req = dict_copy_with_ref(xdata, NULL); +    else +        local->xdata_req = dict_new(); -	if (!local->xdata_req) -		goto out; +    if (!local->xdata_req) +        goto out; -        local->transaction.wind   = afr_setxattr_wind; -        local->transaction.unwind = afr_setxattr_unwind; +    local->transaction.wind = afr_setxattr_wind; +    local->transaction.unwind = afr_setxattr_unwind; -        loc_copy (&local->loc, loc); -        ret = afr_set_inode_local (this, local, loc->inode); -        if (ret) -                goto out; +    loc_copy(&local->loc, loc); +    ret = afr_set_inode_local(this, local, loc->inode); +    if (ret) +        goto out; -        local->transaction.main_frame = frame; -        local->transaction.start   = LLONG_MAX - 1; -        local->transaction.len     = 0; +    local->transaction.main_frame = frame; +    local->transaction.start = LLONG_MAX - 1; +    local->transaction.len = 0; -	local->op = GF_FOP_SETXATTR; +    local->op = GF_FOP_SETXATTR; -        ret = afr_transaction (transaction_frame, this, AFR_METADATA_TRANSACTION); -        if (ret < 0) { -		op_errno = -ret; -		goto out; -        } +    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } -	return 0; +    return 0;  out: -	if (transaction_frame) -		AFR_STACK_DESTROY (transaction_frame); +    if (transaction_frame) +        AFR_STACK_DESTROY(transaction_frame); -	AFR_STACK_UNWIND (setxattr, frame, -1, op_errno, NULL); +    AFR_STACK_UNWIND(setxattr, frame, -1, op_errno, NULL); -        return 0; +    return 0;  }  /* {{{ fsetxattr */ -  int -afr_fsetxattr_unwind (call_frame_t *frame, xlator_t *this) +afr_fsetxattr_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t    *local         = NULL; -        call_frame_t   *main_frame    = NULL; +    afr_local_t *local = NULL; +    call_frame_t *main_frame = NULL; -        local = frame->local; +    local = frame->local; -	main_frame = afr_transaction_detach_fop_frame (frame); -        if (!main_frame) -		return 0; - -	AFR_STACK_UNWIND (fsetxattr, main_frame, local->op_ret, local->op_errno, -			  local->xdata_rsp); +    main_frame = afr_transaction_detach_fop_frame(frame); +    if (!main_frame)          return 0; -} +    AFR_STACK_UNWIND(fsetxattr, main_frame, local->op_ret, local->op_errno, +                     local->xdata_rsp); +    return 0; +}  int -afr_fsetxattr_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                        int32_t op_ret, int32_t op_errno, dict_t *xdata) +afr_fsetxattr_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                       int32_t op_ret, int32_t op_errno, dict_t *xdata)  { -        return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno, -				      NULL, NULL, NULL, xdata); +    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, NULL, +                                 NULL, NULL, xdata);  } -  int -afr_fsetxattr_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_fsetxattr_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t        *local       = NULL; -        afr_private_t      *priv        = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        local = frame->local; -        priv = this->private; +    local = frame->local; +    priv = this->private; -	STACK_WIND_COOKIE (frame, afr_fsetxattr_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->fsetxattr, -			   local->fd, local->cont.fsetxattr.dict, -			   local->cont.fsetxattr.flags, local->xdata_req); -        return 0; +    STACK_WIND_COOKIE(frame, afr_fsetxattr_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->fsetxattr, local->fd, +                      local->cont.fsetxattr.dict, local->cont.fsetxattr.flags, +                      local->xdata_req); +    return 0;  } -  int -afr_fsetxattr (call_frame_t *frame, xlator_t *this, -               fd_t *fd, dict_t *dict, int32_t flags, dict_t *xdata) +afr_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict, +              int32_t flags, dict_t *xdata)  { -        afr_local_t      *local             = NULL; -        call_frame_t     *transaction_frame = NULL; -        int               ret               = -1; -        int               op_errno          = ENOMEM; +    afr_local_t *local = NULL; +    call_frame_t *transaction_frame = NULL; +    int ret = -1; +    int op_errno = ENOMEM; -        GF_IF_INTERNAL_XATTR_GOTO ("trusted.afr.*", dict, -                                   op_errno, out); +    GF_IF_INTERNAL_XATTR_GOTO("trusted.afr.*", dict, op_errno, out); -        GF_IF_INTERNAL_XATTR_GOTO ("trusted.glusterfs.afr.*", dict, -                                   op_errno, out); +    GF_IF_INTERNAL_XATTR_GOTO("trusted.glusterfs.afr.*", dict, op_errno, out); -        transaction_frame = copy_frame (frame); -        if (!transaction_frame) -                goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -	local = AFR_FRAME_INIT (transaction_frame, op_errno); -	if (!local) -		goto out; +    local = AFR_FRAME_INIT(transaction_frame, op_errno); +    if (!local) +        goto out; -        local->cont.fsetxattr.dict  = dict_ref (dict); -        local->cont.fsetxattr.flags = flags; +    local->cont.fsetxattr.dict = dict_ref(dict); +    local->cont.fsetxattr.flags = flags; -	if (xdata) -		local->xdata_req = dict_copy_with_ref (xdata, NULL); -	else -		local->xdata_req = dict_new (); +    if (xdata) +        local->xdata_req = dict_copy_with_ref(xdata, NULL); +    else +        local->xdata_req = dict_new(); -	if (!local->xdata_req) -		goto out; +    if (!local->xdata_req) +        goto out; -        local->transaction.wind   = afr_fsetxattr_wind; -        local->transaction.unwind = afr_fsetxattr_unwind; +    local->transaction.wind = afr_fsetxattr_wind; +    local->transaction.unwind = afr_fsetxattr_unwind; -        local->fd                 = fd_ref (fd); -        ret = afr_set_inode_local (this, local, fd->inode); -        if (ret) -                goto out; +    local->fd = fd_ref(fd); +    ret = afr_set_inode_local(this, local, fd->inode); +    if (ret) +        goto out; -	local->op = GF_FOP_FSETXATTR; +    local->op = GF_FOP_FSETXATTR; -        local->transaction.main_frame = frame; -        local->transaction.start  = LLONG_MAX - 1; -        local->transaction.len    = 0; +    local->transaction.main_frame = frame; +    local->transaction.start = LLONG_MAX - 1; +    local->transaction.len = 0; -        ret = afr_transaction (transaction_frame, this, AFR_METADATA_TRANSACTION); -        if (ret < 0) { -		op_errno = -ret; -		goto out; -        } +    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } -	return 0; +    return 0;  out: -	if (transaction_frame) -		AFR_STACK_DESTROY (transaction_frame); +    if (transaction_frame) +        AFR_STACK_DESTROY(transaction_frame); -	AFR_STACK_UNWIND (fsetxattr, frame, -1, op_errno, NULL); -        return 0; +    AFR_STACK_UNWIND(fsetxattr, frame, -1, op_errno, NULL); +    return 0;  }  /* }}} */ -  /* {{{ removexattr */ -  int -afr_removexattr_unwind (call_frame_t *frame, xlator_t *this) +afr_removexattr_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t *   local = NULL; -        call_frame_t   *main_frame = NULL; - -        local = frame->local; +    afr_local_t *local = NULL; +    call_frame_t *main_frame = NULL; -	main_frame = afr_transaction_detach_fop_frame (frame); -	if (!main_frame) -		return 0; +    local = frame->local; -	AFR_STACK_UNWIND (removexattr, main_frame, local->op_ret, local->op_errno, -			  local->xdata_rsp); +    main_frame = afr_transaction_detach_fop_frame(frame); +    if (!main_frame)          return 0; -} +    AFR_STACK_UNWIND(removexattr, main_frame, local->op_ret, local->op_errno, +                     local->xdata_rsp); +    return 0; +}  int -afr_removexattr_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                          int32_t op_ret, int32_t op_errno, dict_t *xdata) +afr_removexattr_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                         int32_t op_ret, int32_t op_errno, dict_t *xdata)  { -        return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno, -				      NULL, NULL, NULL, xdata); +    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, NULL, +                                 NULL, NULL, xdata);  } -  int -afr_removexattr_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_removexattr_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -	local = frame->local; -	priv = this->private; +    local = frame->local; +    priv = this->private; -	STACK_WIND_COOKIE (frame, afr_removexattr_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->removexattr, -			   &local->loc, local->cont.removexattr.name, -			   local->xdata_req); -        return 0; +    STACK_WIND_COOKIE(frame, afr_removexattr_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->removexattr, &local->loc, +                      local->cont.removexattr.name, local->xdata_req); +    return 0;  } -  int -afr_removexattr (call_frame_t *frame, xlator_t *this, -                 loc_t *loc, const char *name, dict_t *xdata) +afr_removexattr(call_frame_t *frame, xlator_t *this, loc_t *loc, +                const char *name, dict_t *xdata)  { -        afr_local_t     *local             = NULL; -        call_frame_t    *transaction_frame = NULL; -        int              ret               = -1; -        int              op_errno          = ENOMEM; +    afr_local_t *local = NULL; +    call_frame_t *transaction_frame = NULL; +    int ret = -1; +    int op_errno = ENOMEM; -        GF_IF_NATIVE_XATTR_GOTO ("trusted.afr.*", -                                 name, op_errno, out); +    GF_IF_NATIVE_XATTR_GOTO("trusted.afr.*", name, op_errno, out); -        GF_IF_NATIVE_XATTR_GOTO ("trusted.glusterfs.afr.*", -                                 name, op_errno, out); +    GF_IF_NATIVE_XATTR_GOTO("trusted.glusterfs.afr.*", name, op_errno, out); -        transaction_frame = copy_frame (frame); -        if (!transaction_frame) -                goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -	local = AFR_FRAME_INIT (transaction_frame, op_errno); -	if (!local) -		goto out; +    local = AFR_FRAME_INIT(transaction_frame, op_errno); +    if (!local) +        goto out; -        local->cont.removexattr.name = gf_strdup (name); +    local->cont.removexattr.name = gf_strdup(name); -	if (xdata) -		local->xdata_req = dict_copy_with_ref (xdata, NULL); -	else -		local->xdata_req = dict_new (); +    if (xdata) +        local->xdata_req = dict_copy_with_ref(xdata, NULL); +    else +        local->xdata_req = dict_new(); -	if (!local->xdata_req) -		goto out; +    if (!local->xdata_req) +        goto out; -        local->transaction.wind   = afr_removexattr_wind; -        local->transaction.unwind = afr_removexattr_unwind; +    local->transaction.wind = afr_removexattr_wind; +    local->transaction.unwind = afr_removexattr_unwind; -        loc_copy (&local->loc, loc); -        ret = afr_set_inode_local (this, local, loc->inode); -        if (ret) -                goto out; +    loc_copy(&local->loc, loc); +    ret = afr_set_inode_local(this, local, loc->inode); +    if (ret) +        goto out; -	local->op = GF_FOP_REMOVEXATTR; +    local->op = GF_FOP_REMOVEXATTR; -        local->transaction.main_frame = frame; -        local->transaction.start   = LLONG_MAX - 1; -        local->transaction.len     = 0; +    local->transaction.main_frame = frame; +    local->transaction.start = LLONG_MAX - 1; +    local->transaction.len = 0; -        ret = afr_transaction (transaction_frame, this, AFR_METADATA_TRANSACTION); -        if (ret < 0) { -		op_errno = -ret; -		goto out; -        } +    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } -	return 0; +    return 0;  out: -	if (transaction_frame) -		AFR_STACK_DESTROY (transaction_frame); +    if (transaction_frame) +        AFR_STACK_DESTROY(transaction_frame); -	AFR_STACK_UNWIND (removexattr, frame, -1, op_errno, NULL); -        return 0; +    AFR_STACK_UNWIND(removexattr, frame, -1, op_errno, NULL); +    return 0;  }  /* ffremovexattr */  int -afr_fremovexattr_unwind (call_frame_t *frame, xlator_t *this) +afr_fremovexattr_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t *   local = NULL; -        call_frame_t   *main_frame = NULL; - -        local = frame->local; +    afr_local_t *local = NULL; +    call_frame_t *main_frame = NULL; -	main_frame = afr_transaction_detach_fop_frame (frame); -        if (!main_frame) -		return 0; +    local = frame->local; -	AFR_STACK_UNWIND (fremovexattr, main_frame, local->op_ret, local->op_errno, -			  local->xdata_rsp); +    main_frame = afr_transaction_detach_fop_frame(frame); +    if (!main_frame)          return 0; -} +    AFR_STACK_UNWIND(fremovexattr, main_frame, local->op_ret, local->op_errno, +                     local->xdata_rsp); +    return 0; +}  int -afr_fremovexattr_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, +afr_fremovexattr_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,                            int32_t op_ret, int32_t op_errno, dict_t *xdata)  { -	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno, -				      NULL, NULL, NULL, xdata); +    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, NULL, +                                 NULL, NULL, xdata);  } -  int -afr_fremovexattr_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_fremovexattr_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        local = frame->local; -        priv = this->private; +    local = frame->local; +    priv = this->private; -	STACK_WIND_COOKIE (frame, afr_fremovexattr_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->fremovexattr, -			   local->fd, local->cont.removexattr.name, -			   local->xdata_req); -        return 0; +    STACK_WIND_COOKIE(frame, afr_fremovexattr_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->fremovexattr, local->fd, +                      local->cont.removexattr.name, local->xdata_req); +    return 0;  } -  int -afr_fremovexattr (call_frame_t *frame, xlator_t *this, fd_t *fd, -		  const char *name, dict_t *xdata) +afr_fremovexattr(call_frame_t *frame, xlator_t *this, fd_t *fd, +                 const char *name, dict_t *xdata)  { -        afr_local_t *local = NULL; -        call_frame_t *transaction_frame = NULL; -        int ret = -1; -        int op_errno = ENOMEM; +    afr_local_t *local = NULL; +    call_frame_t *transaction_frame = NULL; +    int ret = -1; +    int op_errno = ENOMEM; -        GF_IF_NATIVE_XATTR_GOTO ("trusted.afr.*", -                                 name, op_errno, out); +    GF_IF_NATIVE_XATTR_GOTO("trusted.afr.*", name, op_errno, out); -        GF_IF_NATIVE_XATTR_GOTO ("trusted.glusterfs.afr.*", -                                 name, op_errno, out); +    GF_IF_NATIVE_XATTR_GOTO("trusted.glusterfs.afr.*", name, op_errno, out); -        transaction_frame = copy_frame (frame); -        if (!transaction_frame) -                goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -	local = AFR_FRAME_INIT (transaction_frame, op_errno); -	if (!local) -                goto out; +    local = AFR_FRAME_INIT(transaction_frame, op_errno); +    if (!local) +        goto out; -        local->cont.removexattr.name = gf_strdup (name); -	if (xdata) -		local->xdata_req = dict_copy_with_ref (xdata, NULL); -	else -		local->xdata_req = dict_new (); +    local->cont.removexattr.name = gf_strdup(name); +    if (xdata) +        local->xdata_req = dict_copy_with_ref(xdata, NULL); +    else +        local->xdata_req = dict_new(); -	if (!local->xdata_req) -		goto out; +    if (!local->xdata_req) +        goto out; -        local->transaction.wind   = afr_fremovexattr_wind; -        local->transaction.unwind = afr_fremovexattr_unwind; +    local->transaction.wind = afr_fremovexattr_wind; +    local->transaction.unwind = afr_fremovexattr_unwind; -        local->fd = fd_ref (fd); -        ret = afr_set_inode_local (this, local, fd->inode); -        if (ret) -                goto out; +    local->fd = fd_ref(fd); +    ret = afr_set_inode_local(this, local, fd->inode); +    if (ret) +        goto out; -	local->op = GF_FOP_FREMOVEXATTR; +    local->op = GF_FOP_FREMOVEXATTR; -        local->transaction.main_frame = frame; -        local->transaction.start   = LLONG_MAX - 1; -        local->transaction.len     = 0; +    local->transaction.main_frame = frame; +    local->transaction.start = LLONG_MAX - 1; +    local->transaction.len = 0; -        ret = afr_transaction (transaction_frame, this, AFR_METADATA_TRANSACTION); -        if (ret < 0) { -		op_errno = -ret; -		goto out; -        } +    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } -	return 0; +    return 0;  out: -	if (transaction_frame) -		AFR_STACK_DESTROY (transaction_frame); +    if (transaction_frame) +        AFR_STACK_DESTROY(transaction_frame); -	AFR_STACK_UNWIND (fremovexattr, frame, -1, op_errno, NULL); +    AFR_STACK_UNWIND(fremovexattr, frame, -1, op_errno, NULL); -        return 0; +    return 0;  } -  int -afr_fallocate_unwind (call_frame_t *frame, xlator_t *this) +afr_fallocate_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t *   local = NULL; -        call_frame_t   *main_frame = NULL; - -        local = frame->local; +    afr_local_t *local = NULL; +    call_frame_t *main_frame = NULL; -	main_frame = afr_transaction_detach_fop_frame (frame); -	if (!main_frame) -		return 0; +    local = frame->local; -	AFR_STACK_UNWIND (fallocate, main_frame, local->op_ret, local->op_errno, -			  &local->cont.inode_wfop.prebuf, -			  &local->cont.inode_wfop.postbuf, local->xdata_rsp); +    main_frame = afr_transaction_detach_fop_frame(frame); +    if (!main_frame)          return 0; -} +    AFR_STACK_UNWIND(fallocate, main_frame, local->op_ret, local->op_errno, +                     &local->cont.inode_wfop.prebuf, +                     &local->cont.inode_wfop.postbuf, local->xdata_rsp); +    return 0; +}  int -afr_fallocate_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                        int32_t op_ret, int32_t op_errno, struct iatt *prebuf, -                        struct iatt *postbuf, dict_t *xdata) +afr_fallocate_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                       int32_t op_ret, int32_t op_errno, struct iatt *prebuf, +                       struct iatt *postbuf, dict_t *xdata)  { -        return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno, -				      prebuf, postbuf, NULL, xdata); +    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, prebuf, +                                 postbuf, NULL, xdata);  } -  int -afr_fallocate_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_fallocate_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        local = frame->local; -        priv = this->private; +    local = frame->local; +    priv = this->private; -	STACK_WIND_COOKIE (frame, afr_fallocate_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->fallocate, -			   local->fd, local->cont.fallocate.mode, -			   local->cont.fallocate.offset, -			   local->cont.fallocate.len, local->xdata_req); -        return 0; +    STACK_WIND_COOKIE(frame, afr_fallocate_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->fallocate, local->fd, +                      local->cont.fallocate.mode, local->cont.fallocate.offset, +                      local->cont.fallocate.len, local->xdata_req); +    return 0;  } -  int -afr_fallocate (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode, -               off_t offset, size_t len, dict_t *xdata) +afr_fallocate(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode, +              off_t offset, size_t len, dict_t *xdata)  { -        call_frame_t *transaction_frame = NULL; -        afr_local_t *local = NULL; -        int ret = -1; -        int op_errno = ENOMEM; +    call_frame_t *transaction_frame = NULL; +    afr_local_t *local = NULL; +    int ret = -1; +    int op_errno = ENOMEM; -        transaction_frame = copy_frame (frame); -        if (!transaction_frame) -                goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -	local = AFR_FRAME_INIT (transaction_frame, op_errno); -	if (!local) -		goto out; +    local = AFR_FRAME_INIT(transaction_frame, op_errno); +    if (!local) +        goto out; -        local->cont.fallocate.mode = mode; -        local->cont.fallocate.offset  = offset; -        local->cont.fallocate.len = len; +    local->cont.fallocate.mode = mode; +    local->cont.fallocate.offset = offset; +    local->cont.fallocate.len = len; -        local->fd = fd_ref (fd); -        ret = afr_set_inode_local (this, local, fd->inode); -        if (ret) -                goto out; +    local->fd = fd_ref(fd); +    ret = afr_set_inode_local(this, local, fd->inode); +    if (ret) +        goto out; -	if (xdata) -		local->xdata_req = dict_copy_with_ref (xdata, NULL); -	else -		local->xdata_req = dict_new (); +    if (xdata) +        local->xdata_req = dict_copy_with_ref(xdata, NULL); +    else +        local->xdata_req = dict_new(); -	if (!local->xdata_req) -		goto out; +    if (!local->xdata_req) +        goto out; -        local->op = GF_FOP_FALLOCATE; +    local->op = GF_FOP_FALLOCATE; -        local->transaction.wind   = afr_fallocate_wind; -        local->transaction.unwind = afr_fallocate_unwind; +    local->transaction.wind = afr_fallocate_wind; +    local->transaction.unwind = afr_fallocate_unwind; -        local->transaction.main_frame = frame; +    local->transaction.main_frame = frame; -        local->transaction.start   = local->cont.fallocate.offset; -        local->transaction.len     = 0; +    local->transaction.start = local->cont.fallocate.offset; +    local->transaction.len = 0; -        afr_fix_open (fd, this); +    afr_fix_open(fd, this); -        ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION); -        if (ret < 0) { -		op_errno = -ret; -		goto out; -        } +    ret = afr_transaction(transaction_frame, this, AFR_DATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } -	return 0; +    return 0;  out: -	if (transaction_frame) -		AFR_STACK_DESTROY (transaction_frame); +    if (transaction_frame) +        AFR_STACK_DESTROY(transaction_frame); -	AFR_STACK_UNWIND (fallocate, frame, -1, op_errno, NULL, NULL, NULL); -        return 0; +    AFR_STACK_UNWIND(fallocate, frame, -1, op_errno, NULL, NULL, NULL); +    return 0;  } -  /* }}} */  /* {{{ discard */  int -afr_discard_unwind (call_frame_t *frame, xlator_t *this) +afr_discard_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t *   local = NULL; -        call_frame_t   *main_frame = NULL; +    afr_local_t *local = NULL; +    call_frame_t *main_frame = NULL; -        local = frame->local; +    local = frame->local; -	main_frame = afr_transaction_detach_fop_frame (frame); -        if (!main_frame) -		return 0; - -	AFR_STACK_UNWIND (discard, main_frame, local->op_ret, local->op_errno, -			  &local->cont.inode_wfop.prebuf, -			  &local->cont.inode_wfop.postbuf, local->xdata_rsp); +    main_frame = afr_transaction_detach_fop_frame(frame); +    if (!main_frame)          return 0; -} +    AFR_STACK_UNWIND(discard, main_frame, local->op_ret, local->op_errno, +                     &local->cont.inode_wfop.prebuf, +                     &local->cont.inode_wfop.postbuf, local->xdata_rsp); +    return 0; +}  int -afr_discard_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                      int32_t op_ret, int32_t op_errno, struct iatt *prebuf, -                      struct iatt *postbuf, dict_t *xdata) +afr_discard_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                     int32_t op_ret, int32_t op_errno, struct iatt *prebuf, +                     struct iatt *postbuf, dict_t *xdata)  { -	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno, -				      prebuf, postbuf, NULL, xdata); +    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, prebuf, +                                 postbuf, NULL, xdata);  } -  int -afr_discard_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_discard_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        local = frame->local; -        priv = this->private; +    local = frame->local; +    priv = this->private; -	STACK_WIND_COOKIE (frame, afr_discard_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->discard, -			   local->fd, local->cont.discard.offset, -			   local->cont.discard.len, local->xdata_req); -        return 0; +    STACK_WIND_COOKIE(frame, afr_discard_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->discard, local->fd, +                      local->cont.discard.offset, local->cont.discard.len, +                      local->xdata_req); +    return 0;  } -  int -afr_discard (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, -             size_t len, dict_t *xdata) +afr_discard(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, +            size_t len, dict_t *xdata)  { -        afr_local_t *local = NULL; -        call_frame_t *transaction_frame = NULL; -        int ret = -1; -        int op_errno = ENOMEM; +    afr_local_t *local = NULL; +    call_frame_t *transaction_frame = NULL; +    int ret = -1; +    int op_errno = ENOMEM; -	transaction_frame = copy_frame (frame); -	if (!transaction_frame) -		goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -	local = AFR_FRAME_INIT (transaction_frame, op_errno); -	if (!local) -		goto out; +    local = AFR_FRAME_INIT(transaction_frame, op_errno); +    if (!local) +        goto out; -        local->cont.discard.offset  = offset; -        local->cont.discard.len = len; +    local->cont.discard.offset = offset; +    local->cont.discard.len = len; -        local->fd = fd_ref (fd); -        ret = afr_set_inode_local (this, local, fd->inode); -        if (ret) -                goto out; +    local->fd = fd_ref(fd); +    ret = afr_set_inode_local(this, local, fd->inode); +    if (ret) +        goto out; -	if (xdata) -		local->xdata_req = dict_copy_with_ref (xdata, NULL); -	else -		local->xdata_req = dict_new (); +    if (xdata) +        local->xdata_req = dict_copy_with_ref(xdata, NULL); +    else +        local->xdata_req = dict_new(); -	if (!local->xdata_req) -		goto out; +    if (!local->xdata_req) +        goto out; -        local->op = GF_FOP_DISCARD; +    local->op = GF_FOP_DISCARD; -        local->transaction.wind   = afr_discard_wind; -        local->transaction.unwind = afr_discard_unwind; +    local->transaction.wind = afr_discard_wind; +    local->transaction.unwind = afr_discard_unwind; -        local->transaction.main_frame = frame; +    local->transaction.main_frame = frame; -        local->transaction.start   = local->cont.discard.offset; -        local->transaction.len     = 0; +    local->transaction.start = local->cont.discard.offset; +    local->transaction.len = 0; -        afr_fix_open (fd, this); +    afr_fix_open(fd, this); -        ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION); -        if (ret < 0) { -		op_errno = -ret; -		goto out; -        } +    ret = afr_transaction(transaction_frame, this, AFR_DATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } -	return 0; +    return 0;  out: -	if (transaction_frame) -		AFR_STACK_DESTROY (transaction_frame); +    if (transaction_frame) +        AFR_STACK_DESTROY(transaction_frame); -	AFR_STACK_UNWIND (discard, frame, -1, op_errno, NULL, NULL, NULL); -        return 0; +    AFR_STACK_UNWIND(discard, frame, -1, op_errno, NULL, NULL, NULL); +    return 0;  } -  /* {{{ zerofill */  int -afr_zerofill_unwind (call_frame_t *frame, xlator_t *this) +afr_zerofill_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t *   local = NULL; -        call_frame_t   *main_frame = NULL; - -        local = frame->local; +    afr_local_t *local = NULL; +    call_frame_t *main_frame = NULL; -	main_frame = afr_transaction_detach_fop_frame (frame); -        if (!main_frame) -		return 0; +    local = frame->local; -	AFR_STACK_UNWIND (discard, main_frame, local->op_ret, local->op_errno, -			  &local->cont.inode_wfop.prebuf, -			  &local->cont.inode_wfop.postbuf, local->xdata_rsp); +    main_frame = afr_transaction_detach_fop_frame(frame); +    if (!main_frame)          return 0; -} +    AFR_STACK_UNWIND(discard, main_frame, local->op_ret, local->op_errno, +                     &local->cont.inode_wfop.prebuf, +                     &local->cont.inode_wfop.postbuf, local->xdata_rsp); +    return 0; +}  int -afr_zerofill_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, +afr_zerofill_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this,                        int32_t op_ret, int32_t op_errno, struct iatt *prebuf,                        struct iatt *postbuf, dict_t *xdata)  { -	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno, -				      prebuf, postbuf, NULL, xdata); +    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, prebuf, +                                 postbuf, NULL, xdata);  } -  int -afr_zerofill_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_zerofill_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        local = frame->local; -        priv = this->private; +    local = frame->local; +    priv = this->private; -	STACK_WIND_COOKIE (frame, afr_zerofill_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->zerofill, -			   local->fd, local->cont.zerofill.offset, -			   local->cont.zerofill.len, local->xdata_req); -        return 0; +    STACK_WIND_COOKIE(frame, afr_zerofill_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->zerofill, local->fd, +                      local->cont.zerofill.offset, local->cont.zerofill.len, +                      local->xdata_req); +    return 0;  }  int -afr_zerofill (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, +afr_zerofill(call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,               size_t len, dict_t *xdata)  { -        afr_local_t *local = NULL; -        call_frame_t *transaction_frame = NULL; -        int ret = -1; -        int op_errno = ENOMEM; +    afr_local_t *local = NULL; +    call_frame_t *transaction_frame = NULL; +    int ret = -1; +    int op_errno = ENOMEM; -	transaction_frame = copy_frame (frame); -	if (!transaction_frame) -		goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -	local = AFR_FRAME_INIT (transaction_frame, op_errno); -	if (!local) -		goto out; +    local = AFR_FRAME_INIT(transaction_frame, op_errno); +    if (!local) +        goto out; -        local->cont.zerofill.offset  = offset; -        local->cont.zerofill.len = len; +    local->cont.zerofill.offset = offset; +    local->cont.zerofill.len = len; -        local->fd = fd_ref (fd); -        ret = afr_set_inode_local (this, local, fd->inode); -        if (ret) -                goto out; +    local->fd = fd_ref(fd); +    ret = afr_set_inode_local(this, local, fd->inode); +    if (ret) +        goto out; -	if (xdata) -		local->xdata_req = dict_copy_with_ref (xdata, NULL); -	else -		local->xdata_req = dict_new (); +    if (xdata) +        local->xdata_req = dict_copy_with_ref(xdata, NULL); +    else +        local->xdata_req = dict_new(); -	if (!local->xdata_req) -		goto out; +    if (!local->xdata_req) +        goto out; -        local->op = GF_FOP_ZEROFILL; +    local->op = GF_FOP_ZEROFILL; -        local->transaction.wind   = afr_zerofill_wind; -        local->transaction.unwind = afr_zerofill_unwind; +    local->transaction.wind = afr_zerofill_wind; +    local->transaction.unwind = afr_zerofill_unwind; -        local->transaction.main_frame = frame; +    local->transaction.main_frame = frame; -        local->transaction.start   = local->cont.discard.offset; -        local->transaction.len     = len; +    local->transaction.start = local->cont.discard.offset; +    local->transaction.len = len; -        afr_fix_open (fd, this); +    afr_fix_open(fd, this); -        ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION); -        if (ret < 0) { -		op_errno = -ret; -		goto out; -        } +    ret = afr_transaction(transaction_frame, this, AFR_DATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } -	return 0; +    return 0;  out: -	if (transaction_frame) -		AFR_STACK_DESTROY (transaction_frame); +    if (transaction_frame) +        AFR_STACK_DESTROY(transaction_frame); -	AFR_STACK_UNWIND (zerofill, frame, -1, op_errno, NULL, NULL, NULL); -        return 0; +    AFR_STACK_UNWIND(zerofill, frame, -1, op_errno, NULL, NULL, NULL); +    return 0;  }  /* }}} */  int32_t -afr_xattrop_wind_cbk (call_frame_t *frame, void *cookie, -                      xlator_t *this, int32_t op_ret, int32_t op_errno, -                      dict_t *xattr, dict_t *xdata) +afr_xattrop_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                     int32_t op_ret, int32_t op_errno, dict_t *xattr, +                     dict_t *xdata)  { -	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno, -				      NULL, NULL, xattr, xdata); +    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, NULL, +                                 NULL, xattr, xdata);  }  int -afr_xattrop_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_xattrop_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        local = frame->local; -        priv = this->private; +    local = frame->local; +    priv = this->private; -	STACK_WIND_COOKIE (frame, afr_xattrop_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->xattrop, -			   &local->loc, local->cont.xattrop.optype, -			   local->cont.xattrop.xattr, local->xdata_req); -        return 0; +    STACK_WIND_COOKIE(frame, afr_xattrop_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->xattrop, &local->loc, +                      local->cont.xattrop.optype, local->cont.xattrop.xattr, +                      local->xdata_req); +    return 0;  }  int -afr_xattrop_unwind (call_frame_t *frame, xlator_t *this) +afr_xattrop_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t *local = NULL; -        call_frame_t *main_frame = NULL; +    afr_local_t *local = NULL; +    call_frame_t *main_frame = NULL; -        local = frame->local; +    local = frame->local; -	main_frame = afr_transaction_detach_fop_frame (frame); -	if (!main_frame) -		return 0; - -	AFR_STACK_UNWIND (xattrop, main_frame, local->op_ret, local->op_errno, -			  local->xattr_rsp, local->xdata_rsp); +    main_frame = afr_transaction_detach_fop_frame(frame); +    if (!main_frame)          return 0; + +    AFR_STACK_UNWIND(xattrop, main_frame, local->op_ret, local->op_errno, +                     local->xattr_rsp, local->xdata_rsp); +    return 0;  }  int32_t -afr_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc, -             gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata) +afr_xattrop(call_frame_t *frame, xlator_t *this, loc_t *loc, +            gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)  { -        afr_local_t *local = NULL; -        call_frame_t *transaction_frame = NULL; -        int ret = -1; -        int op_errno = ENOMEM; +    afr_local_t *local = NULL; +    call_frame_t *transaction_frame = NULL; +    int ret = -1; +    int op_errno = ENOMEM; -        transaction_frame = copy_frame (frame); -        if (!transaction_frame) -                goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -	local = AFR_FRAME_INIT (transaction_frame, op_errno); -	if (!local) -		goto out; +    local = AFR_FRAME_INIT(transaction_frame, op_errno); +    if (!local) +        goto out; -        local->cont.xattrop.xattr = dict_ref (xattr); -        local->cont.xattrop.optype = optype; -	if (xdata) -		local->xdata_req = dict_ref (xdata); +    local->cont.xattrop.xattr = dict_ref(xattr); +    local->cont.xattrop.optype = optype; +    if (xdata) +        local->xdata_req = dict_ref(xdata); -        local->transaction.wind   = afr_xattrop_wind; -        local->transaction.unwind = afr_xattrop_unwind; +    local->transaction.wind = afr_xattrop_wind; +    local->transaction.unwind = afr_xattrop_unwind; -        loc_copy (&local->loc, loc); -        ret = afr_set_inode_local (this, local, loc->inode); -        if (ret) -                goto out; +    loc_copy(&local->loc, loc); +    ret = afr_set_inode_local(this, local, loc->inode); +    if (ret) +        goto out; -	local->op = GF_FOP_XATTROP; +    local->op = GF_FOP_XATTROP; -        local->transaction.main_frame = frame; -        local->transaction.start   = LLONG_MAX - 1; -        local->transaction.len     = 0; +    local->transaction.main_frame = frame; +    local->transaction.start = LLONG_MAX - 1; +    local->transaction.len = 0; -        ret = afr_transaction (transaction_frame, this, AFR_METADATA_TRANSACTION); -        if (ret < 0) { -		op_errno = -ret; -		goto out; -        } +    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } -	return 0; +    return 0;  out: -	if (transaction_frame) -		AFR_STACK_DESTROY (transaction_frame); +    if (transaction_frame) +        AFR_STACK_DESTROY(transaction_frame); -	AFR_STACK_UNWIND (xattrop, frame, -1, op_errno, NULL, NULL); -        return 0; +    AFR_STACK_UNWIND(xattrop, frame, -1, op_errno, NULL, NULL); +    return 0;  }  int32_t -afr_fxattrop_wind_cbk (call_frame_t *frame, void *cookie, -                       xlator_t *this, int32_t op_ret, int32_t op_errno, -                       dict_t *xattr, dict_t *xdata) +afr_fxattrop_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                      int32_t op_ret, int32_t op_errno, dict_t *xattr, +                      dict_t *xdata)  { -	return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno, -				      NULL, NULL, xattr, xdata); +    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, NULL, +                                 NULL, xattr, xdata);  }  int -afr_fxattrop_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_fxattrop_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        local = frame->local; -        priv = this->private; +    local = frame->local; +    priv = this->private; -	STACK_WIND_COOKIE (frame, afr_fxattrop_wind_cbk, (void *) (long) subvol, -			   priv->children[subvol], -			   priv->children[subvol]->fops->fxattrop, -			   local->fd, local->cont.xattrop.optype, -			   local->cont.xattrop.xattr, local->xdata_req); -        return 0; +    STACK_WIND_COOKIE(frame, afr_fxattrop_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->fxattrop, local->fd, +                      local->cont.xattrop.optype, local->cont.xattrop.xattr, +                      local->xdata_req); +    return 0;  }  int -afr_fxattrop_unwind (call_frame_t *frame, xlator_t *this) +afr_fxattrop_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t *local = NULL; -        call_frame_t *main_frame = NULL; - -        local = frame->local; +    afr_local_t *local = NULL; +    call_frame_t *main_frame = NULL; -	main_frame = afr_transaction_detach_fop_frame (frame); -	if (!main_frame) -		return 0; +    local = frame->local; -	AFR_STACK_UNWIND (fxattrop, main_frame, local->op_ret, local->op_errno, -			  local->xattr_rsp, local->xdata_rsp); +    main_frame = afr_transaction_detach_fop_frame(frame); +    if (!main_frame)          return 0; + +    AFR_STACK_UNWIND(fxattrop, main_frame, local->op_ret, local->op_errno, +                     local->xattr_rsp, local->xdata_rsp); +    return 0;  }  int32_t -afr_fxattrop (call_frame_t *frame, xlator_t *this, fd_t *fd, -              gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata) +afr_fxattrop(call_frame_t *frame, xlator_t *this, fd_t *fd, +             gf_xattrop_flags_t optype, dict_t *xattr, dict_t *xdata)  { -        afr_local_t *local = NULL; -        call_frame_t *transaction_frame = NULL; -        int ret = -1; -        int op_errno = ENOMEM; +    afr_local_t *local = NULL; +    call_frame_t *transaction_frame = NULL; +    int ret = -1; +    int op_errno = ENOMEM; -        transaction_frame = copy_frame (frame); -        if (!transaction_frame) -                goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -	local = AFR_FRAME_INIT (transaction_frame, op_errno); -	if (!local) -		goto out; +    local = AFR_FRAME_INIT(transaction_frame, op_errno); +    if (!local) +        goto out; -        local->cont.xattrop.xattr = dict_ref (xattr); -        local->cont.xattrop.optype = optype; -	if (xdata) -		local->xdata_req = dict_ref (xdata); +    local->cont.xattrop.xattr = dict_ref(xattr); +    local->cont.xattrop.optype = optype; +    if (xdata) +        local->xdata_req = dict_ref(xdata); -        local->transaction.wind   = afr_fxattrop_wind; -        local->transaction.unwind = afr_fxattrop_unwind; +    local->transaction.wind = afr_fxattrop_wind; +    local->transaction.unwind = afr_fxattrop_unwind; -	local->fd = fd_ref (fd); -        ret = afr_set_inode_local (this, local, fd->inode); -        if (ret) -                goto out; +    local->fd = fd_ref(fd); +    ret = afr_set_inode_local(this, local, fd->inode); +    if (ret) +        goto out; -	local->op = GF_FOP_FXATTROP; +    local->op = GF_FOP_FXATTROP; -        local->transaction.main_frame = frame; -        local->transaction.start   = LLONG_MAX - 1; -        local->transaction.len     = 0; +    local->transaction.main_frame = frame; +    local->transaction.start = LLONG_MAX - 1; +    local->transaction.len = 0; -        ret = afr_transaction (transaction_frame, this, -                               AFR_METADATA_TRANSACTION); -        if (ret < 0) { -		op_errno = -ret; -		goto out; -        } +    ret = afr_transaction(transaction_frame, this, AFR_METADATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } -	return 0; +    return 0;  out: -	if (transaction_frame) -		AFR_STACK_DESTROY (transaction_frame); +    if (transaction_frame) +        AFR_STACK_DESTROY(transaction_frame); -	AFR_STACK_UNWIND (fxattrop, frame, -1, op_errno, NULL, NULL); -        return 0; +    AFR_STACK_UNWIND(fxattrop, frame, -1, op_errno, NULL, NULL); +    return 0;  } -  int -afr_fsync_unwind (call_frame_t *frame, xlator_t *this) +afr_fsync_unwind(call_frame_t *frame, xlator_t *this)  { -        afr_local_t *local = NULL; -        call_frame_t   *main_frame = NULL; +    afr_local_t *local = NULL; +    call_frame_t *main_frame = NULL; -        local = frame->local; +    local = frame->local; -        main_frame = afr_transaction_detach_fop_frame (frame); -        if (!main_frame) -                return 0; +    main_frame = afr_transaction_detach_fop_frame(frame); +    if (!main_frame) +        return 0; -        AFR_STACK_UNWIND (fsync, main_frame, local->op_ret, local->op_errno, -                          &local->cont.inode_wfop.prebuf, -                          &local->cont.inode_wfop.postbuf, local->xdata_rsp); +    AFR_STACK_UNWIND(fsync, main_frame, local->op_ret, local->op_errno, +                     &local->cont.inode_wfop.prebuf, +                     &local->cont.inode_wfop.postbuf, local->xdata_rsp); -        return 0; +    return 0;  } -  int -afr_fsync_wind_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                    int32_t op_ret, int32_t op_errno, struct iatt *prebuf, -                    struct iatt *postbuf, dict_t *xdata) +afr_fsync_wind_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                   int32_t op_ret, int32_t op_errno, struct iatt *prebuf, +                   struct iatt *postbuf, dict_t *xdata)  { -        return __afr_inode_write_cbk (frame, cookie, this, op_ret, op_errno, -                                      prebuf, postbuf, NULL, xdata); +    return __afr_inode_write_cbk(frame, cookie, this, op_ret, op_errno, prebuf, +                                 postbuf, NULL, xdata);  } -  int -afr_fsync_wind (call_frame_t *frame, xlator_t *this, int subvol) +afr_fsync_wind(call_frame_t *frame, xlator_t *this, int subvol)  { -        afr_local_t *local = NULL; -        afr_private_t *priv = NULL; +    afr_local_t *local = NULL; +    afr_private_t *priv = NULL; -        local = frame->local; -        priv = this->private; +    local = frame->local; +    priv = this->private; -        STACK_WIND_COOKIE (frame, afr_fsync_wind_cbk, (void *)(long) subvol, -                           priv->children[subvol], -                           priv->children[subvol]->fops->fsync, -                           local->fd, local->cont.fsync.datasync, -                           local->xdata_req); -        return 0; +    STACK_WIND_COOKIE(frame, afr_fsync_wind_cbk, (void *)(long)subvol, +                      priv->children[subvol], +                      priv->children[subvol]->fops->fsync, local->fd, +                      local->cont.fsync.datasync, local->xdata_req); +    return 0;  }  int -afr_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync, -	   dict_t *xdata) +afr_fsync(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t datasync, +          dict_t *xdata)  { -        afr_local_t *local = NULL; -        call_frame_t *transaction_frame = NULL; -        int ret = -1; -        int32_t op_errno = ENOMEM; +    afr_local_t *local = NULL; +    call_frame_t *transaction_frame = NULL; +    int ret = -1; +    int32_t op_errno = ENOMEM; -        transaction_frame = copy_frame (frame); -        if (!transaction_frame) -                goto out; +    transaction_frame = copy_frame(frame); +    if (!transaction_frame) +        goto out; -	local = AFR_FRAME_INIT (transaction_frame, op_errno); -	if (!local) -		goto out; +    local = AFR_FRAME_INIT(transaction_frame, op_errno); +    if (!local) +        goto out; -        if (xdata) -                local->xdata_req = dict_copy_with_ref (xdata, NULL); -        else -                local->xdata_req = dict_new (); +    if (xdata) +        local->xdata_req = dict_copy_with_ref(xdata, NULL); +    else +        local->xdata_req = dict_new(); -        if (!local->xdata_req) -                goto out; +    if (!local->xdata_req) +        goto out; -        local->fd = fd_ref (fd); -        ret = afr_set_inode_local (this, local, fd->inode); -        if (ret) -                goto out; +    local->fd = fd_ref(fd); +    ret = afr_set_inode_local(this, local, fd->inode); +    if (ret) +        goto out; -        local->op = GF_FOP_FSYNC; -        local->cont.fsync.datasync = datasync; +    local->op = GF_FOP_FSYNC; +    local->cont.fsync.datasync = datasync; -	if (afr_fd_has_witnessed_unstable_write (this, fd->inode)) { -		/* don't care. we only wanted to CLEAR the bit */ -	} +    if (afr_fd_has_witnessed_unstable_write(this, fd->inode)) { +        /* don't care. we only wanted to CLEAR the bit */ +    } -        local->transaction.wind   = afr_fsync_wind; -        local->transaction.unwind = afr_fsync_unwind; +    local->transaction.wind = afr_fsync_wind; +    local->transaction.unwind = afr_fsync_unwind; -        local->transaction.main_frame = frame; +    local->transaction.main_frame = frame; -        ret = afr_transaction (transaction_frame, this, AFR_DATA_TRANSACTION); -        if (ret < 0) { -                op_errno = -ret; -                goto out; -        } +    ret = afr_transaction(transaction_frame, this, AFR_DATA_TRANSACTION); +    if (ret < 0) { +        op_errno = -ret; +        goto out; +    } -	return 0; +    return 0;  out: -	if (transaction_frame) -		AFR_STACK_DESTROY (transaction_frame); +    if (transaction_frame) +        AFR_STACK_DESTROY(transaction_frame); -	AFR_STACK_UNWIND (fsync, frame, -1, op_errno, NULL, NULL, NULL); +    AFR_STACK_UNWIND(fsync, frame, -1, op_errno, NULL, NULL, NULL); -        return 0; +    return 0;  }  | 
