diff options
Diffstat (limited to 'xlators/protocol/client/src/client-helpers.c')
| -rw-r--r-- | xlators/protocol/client/src/client-helpers.c | 5463 | 
1 files changed, 2601 insertions, 2862 deletions
diff --git a/xlators/protocol/client/src/client-helpers.c b/xlators/protocol/client/src/client-helpers.c index f077fc2a73c..e81f166ba46 100644 --- a/xlators/protocol/client/src/client-helpers.c +++ b/xlators/protocol/client/src/client-helpers.c @@ -16,3007 +16,2761 @@  #include "common-utils.h"  int -client_fd_lk_list_empty (fd_lk_ctx_t *lk_ctx, gf_boolean_t try_lock) +client_fd_lk_list_empty(fd_lk_ctx_t *lk_ctx, gf_boolean_t try_lock)  { -        int  ret = 1; +    int ret = 1; -        if (!lk_ctx) { -                ret = -1; -                goto out; -        } +    if (!lk_ctx) { +        ret = -1; +        goto out; +    } -        if (try_lock) { -                ret = TRY_LOCK (&lk_ctx->lock); -                if (ret != 0) { -                        ret = -1; -                        goto out; -                } -        } else { -                LOCK (&lk_ctx->lock); +    if (try_lock) { +        ret = TRY_LOCK(&lk_ctx->lock); +        if (ret != 0) { +            ret = -1; +            goto out;          } +    } else { +        LOCK(&lk_ctx->lock); +    } -        ret = list_empty (&lk_ctx->lk_list); -        UNLOCK (&lk_ctx->lock); +    ret = list_empty(&lk_ctx->lk_list); +    UNLOCK(&lk_ctx->lock);  out: -        return ret; +    return ret;  }  clnt_fd_ctx_t * -this_fd_del_ctx (fd_t *file, xlator_t *this) +this_fd_del_ctx(fd_t *file, xlator_t *this)  { -        int         dict_ret = -1; -        uint64_t    ctxaddr  = 0; +    int dict_ret = -1; +    uint64_t ctxaddr = 0; -        GF_VALIDATE_OR_GOTO ("client", this, out); -        GF_VALIDATE_OR_GOTO (this->name, file, out); +    GF_VALIDATE_OR_GOTO("client", this, out); +    GF_VALIDATE_OR_GOTO(this->name, file, out); -        dict_ret = fd_ctx_del (file, this, &ctxaddr); +    dict_ret = fd_ctx_del(file, this, &ctxaddr); -        if (dict_ret < 0) { -                ctxaddr = 0; -        } +    if (dict_ret < 0) { +        ctxaddr = 0; +    }  out: -        return (clnt_fd_ctx_t *)(unsigned long)ctxaddr; +    return (clnt_fd_ctx_t *)(unsigned long)ctxaddr;  } -  clnt_fd_ctx_t * -this_fd_get_ctx (fd_t *file, xlator_t *this) +this_fd_get_ctx(fd_t *file, xlator_t *this)  { -        int         dict_ret = -1; -        uint64_t    ctxaddr = 0; +    int dict_ret = -1; +    uint64_t ctxaddr = 0; -        GF_VALIDATE_OR_GOTO ("client", this, out); -        GF_VALIDATE_OR_GOTO (this->name, file, out); +    GF_VALIDATE_OR_GOTO("client", this, out); +    GF_VALIDATE_OR_GOTO(this->name, file, out); -        dict_ret = fd_ctx_get (file, this, &ctxaddr); +    dict_ret = fd_ctx_get(file, this, &ctxaddr); -        if (dict_ret < 0) { -                ctxaddr = 0; -        } +    if (dict_ret < 0) { +        ctxaddr = 0; +    }  out: -        return (clnt_fd_ctx_t *)(unsigned long)ctxaddr; +    return (clnt_fd_ctx_t *)(unsigned long)ctxaddr;  } -  void -this_fd_set_ctx (fd_t *file, xlator_t *this, loc_t *loc, clnt_fd_ctx_t *ctx) +this_fd_set_ctx(fd_t *file, xlator_t *this, loc_t *loc, clnt_fd_ctx_t *ctx)  { -        uint64_t oldaddr = 0; -        int32_t  ret = -1; - -        GF_VALIDATE_OR_GOTO ("client", this, out); -        GF_VALIDATE_OR_GOTO (this->name, file, out); - -        ret = fd_ctx_get (file, this, &oldaddr); -        if (ret >= 0) { -                if (loc) -                        gf_msg (this->name, GF_LOG_INFO, 0, -                                PC_MSG_FD_DUPLICATE_TRY, -                                "%s (%s): trying duplicate remote fd set. ", -                                loc->path, uuid_utoa (loc->inode->gfid)); -                else -                        gf_msg (this->name, GF_LOG_INFO, 0, -                                PC_MSG_FD_DUPLICATE_TRY, -                                "%p: trying duplicate remote fd set. ", file); -        } - -        ret = fd_ctx_set (file, this, (uint64_t)(unsigned long)ctx); -        if (ret < 0) { -                if (loc) -                        gf_msg (this->name, GF_LOG_WARNING, 0, -                                PC_MSG_FD_SET_FAIL, -                                "%s (%s): failed to set remote fd", -                                loc->path, uuid_utoa (loc->inode->gfid)); -                else -                        gf_msg (this->name, GF_LOG_WARNING, 0, -                                PC_MSG_FD_SET_FAIL, -                                "%p: failed to set remote fd", file); -        } +    uint64_t oldaddr = 0; +    int32_t ret = -1; + +    GF_VALIDATE_OR_GOTO("client", this, out); +    GF_VALIDATE_OR_GOTO(this->name, file, out); + +    ret = fd_ctx_get(file, this, &oldaddr); +    if (ret >= 0) { +        if (loc) +            gf_msg(this->name, GF_LOG_INFO, 0, PC_MSG_FD_DUPLICATE_TRY, +                   "%s (%s): trying duplicate remote fd set. ", loc->path, +                   uuid_utoa(loc->inode->gfid)); +        else +            gf_msg(this->name, GF_LOG_INFO, 0, PC_MSG_FD_DUPLICATE_TRY, +                   "%p: trying duplicate remote fd set. ", file); +    } + +    ret = fd_ctx_set(file, this, (uint64_t)(unsigned long)ctx); +    if (ret < 0) { +        if (loc) +            gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FD_SET_FAIL, +                   "%s (%s): failed to set remote fd", loc->path, +                   uuid_utoa(loc->inode->gfid)); +        else +            gf_msg(this->name, GF_LOG_WARNING, 0, PC_MSG_FD_SET_FAIL, +                   "%p: failed to set remote fd", file); +    }  out: -        return; +    return;  } -  int -client_local_wipe (clnt_local_t *local) +client_local_wipe(clnt_local_t *local)  { -        if (local) { -                loc_wipe (&local->loc); -                loc_wipe (&local->loc2); - -                if (local->fd) { -                        fd_unref (local->fd); -                } +    if (local) { +        loc_wipe(&local->loc); +        loc_wipe(&local->loc2); -                if (local->iobref) { -                        iobref_unref (local->iobref); -                } +        if (local->fd) { +            fd_unref(local->fd); +        } -                GF_FREE (local->name); -                local->compound_args = NULL; -                mem_put (local); +        if (local->iobref) { +            iobref_unref(local->iobref);          } -        return 0; +        GF_FREE(local->name); +        local->compound_args = NULL; +        mem_put(local); +    } + +    return 0;  }  int -unserialize_rsp_dirent (xlator_t *this, struct gfs3_readdir_rsp *rsp, -                        gf_dirent_t *entries) +unserialize_rsp_dirent(xlator_t *this, struct gfs3_readdir_rsp *rsp, +                       gf_dirent_t *entries)  { -        struct gfs3_dirlist  *trav      = NULL; -	gf_dirent_t          *entry     = NULL; -        int                   entry_len = 0; -        int                   ret       = -1; -        clnt_conf_t          *conf = NULL; +    struct gfs3_dirlist *trav = NULL; +    gf_dirent_t *entry = NULL; +    int entry_len = 0; +    int ret = -1; +    clnt_conf_t *conf = NULL; -        conf = this->private; +    conf = this->private; -        trav = rsp->reply; -        while (trav) { -                entry_len = gf_dirent_size (trav->name); -                entry = GF_CALLOC (1, entry_len, gf_common_mt_gf_dirent_t); -                if (!entry) -                        goto out; +    trav = rsp->reply; +    while (trav) { +        entry_len = gf_dirent_size(trav->name); +        entry = GF_CALLOC(1, entry_len, gf_common_mt_gf_dirent_t); +        if (!entry) +            goto out; -                entry->d_ino  = trav->d_ino; -                gf_itransform (this, trav->d_off, &entry->d_off, -                                      conf->client_id); -                entry->d_len  = trav->d_len; -                entry->d_type = trav->d_type; +        entry->d_ino = trav->d_ino; +        gf_itransform(this, trav->d_off, &entry->d_off, conf->client_id); +        entry->d_len = trav->d_len; +        entry->d_type = trav->d_type; -                strcpy (entry->d_name, trav->name); +        strcpy(entry->d_name, trav->name); -		list_add_tail (&entry->list, &entries->list); +        list_add_tail(&entry->list, &entries->list); -                trav = trav->nextentry; -        } +        trav = trav->nextentry; +    } -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  int -unserialize_rsp_direntp (xlator_t *this, fd_t *fd, -                         struct gfs3_readdirp_rsp *rsp, gf_dirent_t *entries) +unserialize_rsp_direntp(xlator_t *this, fd_t *fd, struct gfs3_readdirp_rsp *rsp, +                        gf_dirent_t *entries)  { -        struct gfs3_dirplist *trav      = NULL; -        char                 *buf       = NULL; -	gf_dirent_t          *entry     = NULL; -        inode_table_t        *itable    = NULL; -        int                   entry_len = 0; -        int                   ret       = -1; -        clnt_conf_t          *conf      = NULL; - -        trav = rsp->reply; +    struct gfs3_dirplist *trav = NULL; +    char *buf = NULL; +    gf_dirent_t *entry = NULL; +    inode_table_t *itable = NULL; +    int entry_len = 0; +    int ret = -1; +    clnt_conf_t *conf = NULL; + +    trav = rsp->reply; + +    if (fd) +        itable = fd->inode->table; + +    conf = this->private; +    if (!conf) +        goto out; + +    while (trav) { +        entry_len = gf_dirent_size(trav->name); +        entry = GF_CALLOC(1, entry_len, gf_common_mt_gf_dirent_t); +        if (!entry) +            goto out; + +        entry->d_ino = trav->d_ino; +        gf_itransform(this, trav->d_off, &entry->d_off, conf->client_id); +        entry->d_len = trav->d_len; +        entry->d_type = trav->d_type; + +        gf_stat_to_iatt(&trav->stat, &entry->d_stat); + +        strcpy(entry->d_name, trav->name); + +        if (trav->dict.dict_val) { +            /* Dictionary is sent along with response */ +            buf = memdup(trav->dict.dict_val, trav->dict.dict_len); +            if (!buf) +                goto out; -        if (fd) -                itable = fd->inode->table; +            entry->dict = dict_new(); -        conf = this->private; -        if (!conf) +            ret = dict_unserialize(buf, trav->dict.dict_len, &entry->dict); +            if (ret < 0) { +                gf_msg(THIS->name, GF_LOG_WARNING, EINVAL, +                       PC_MSG_DICT_UNSERIALIZE_FAIL, +                       "failed to unserialize xattr dict");                  goto out; +            } +            GF_FREE(buf); +            buf = NULL; +        } -        while (trav) { -                entry_len = gf_dirent_size (trav->name); -                entry = GF_CALLOC (1, entry_len, gf_common_mt_gf_dirent_t); -                if (!entry) -                        goto out; - -                entry->d_ino  = trav->d_ino; -                gf_itransform (this, trav->d_off, &entry->d_off, -                                      conf->client_id); -                entry->d_len  = trav->d_len; -                entry->d_type = trav->d_type; - -                gf_stat_to_iatt (&trav->stat, &entry->d_stat); - -                strcpy (entry->d_name, trav->name); - -                if (trav->dict.dict_val) { -                        /* Dictionary is sent along with response */ -                        buf = memdup (trav->dict.dict_val, trav->dict.dict_len); -                        if (!buf) -                                goto out; - -                        entry->dict = dict_new (); - -                        ret = dict_unserialize (buf, trav->dict.dict_len, -                                                &entry->dict); -                        if (ret < 0) { -                                gf_msg (THIS->name, GF_LOG_WARNING, EINVAL, -                                        PC_MSG_DICT_UNSERIALIZE_FAIL, -                                        "failed to unserialize xattr dict"); -                                goto out; -                        } -                        GF_FREE (buf); -                        buf = NULL; -                } - -                entry->inode = inode_find (itable, entry->d_stat.ia_gfid); -                if (!entry->inode) -                        entry->inode = inode_new (itable); +        entry->inode = inode_find(itable, entry->d_stat.ia_gfid); +        if (!entry->inode) +            entry->inode = inode_new(itable); -		list_add_tail (&entry->list, &entries->list); +        list_add_tail(&entry->list, &entries->list); -                trav = trav->nextentry; -        } +        trav = trav->nextentry; +    } -        ret = 0; +    ret = 0;  out: -        if (buf) -                GF_FREE (buf); -        return ret; +    if (buf) +        GF_FREE(buf); +    return ret;  }  int -clnt_readdirp_rsp_cleanup (gfs3_readdirp_rsp *rsp) +clnt_readdirp_rsp_cleanup(gfs3_readdirp_rsp *rsp)  { -        gfs3_dirplist *prev = NULL; -        gfs3_dirplist *trav = NULL; - -        trav = rsp->reply; +    gfs3_dirplist *prev = NULL; +    gfs3_dirplist *trav = NULL; + +    trav = rsp->reply; +    prev = trav; +    while (trav) { +        trav = trav->nextentry; +        /* on client, the rpc lib allocates this */ +        free(prev->dict.dict_val); +        free(prev->name); +        free(prev);          prev = trav; -        while (trav) { -                trav = trav->nextentry; -                /* on client, the rpc lib allocates this */ -                free (prev->dict.dict_val); -                free (prev->name); -                free (prev); -                prev = trav; -        } +    } -        return 0; +    return 0;  }  int -unserialize_rsp_dirent_v2 (xlator_t *this, struct gfx_readdir_rsp *rsp, -                           gf_dirent_t *entries) +unserialize_rsp_dirent_v2(xlator_t *this, struct gfx_readdir_rsp *rsp, +                          gf_dirent_t *entries)  { -        struct gfx_dirlist  *trav      = NULL; -	gf_dirent_t          *entry     = NULL; -        int                   entry_len = 0; -        int                   ret       = -1; -        clnt_conf_t          *conf = NULL; +    struct gfx_dirlist *trav = NULL; +    gf_dirent_t *entry = NULL; +    int entry_len = 0; +    int ret = -1; +    clnt_conf_t *conf = NULL; -        conf = this->private; +    conf = this->private; -        trav = rsp->reply; -        while (trav) { -                entry_len = gf_dirent_size (trav->name); -                entry = GF_CALLOC (1, entry_len, gf_common_mt_gf_dirent_t); -                if (!entry) -                        goto out; +    trav = rsp->reply; +    while (trav) { +        entry_len = gf_dirent_size(trav->name); +        entry = GF_CALLOC(1, entry_len, gf_common_mt_gf_dirent_t); +        if (!entry) +            goto out; -                entry->d_ino  = trav->d_ino; -                gf_itransform (this, trav->d_off, &entry->d_off, -                               conf->client_id); -                entry->d_len  = trav->d_len; -                entry->d_type = trav->d_type; +        entry->d_ino = trav->d_ino; +        gf_itransform(this, trav->d_off, &entry->d_off, conf->client_id); +        entry->d_len = trav->d_len; +        entry->d_type = trav->d_type; -                strcpy (entry->d_name, trav->name); +        strcpy(entry->d_name, trav->name); -		list_add_tail (&entry->list, &entries->list); +        list_add_tail(&entry->list, &entries->list); -                trav = trav->nextentry; -        } +        trav = trav->nextentry; +    } -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  int -unserialize_rsp_direntp_v2 (xlator_t *this, fd_t *fd, -                            struct gfx_readdirp_rsp *rsp, gf_dirent_t *entries) +unserialize_rsp_direntp_v2(xlator_t *this, fd_t *fd, +                           struct gfx_readdirp_rsp *rsp, gf_dirent_t *entries)  { -        struct gfx_dirplist *trav      = NULL; -	gf_dirent_t          *entry     = NULL; -        inode_table_t        *itable    = NULL; -        int                   entry_len = 0; -        int                   ret       = -1; -        clnt_conf_t          *conf      = NULL; +    struct gfx_dirplist *trav = NULL; +    gf_dirent_t *entry = NULL; +    inode_table_t *itable = NULL; +    int entry_len = 0; +    int ret = -1; +    clnt_conf_t *conf = NULL; -        trav = rsp->reply; +    trav = rsp->reply; -        if (fd) -                itable = fd->inode->table; +    if (fd) +        itable = fd->inode->table; -        conf = this->private; -        if (!conf) -                goto out; +    conf = this->private; +    if (!conf) +        goto out; -        while (trav) { -                entry_len = gf_dirent_size (trav->name); -                entry = GF_CALLOC (1, entry_len, gf_common_mt_gf_dirent_t); -                if (!entry) -                        goto out; +    while (trav) { +        entry_len = gf_dirent_size(trav->name); +        entry = GF_CALLOC(1, entry_len, gf_common_mt_gf_dirent_t); +        if (!entry) +            goto out; -                entry->d_ino  = trav->d_ino; -                gf_itransform (this, trav->d_off, &entry->d_off, -                                      conf->client_id); -                entry->d_len  = trav->d_len; -                entry->d_type = trav->d_type; +        entry->d_ino = trav->d_ino; +        gf_itransform(this, trav->d_off, &entry->d_off, conf->client_id); +        entry->d_len = trav->d_len; +        entry->d_type = trav->d_type; -                gfx_stat_to_iattx (&trav->stat, &entry->d_stat); +        gfx_stat_to_iattx(&trav->stat, &entry->d_stat); -                strcpy (entry->d_name, trav->name); +        strcpy(entry->d_name, trav->name); -                xdr_to_dict (&trav->dict, &entry->dict); +        xdr_to_dict(&trav->dict, &entry->dict); -                entry->inode = inode_find (itable, entry->d_stat.ia_gfid); -                if (!entry->inode) -                        entry->inode = inode_new (itable); +        entry->inode = inode_find(itable, entry->d_stat.ia_gfid); +        if (!entry->inode) +            entry->inode = inode_new(itable); -		list_add_tail (&entry->list, &entries->list); +        list_add_tail(&entry->list, &entries->list); -                trav = trav->nextentry; -        } +        trav = trav->nextentry; +    } -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  int -clnt_readdirp_rsp_cleanup_v2 (gfx_readdirp_rsp *rsp) +clnt_readdirp_rsp_cleanup_v2(gfx_readdirp_rsp *rsp)  { -        gfx_dirplist *prev = NULL; -        gfx_dirplist *trav = NULL; - -        trav = rsp->reply; +    gfx_dirplist *prev = NULL; +    gfx_dirplist *trav = NULL; + +    trav = rsp->reply; +    prev = trav; +    while (trav) { +        trav = trav->nextentry; +        free(prev->name); +        free(prev);          prev = trav; -        while (trav) { -                trav = trav->nextentry; -                free (prev->name); -                free (prev); -                prev = trav; -        } +    } -        return 0; +    return 0;  }  int -clnt_readdir_rsp_cleanup (gfs3_readdir_rsp *rsp) +clnt_readdir_rsp_cleanup(gfs3_readdir_rsp *rsp)  { -        gfs3_dirlist *prev = NULL; -        gfs3_dirlist *trav = NULL; - -        trav = rsp->reply; +    gfs3_dirlist *prev = NULL; +    gfs3_dirlist *trav = NULL; + +    trav = rsp->reply; +    prev = trav; +    while (trav) { +        trav = trav->nextentry; +        /* on client, the rpc lib allocates this */ +        free(prev->name); +        free(prev);          prev = trav; -        while (trav) { -                trav = trav->nextentry; -                /* on client, the rpc lib allocates this */ -                free (prev->name); -                free (prev); -                prev = trav; -        } +    } -        return 0; +    return 0;  }  int -clnt_readdir_rsp_cleanup_v2 (gfx_readdir_rsp *rsp) +clnt_readdir_rsp_cleanup_v2(gfx_readdir_rsp *rsp)  { -        gfx_dirlist *prev = NULL; -        gfx_dirlist *trav = NULL; - -        trav = rsp->reply; +    gfx_dirlist *prev = NULL; +    gfx_dirlist *trav = NULL; + +    trav = rsp->reply; +    prev = trav; +    while (trav) { +        trav = trav->nextentry; +        /* on client, the rpc lib allocates this */ +        free(prev->name); +        free(prev);          prev = trav; -        while (trav) { -                trav = trav->nextentry; -                /* on client, the rpc lib allocates this */ -                free (prev->name); -                free (prev); -                prev = trav; -        } +    } -        return 0; +    return 0;  }  int -client_get_remote_fd (xlator_t *this, fd_t *fd, int flags, int64_t *remote_fd) +client_get_remote_fd(xlator_t *this, fd_t *fd, int flags, int64_t *remote_fd)  { -        clnt_fd_ctx_t *fdctx    = NULL; -        clnt_conf_t   *conf     = NULL; - -        GF_VALIDATE_OR_GOTO (this->name, fd, out); -        GF_VALIDATE_OR_GOTO (this->name, remote_fd, out); - -        conf = this->private; -        pthread_spin_lock (&conf->fd_lock); -        { -                fdctx = this_fd_get_ctx (fd, this); -                if (!fdctx) { -                        *remote_fd = GF_ANON_FD_NO; -                } else { -                        if (__is_fd_reopen_in_progress (fdctx)) -                                *remote_fd = -1; -                        else -                                *remote_fd = fdctx->remote_fd; -                } +    clnt_fd_ctx_t *fdctx = NULL; +    clnt_conf_t *conf = NULL; + +    GF_VALIDATE_OR_GOTO(this->name, fd, out); +    GF_VALIDATE_OR_GOTO(this->name, remote_fd, out); + +    conf = this->private; +    pthread_spin_lock(&conf->fd_lock); +    { +        fdctx = this_fd_get_ctx(fd, this); +        if (!fdctx) { +            *remote_fd = GF_ANON_FD_NO; +        } else { +            if (__is_fd_reopen_in_progress(fdctx)) +                *remote_fd = -1; +            else +                *remote_fd = fdctx->remote_fd;          } -        pthread_spin_unlock (&conf->fd_lock); +    } +    pthread_spin_unlock(&conf->fd_lock); -        if ((flags & FALLBACK_TO_ANON_FD) && (*remote_fd == -1)) -                *remote_fd = GF_ANON_FD_NO; +    if ((flags & FALLBACK_TO_ANON_FD) && (*remote_fd == -1)) +        *remote_fd = GF_ANON_FD_NO; -        return 0; +    return 0;  out: -        return -1; +    return -1;  }  gf_boolean_t -client_is_reopen_needed (fd_t *fd, xlator_t *this, int64_t remote_fd) +client_is_reopen_needed(fd_t *fd, xlator_t *this, int64_t remote_fd)  { -        clnt_conf_t     *conf  = NULL; -        clnt_fd_ctx_t   *fdctx = NULL; -        gf_boolean_t     res = _gf_false; - -        conf = this->private; -        pthread_spin_lock(&conf->fd_lock); -        { -                fdctx = this_fd_get_ctx (fd, this); -                if (fdctx && (fdctx->remote_fd == -1) && -                    (remote_fd == GF_ANON_FD_NO)) -                        res = _gf_true; -        } -        pthread_spin_unlock(&conf->fd_lock); - -        return res; +    clnt_conf_t *conf = NULL; +    clnt_fd_ctx_t *fdctx = NULL; +    gf_boolean_t res = _gf_false; + +    conf = this->private; +    pthread_spin_lock(&conf->fd_lock); +    { +        fdctx = this_fd_get_ctx(fd, this); +        if (fdctx && (fdctx->remote_fd == -1) && (remote_fd == GF_ANON_FD_NO)) +            res = _gf_true; +    } +    pthread_spin_unlock(&conf->fd_lock); + +    return res;  }  int -client_fd_fop_prepare_local (call_frame_t *frame, fd_t *fd, int64_t remote_fd) +client_fd_fop_prepare_local(call_frame_t *frame, fd_t *fd, int64_t remote_fd)  { -        xlator_t     *this  = NULL; -        clnt_local_t *local = NULL; -        int          ret    = 0; +    xlator_t *this = NULL; +    clnt_local_t *local = NULL; +    int ret = 0; -        if (!frame || !fd) { -                ret = -EINVAL; -                goto out; -        } +    if (!frame || !fd) { +        ret = -EINVAL; +        goto out; +    } -        this = frame->this; +    this = frame->this; -        frame->local = mem_get0 (this->local_pool); -        if (frame->local == NULL) { -                ret = -ENOMEM; -                goto out; -        } +    frame->local = mem_get0(this->local_pool); +    if (frame->local == NULL) { +        ret = -ENOMEM; +        goto out; +    } -        local = frame->local; -        local->fd = fd_ref (fd); -        local->attempt_reopen = client_is_reopen_needed (fd, this, remote_fd); +    local = frame->local; +    local->fd = fd_ref(fd); +    local->attempt_reopen = client_is_reopen_needed(fd, this, remote_fd); -        return 0; +    return 0;  out: -        return ret; +    return ret;  }  int -client_process_response (call_frame_t *frame, xlator_t *this, -                         struct rpc_req *req, gfs3_compound_rsp *rsp, -                         compound_args_cbk_t *args_cbk, -                         int index) +client_process_response(call_frame_t *frame, xlator_t *this, +                        struct rpc_req *req, gfs3_compound_rsp *rsp, +                        compound_args_cbk_t *args_cbk, int index)  { -        int                      ret            = 0; -        dict_t                  *xdata          = NULL; -        dict_t                  *xattr          = NULL; -        struct iovec             vector[MAX_IOVEC] = {{0}, }; -        gf_dirent_t              entries; -        default_args_cbk_t      *this_args_cbk  = &args_cbk->rsp_list[index]; -        clnt_local_t            *local          = frame->local; -        compound_rsp            *this_rsp       = NULL; -        compound_args_t         *args           = local->compound_args; - -        this_rsp = &rsp->compound_rsp_array.compound_rsp_array_val[index]; -        args_cbk->enum_list[index] = this_rsp->fop_enum; - -        INIT_LIST_HEAD (&entries.list); - -        switch (args_cbk->enum_list[index]) { +    int ret = 0; +    dict_t *xdata = NULL; +    dict_t *xattr = NULL; +    struct iovec vector[MAX_IOVEC] = { +        {0}, +    }; +    gf_dirent_t entries; +    default_args_cbk_t *this_args_cbk = &args_cbk->rsp_list[index]; +    clnt_local_t *local = frame->local; +    compound_rsp *this_rsp = NULL; +    compound_args_t *args = local->compound_args; + +    this_rsp = &rsp->compound_rsp_array.compound_rsp_array_val[index]; +    args_cbk->enum_list[index] = this_rsp->fop_enum; + +    INIT_LIST_HEAD(&entries.list); + +    switch (args_cbk->enum_list[index]) { +        case GF_FOP_STAT: { +            gfs3_stat_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_stat_rsp; + +            client_post_stat(this, tmp_rsp, &this_args_cbk->stat, &xdata); + +            CLIENT_POST_FOP_TYPE(stat, this_rsp, this_args_cbk, +                                 &this_args_cbk->stat, xdata); +            break; +        } +        case GF_FOP_READLINK: { +            gfs3_readlink_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_readlink_rsp; + +            client_post_readlink(this, tmp_rsp, &this_args_cbk->stat, &xdata); +            CLIENT_POST_FOP_TYPE(readlink, this_rsp, this_args_cbk, +                                 tmp_rsp->path, &this_args_cbk->stat, xdata); +            break; +        } +        case GF_FOP_MKNOD: { +            gfs3_mknod_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_mknod_rsp; + +            client_post_mknod(this, tmp_rsp, &this_args_cbk->stat, +                              &this_args_cbk->preparent, +                              &this_args_cbk->postparent, &xdata); +            CLIENT_POST_FOP_TYPE(mknod, this_rsp, this_args_cbk, +                                 local->loc.inode, &this_args_cbk->stat, +                                 &this_args_cbk->preparent, +                                 &this_args_cbk->postparent, xdata); +            break; +        } +        case GF_FOP_MKDIR: { +            gfs3_mkdir_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_mkdir_rsp; + +            client_post_mkdir(this, tmp_rsp, &this_args_cbk->stat, +                              &this_args_cbk->preparent, +                              &this_args_cbk->postparent, &xdata); +            CLIENT_POST_FOP_TYPE(mkdir, this_rsp, this_args_cbk, +                                 local->loc.inode, &this_args_cbk->stat, +                                 &this_args_cbk->preparent, +                                 &this_args_cbk->postparent, xdata); +            break; +        } +        case GF_FOP_UNLINK: { +            gfs3_unlink_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_unlink_rsp; + +            client_post_unlink(this, tmp_rsp, &this_args_cbk->preparent, +                               &this_args_cbk->postparent, &xdata); +            CLIENT_POST_FOP_TYPE(unlink, this_rsp, this_args_cbk, +                                 &this_args_cbk->preparent, +                                 &this_args_cbk->postparent, xdata); +            break; +        } +        case GF_FOP_RMDIR: { +            gfs3_rmdir_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_rmdir_rsp; + +            client_post_rmdir(this, tmp_rsp, &this_args_cbk->preparent, +                              &this_args_cbk->postparent, &xdata); +            CLIENT_POST_FOP_TYPE(rmdir, this_rsp, this_args_cbk, +                                 &this_args_cbk->preparent, +                                 &this_args_cbk->postparent, xdata); +            break; +        } +        case GF_FOP_SYMLINK: { +            gfs3_symlink_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_symlink_rsp; + +            client_post_symlink(this, tmp_rsp, &this_args_cbk->stat, +                                &this_args_cbk->preparent, +                                &this_args_cbk->postparent, &xdata); +            CLIENT_POST_FOP_TYPE( +                symlink, this_rsp, this_args_cbk, NULL, &this_args_cbk->stat, +                &this_args_cbk->preparent, &this_args_cbk->postparent, xdata); +            break; +        } +        case GF_FOP_RENAME: { +            gfs3_rename_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_rename_rsp; + +            client_post_rename( +                this, tmp_rsp, &this_args_cbk->stat, &this_args_cbk->preparent, +                &this_args_cbk->postparent, &this_args_cbk->preparent2, +                &this_args_cbk->postparent2, &xdata); +            CLIENT_POST_FOP_TYPE( +                rename, this_rsp, this_args_cbk, &this_args_cbk->stat, +                &this_args_cbk->preparent, &this_args_cbk->postparent, +                &this_args_cbk->preparent2, &this_args_cbk->postparent2, xdata); +            break; +        } +        case GF_FOP_LINK: { +            gfs3_link_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_link_rsp; + +            client_post_link(this, tmp_rsp, &this_args_cbk->stat, +                             &this_args_cbk->preparent, +                             &this_args_cbk->postparent, &xdata); +            CLIENT_POST_FOP_TYPE( +                link, this_rsp, this_args_cbk, NULL, &this_args_cbk->stat, +                &this_args_cbk->preparent, &this_args_cbk->postparent, xdata); +            break; +        } +        case GF_FOP_TRUNCATE: { +            gfs3_truncate_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_truncate_rsp; + +            client_post_truncate(this, tmp_rsp, &this_args_cbk->prestat, +                                 &this_args_cbk->poststat, &xdata); +            CLIENT_POST_FOP_TYPE(truncate, this_rsp, this_args_cbk, +                                 &this_args_cbk->prestat, +                                 &this_args_cbk->poststat, xdata); +            break; +        } +        case GF_FOP_OPEN: { +            gfs3_open_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_open_rsp; + +            client_post_open(this, tmp_rsp, &xdata); +            CLIENT_POST_FOP_TYPE(open, this_rsp, this_args_cbk, local->fd, +                                 xdata); +            if (-1 != this_args_cbk->op_ret) +                ret = client_add_fd_to_saved_fds(this, local->fd, &local->loc, +                                                 args->req_list[index].flags, +                                                 tmp_rsp->fd, 0); +            break; +        } +        case GF_FOP_READ: { +            gfs3_read_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_read_rsp; + +            client_post_readv(this, tmp_rsp, &this_args_cbk->iobref, +                              req->rsp_iobref, &this_args_cbk->stat, vector, +                              &req->rsp[1], &this_args_cbk->count, &xdata); + +            /* Each read should be given read response that only +             * corresponds to its request. +             * Modify the iovecs accordingly. +             * After each read, store the length of data already read +             * so that the next ones can continue from there. +             */ +            if (local->read_length) { +                vector[0].iov_base += local->read_length; +                local->read_length += tmp_rsp->op_ret; +            } else { +                local->read_length = tmp_rsp->op_ret; +            } + +            args_readv_cbk_store(this_args_cbk, tmp_rsp->op_ret, +                                 gf_error_to_errno(tmp_rsp->op_errno), vector, +                                 this_args_cbk->count, &this_args_cbk->stat, +                                 this_args_cbk->iobref, xdata); + +            if (tmp_rsp->op_ret >= 0) +                if (local->attempt_reopen) +                    client_attempt_reopen(local->fd, this); + +            break; +        } +        case GF_FOP_WRITE: { +            gfs3_write_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_write_rsp; + +            client_post_writev(this, tmp_rsp, &this_args_cbk->prestat, +                               &this_args_cbk->poststat, &xdata); +            args_writev_cbk_store(this_args_cbk, tmp_rsp->op_ret, +                                  gf_error_to_errno(tmp_rsp->op_errno), +                                  &this_args_cbk->prestat, +                                  &this_args_cbk->poststat, xdata); + +            if (tmp_rsp->op_ret == 0) +                if (local->attempt_reopen) +                    client_attempt_reopen(local->fd, this); +            break; +        } +        case GF_FOP_STATFS: { +            gfs3_statfs_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_statfs_rsp; + +            client_post_statfs(this, tmp_rsp, &this_args_cbk->statvfs, &xdata); + +            CLIENT_POST_FOP_TYPE(statfs, this_rsp, this_args_cbk, +                                 &this_args_cbk->statvfs, xdata); +            break; +        } +        case GF_FOP_FLUSH: { +            gf_common_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_flush_rsp; + +            client_post_flush(this, tmp_rsp, &xdata); + +            CLIENT_POST_FOP(flush, this_rsp, this_args_cbk, xdata); +            if (this_args_cbk->op_ret >= 0 && !fd_is_anonymous(local->fd)) { +                /* Delete all saved locks of the owner issuing flush */ +                ret = delete_granted_locks_owner(local->fd, &local->owner); +                gf_msg_trace(this->name, 0, +                             "deleting locks of owner (%s) returned %d", +                             lkowner_utoa(&local->owner), ret); +            } +            break; +        } +        case GF_FOP_FSYNC: { +            gfs3_fsync_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_fsync_rsp; + +            client_post_fsync(this, tmp_rsp, &this_args_cbk->prestat, +                              &this_args_cbk->poststat, &xdata); + +            CLIENT_POST_FOP_TYPE(fsync, this_rsp, this_args_cbk, +                                 &this_args_cbk->prestat, +                                 &this_args_cbk->poststat, xdata); +            break; +        } +        case GF_FOP_SETXATTR: { +            gf_common_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_setxattr_rsp; + +            client_post_setxattr(this, tmp_rsp, &xdata); + +            CLIENT_POST_FOP(setxattr, this_rsp, this_args_cbk, xdata); +            break; +        } +        case GF_FOP_GETXATTR: { +            gfs3_getxattr_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_getxattr_rsp; + +            client_post_getxattr(this, tmp_rsp, &xattr, &xdata); + +            CLIENT_POST_FOP_TYPE(getxattr, this_rsp, this_args_cbk, xattr, +                                 xdata); +            break; +        } +        case GF_FOP_REMOVEXATTR: { +            gf_common_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_removexattr_rsp; + +            client_post_removexattr(this, tmp_rsp, &xdata); + +            CLIENT_POST_FOP(removexattr, this_rsp, this_args_cbk, xdata); +            break; +        } +        case GF_FOP_OPENDIR: { +            gfs3_opendir_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_opendir_rsp; -        case GF_FOP_STAT: -        { -                gfs3_stat_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_stat_rsp; - -                client_post_stat (this, tmp_rsp, &this_args_cbk->stat, &xdata); +            client_post_opendir(this, tmp_rsp, &xdata); -                CLIENT_POST_FOP_TYPE (stat, this_rsp, this_args_cbk, -                                      &this_args_cbk->stat, xdata); -                break; +            CLIENT_POST_FOP_TYPE(opendir, this_rsp, this_args_cbk, local->fd, +                                 xdata); +            if (-1 != this_args_cbk->op_ret) +                ret = client_add_fd_to_saved_fds(this, local->fd, &local->loc, +                                                 args->req_list[index].flags, +                                                 tmp_rsp->fd, 0); +            break;          } -        case GF_FOP_READLINK: -        { -                gfs3_readlink_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_readlink_rsp; +        case GF_FOP_FSYNCDIR: { +            gf_common_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_fsyncdir_rsp; -                client_post_readlink (this, tmp_rsp, &this_args_cbk->stat, -                                      &xdata); -                CLIENT_POST_FOP_TYPE (readlink, this_rsp, this_args_cbk, -                                      tmp_rsp->path, &this_args_cbk->stat, -                                      xdata); -                break; -        } -        case GF_FOP_MKNOD: -        { -                gfs3_mknod_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_mknod_rsp; +            client_post_fsyncdir(this, tmp_rsp, &xdata); -                client_post_mknod (this, tmp_rsp, &this_args_cbk->stat, -                                   &this_args_cbk->preparent, -                                   &this_args_cbk->postparent, &xdata); -                CLIENT_POST_FOP_TYPE (mknod, this_rsp, this_args_cbk, -                                      local->loc.inode, &this_args_cbk->stat, -                                      &this_args_cbk->preparent, -                                      &this_args_cbk->postparent, xdata); -                break; +            CLIENT_POST_FOP(fsyncdir, this_rsp, this_args_cbk, xdata); +            break;          } -        case GF_FOP_MKDIR: -        { -                gfs3_mkdir_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_mkdir_rsp; +        case GF_FOP_ACCESS: { +            gf_common_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_access_rsp; -                client_post_mkdir (this, tmp_rsp, &this_args_cbk->stat, -                                   &this_args_cbk->preparent, -                                   &this_args_cbk->postparent, &xdata); -                CLIENT_POST_FOP_TYPE (mkdir, this_rsp, this_args_cbk, -                                      local->loc.inode, &this_args_cbk->stat, -                                      &this_args_cbk->preparent, -                                      &this_args_cbk->postparent, xdata); -                break; -        } -        case GF_FOP_UNLINK: -        { -                gfs3_unlink_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_unlink_rsp; +            client_post_access(this, tmp_rsp, &xdata); -                client_post_unlink (this, tmp_rsp, &this_args_cbk->preparent, -                                    &this_args_cbk->postparent, &xdata); -                CLIENT_POST_FOP_TYPE (unlink, this_rsp, this_args_cbk, -                                      &this_args_cbk->preparent, -                                      &this_args_cbk->postparent, xdata); -                break; +            CLIENT_POST_FOP(access, this_rsp, this_args_cbk, xdata); +            break;          } -        case GF_FOP_RMDIR: -        { -                gfs3_rmdir_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_rmdir_rsp; +        case GF_FOP_CREATE: { +            gfs3_create_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_create_rsp; -                client_post_rmdir (this, tmp_rsp, &this_args_cbk->preparent, -                                   &this_args_cbk->postparent, &xdata); -                CLIENT_POST_FOP_TYPE (rmdir, this_rsp, this_args_cbk, -                                      &this_args_cbk->preparent, -                                      &this_args_cbk->postparent, xdata); -                break; -        } -        case GF_FOP_SYMLINK: -        { -                gfs3_symlink_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_symlink_rsp; +            client_post_create(this, tmp_rsp, &this_args_cbk->stat, +                               &this_args_cbk->preparent, +                               &this_args_cbk->postparent, local, &xdata); -                client_post_symlink (this, tmp_rsp, &this_args_cbk->stat, -                                     &this_args_cbk->preparent, -                                     &this_args_cbk->postparent, &xdata); -                CLIENT_POST_FOP_TYPE (symlink, this_rsp, this_args_cbk, NULL, -                                      &this_args_cbk->stat, -                                      &this_args_cbk->preparent, -                                      &this_args_cbk->postparent, xdata); -                break; +            CLIENT_POST_FOP_TYPE(create, this_rsp, this_args_cbk, local->fd, +                                 local->loc.inode, &this_args_cbk->stat, +                                 &this_args_cbk->preparent, +                                 &this_args_cbk->postparent, xdata); +            if (-1 != this_args_cbk->op_ret) +                ret = client_add_fd_to_saved_fds(this, local->fd, &local->loc, +                                                 args->req_list[index].flags, +                                                 tmp_rsp->fd, 0); +            break;          } -        case GF_FOP_RENAME: -        { -                gfs3_rename_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_rename_rsp; - -                client_post_rename (this, tmp_rsp, &this_args_cbk->stat, -                                    &this_args_cbk->preparent, -                                    &this_args_cbk->postparent, -                                    &this_args_cbk->preparent2, -                                    &this_args_cbk->postparent2, &xdata); -                CLIENT_POST_FOP_TYPE (rename, this_rsp, this_args_cbk, -                                      &this_args_cbk->stat, -                                      &this_args_cbk->preparent, -                                      &this_args_cbk->postparent, -                                      &this_args_cbk->preparent2, -                                      &this_args_cbk->postparent2, xdata); -                break; -        } -        case GF_FOP_LINK: -        { -                gfs3_link_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_link_rsp; +        case GF_FOP_FTRUNCATE: { +            gfs3_ftruncate_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_ftruncate_rsp; -                client_post_link (this, tmp_rsp, &this_args_cbk->stat, -                                  &this_args_cbk->preparent, -                                  &this_args_cbk->postparent, &xdata); -                CLIENT_POST_FOP_TYPE (link, this_rsp, this_args_cbk, NULL, -                                      &this_args_cbk->stat, -                                      &this_args_cbk->preparent, -                                      &this_args_cbk->postparent, xdata); -                break; +            client_post_ftruncate(this, tmp_rsp, &this_args_cbk->prestat, +                                  &this_args_cbk->poststat, &xdata); +            CLIENT_POST_FOP_TYPE(ftruncate, this_rsp, this_args_cbk, +                                 &this_args_cbk->prestat, +                                 &this_args_cbk->poststat, xdata); +            break;          } -        case GF_FOP_TRUNCATE: -        { -                gfs3_truncate_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_truncate_rsp; +        case GF_FOP_FSTAT: { +            gfs3_fstat_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_fstat_rsp; -                client_post_truncate (this, tmp_rsp, &this_args_cbk->prestat, -                                      &this_args_cbk->poststat, &xdata); -                CLIENT_POST_FOP_TYPE (truncate, this_rsp, this_args_cbk, -                                      &this_args_cbk->prestat, -                                      &this_args_cbk->poststat, xdata); -                break; -        } -        case GF_FOP_OPEN: -        { -                gfs3_open_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_open_rsp; +            client_post_fstat(this, tmp_rsp, &this_args_cbk->stat, &xdata); -                client_post_open (this, tmp_rsp, &xdata); -                CLIENT_POST_FOP_TYPE (open, this_rsp, this_args_cbk, local->fd, -                                      xdata); -                if (-1 != this_args_cbk->op_ret) -                        ret = client_add_fd_to_saved_fds (this, local->fd, -                                                          &local->loc, -                                                          args->req_list[index].flags, -                                                          tmp_rsp->fd, -                                                          0); -                break; +            CLIENT_POST_FOP_TYPE(fstat, this_rsp, this_args_cbk, +                                 &this_args_cbk->stat, xdata); +            break;          } -        case GF_FOP_READ: -        { -                gfs3_read_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_read_rsp; - -                client_post_readv (this, tmp_rsp, &this_args_cbk->iobref, -                                  req->rsp_iobref, &this_args_cbk->stat, -                                  vector, &req->rsp[1], &this_args_cbk->count, -                                  &xdata); - -                /* Each read should be given read response that only -                 * corresponds to its request. -                 * Modify the iovecs accordingly. -                 * After each read, store the length of data already read -                 * so that the next ones can continue from there. -                 */ -                if (local->read_length) { -                        vector[0].iov_base += local->read_length; -                        local->read_length += tmp_rsp->op_ret; -                } else { -                        local->read_length = tmp_rsp->op_ret; -                } +        case GF_FOP_LK: { +            gfs3_lk_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_lk_rsp; -                args_readv_cbk_store (this_args_cbk, tmp_rsp->op_ret, -                                      gf_error_to_errno (tmp_rsp->op_errno), -                                      vector, this_args_cbk->count, -                                      &this_args_cbk->stat, -                                      this_args_cbk->iobref, xdata); +            client_post_lk(this, tmp_rsp, &this_args_cbk->lock, &xdata); -                if (tmp_rsp->op_ret >= 0) -                        if (local->attempt_reopen) -                                client_attempt_reopen (local->fd, this); - -                break; +            CLIENT_POST_FOP_TYPE(lk, this_rsp, this_args_cbk, +                                 &this_args_cbk->lock, xdata); +            break;          } -        case GF_FOP_WRITE: -        { -                gfs3_write_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_write_rsp; - -                client_post_writev (this, tmp_rsp, &this_args_cbk->prestat, -                                   &this_args_cbk->poststat, &xdata); -                args_writev_cbk_store (this_args_cbk, tmp_rsp->op_ret, -                                       gf_error_to_errno (tmp_rsp->op_errno), -                                       &this_args_cbk->prestat, -                                       &this_args_cbk->poststat, xdata); +        case GF_FOP_LOOKUP: { +            gfs3_lookup_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_lookup_rsp; -                if (tmp_rsp->op_ret == 0) -                        if (local->attempt_reopen) -                                client_attempt_reopen (local->fd, this); -                break; +            client_post_lookup(this, tmp_rsp, &this_args_cbk->stat, +                               &this_args_cbk->postparent, &xdata); +            CLIENT_POST_FOP_TYPE(lookup, this_rsp, this_args_cbk, +                                 local->loc.inode, &this_args_cbk->stat, xdata, +                                 &this_args_cbk->postparent); +            break;          } -        case GF_FOP_STATFS: -        { -                gfs3_statfs_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_statfs_rsp; - -                client_post_statfs (this, tmp_rsp, &this_args_cbk->statvfs, -                                    &xdata); - -                CLIENT_POST_FOP_TYPE (statfs, this_rsp, this_args_cbk, -                                      &this_args_cbk->statvfs, xdata); -                break; -         } -        case GF_FOP_FLUSH: -        { -                gf_common_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_flush_rsp; - -                client_post_flush (this, tmp_rsp, &xdata); - -                CLIENT_POST_FOP (flush, this_rsp, this_args_cbk, xdata); -                if (this_args_cbk->op_ret >= 0 && !fd_is_anonymous (local->fd)) { -                        /* Delete all saved locks of the owner issuing flush */ -                        ret = delete_granted_locks_owner (local->fd, &local->owner); -                        gf_msg_trace (this->name, 0, -                                      "deleting locks of owner (%s) returned %d", -                                      lkowner_utoa (&local->owner), ret); -                } -                break; -         } -        case GF_FOP_FSYNC: -        { -                gfs3_fsync_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_fsync_rsp; +        case GF_FOP_READDIR: { +            gfs3_readdir_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_readdir_rsp; -                client_post_fsync (this, tmp_rsp, &this_args_cbk->prestat, -                                   &this_args_cbk->poststat, &xdata); +            client_post_readdir(this, tmp_rsp, &entries, &xdata); -                CLIENT_POST_FOP_TYPE (fsync, this_rsp, this_args_cbk, -                                      &this_args_cbk->prestat, -                                      &this_args_cbk->poststat, xdata); -                break; +            CLIENT_POST_FOP_TYPE(readdir, this_rsp, this_args_cbk, &entries, +                                 xdata); +            break;          } -        case GF_FOP_SETXATTR: -        { -                gf_common_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_setxattr_rsp; +        case GF_FOP_INODELK: { +            gf_common_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_inodelk_rsp; -                client_post_setxattr (this, tmp_rsp, &xdata); +            client_post_inodelk(this, tmp_rsp, &xdata); -                CLIENT_POST_FOP (setxattr, this_rsp, this_args_cbk, xdata); -                break; +            CLIENT_POST_FOP(inodelk, this_rsp, this_args_cbk, xdata); +            break;          } -        case GF_FOP_GETXATTR: -        { -                gfs3_getxattr_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_getxattr_rsp; +        case GF_FOP_FINODELK: { +            gf_common_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_finodelk_rsp; -                client_post_getxattr (this, tmp_rsp, &xattr, &xdata); +            client_post_finodelk(this, tmp_rsp, &xdata); -                CLIENT_POST_FOP_TYPE (getxattr, this_rsp, this_args_cbk, xattr, -                                      xdata); -                break; +            CLIENT_POST_FOP(finodelk, this_rsp, this_args_cbk, xdata); +            if (tmp_rsp->op_ret == 0) +                if (local->attempt_reopen) +                    client_attempt_reopen(local->fd, this); +            break;          } -        case GF_FOP_REMOVEXATTR: -         { -                gf_common_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_removexattr_rsp; +        case GF_FOP_ENTRYLK: { +            gf_common_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_entrylk_rsp; -                client_post_removexattr (this, tmp_rsp, &xdata); +            client_post_entrylk(this, tmp_rsp, &xdata); -                CLIENT_POST_FOP (removexattr, this_rsp, this_args_cbk, xdata); -                break; +            CLIENT_POST_FOP(entrylk, this_rsp, this_args_cbk, xdata); +            break;          } -        case GF_FOP_OPENDIR: -        { -                gfs3_opendir_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_opendir_rsp; +        case GF_FOP_FENTRYLK: { +            gf_common_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_fentrylk_rsp; -                client_post_opendir (this, tmp_rsp, &xdata); +            client_post_fentrylk(this, tmp_rsp, &xdata); -                CLIENT_POST_FOP_TYPE (opendir, this_rsp, this_args_cbk, -                                      local->fd, xdata); -                if (-1 != this_args_cbk->op_ret) -                        ret = client_add_fd_to_saved_fds (this, local->fd, -                                                          &local->loc, -                                                          args->req_list[index].flags, -                                                          tmp_rsp->fd, 0); -                break; +            CLIENT_POST_FOP(fentrylk, this_rsp, this_args_cbk, xdata); +            break;          } -        case GF_FOP_FSYNCDIR: -        { -                gf_common_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_fsyncdir_rsp; +        case GF_FOP_XATTROP: { +            gfs3_xattrop_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_xattrop_rsp; -                client_post_fsyncdir (this, tmp_rsp, &xdata); +            client_post_xattrop(this, tmp_rsp, &xattr, &xdata); -                CLIENT_POST_FOP (fsyncdir, this_rsp, this_args_cbk, xdata); -                break; +            CLIENT_POST_FOP_TYPE(xattrop, this_rsp, this_args_cbk, xattr, +                                 xdata); +            break;          } -        case GF_FOP_ACCESS: -        { -                gf_common_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_access_rsp; - -                client_post_access (this, tmp_rsp, &xdata); +        case GF_FOP_FXATTROP: { +            gfs3_fxattrop_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_fxattrop_rsp; -                CLIENT_POST_FOP (access, this_rsp, this_args_cbk, xdata); -                break; -        } -        case GF_FOP_CREATE: -        { -                gfs3_create_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_create_rsp; - -                client_post_create (this, tmp_rsp, &this_args_cbk->stat, -                                   &this_args_cbk->preparent, -                                   &this_args_cbk->postparent, local, &xdata); - -                CLIENT_POST_FOP_TYPE (create, this_rsp, this_args_cbk, -                                      local->fd, local->loc.inode, -                                      &this_args_cbk->stat, -                                      &this_args_cbk->preparent, -                                      &this_args_cbk->postparent, xdata); -                if (-1 != this_args_cbk->op_ret) -                        ret = client_add_fd_to_saved_fds (this, local->fd, -                                                          &local->loc, -                                                          args->req_list[index].flags, -                                                          tmp_rsp->fd, 0); -                break; -        } -        case GF_FOP_FTRUNCATE: -        { -                gfs3_ftruncate_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_ftruncate_rsp; +            client_post_fxattrop(this, tmp_rsp, &xattr, &xdata); -                client_post_ftruncate (this, tmp_rsp, &this_args_cbk->prestat, -                                      &this_args_cbk->poststat, &xdata); -                CLIENT_POST_FOP_TYPE (ftruncate, this_rsp, this_args_cbk, -                                      &this_args_cbk->prestat, -                                      &this_args_cbk->poststat, xdata); -                break; +            CLIENT_POST_FOP_TYPE(fxattrop, this_rsp, this_args_cbk, xattr, +                                 xdata); +            if (rsp->op_ret == 0) +                if (local->attempt_reopen) +                    client_attempt_reopen(local->fd, this); +            break;          } -        case GF_FOP_FSTAT: -        { -                gfs3_fstat_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_fstat_rsp; +        case GF_FOP_FGETXATTR: { +            gfs3_fgetxattr_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_fgetxattr_rsp; -                client_post_fstat (this, tmp_rsp, &this_args_cbk->stat, &xdata); +            client_post_fgetxattr(this, tmp_rsp, &xattr, &xdata); -                CLIENT_POST_FOP_TYPE (fstat, this_rsp, this_args_cbk, -                                      &this_args_cbk->stat, xdata); -                break; +            CLIENT_POST_FOP_TYPE(fgetxattr, this_rsp, this_args_cbk, xattr, +                                 xdata); +            break;          } -        case GF_FOP_LK: -        { -                gfs3_lk_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_lk_rsp; +        case GF_FOP_FSETXATTR: { +            gf_common_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_fsetxattr_rsp; -                client_post_lk (this, tmp_rsp, &this_args_cbk->lock, &xdata); +            client_post_fsetxattr(this, tmp_rsp, &xdata); -                CLIENT_POST_FOP_TYPE (lk, this_rsp, this_args_cbk, -                                      &this_args_cbk->lock, xdata); -                break; -        } -        case GF_FOP_LOOKUP: -        { -                gfs3_lookup_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_lookup_rsp; - -                client_post_lookup (this, tmp_rsp, &this_args_cbk->stat, -                                    &this_args_cbk->postparent, &xdata); -                CLIENT_POST_FOP_TYPE (lookup, this_rsp, this_args_cbk, -                                      local->loc.inode, &this_args_cbk->stat, -                                      xdata, &this_args_cbk->postparent); -                break; +            CLIENT_POST_FOP(fsetxattr, this_rsp, this_args_cbk, xdata); +            break;          } -        case GF_FOP_READDIR: -        { -                gfs3_readdir_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_readdir_rsp; +        case GF_FOP_RCHECKSUM: { +            gfs3_rchecksum_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_rchecksum_rsp; -                client_post_readdir (this, tmp_rsp, &entries, &xdata); +            client_post_rchecksum(this, tmp_rsp, &xdata); -                CLIENT_POST_FOP_TYPE (readdir, this_rsp, this_args_cbk, -                                      &entries, xdata); -                break; +            break; +            CLIENT_POST_FOP_TYPE( +                rchecksum, this_rsp, this_args_cbk, tmp_rsp->weak_checksum, +                (uint8_t *)tmp_rsp->strong_checksum.strong_checksum_val, xdata); +            break;          } -        case GF_FOP_INODELK: -        { -                gf_common_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_inodelk_rsp; +        case GF_FOP_SETATTR: { +            gfs3_setattr_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_setattr_rsp; -                client_post_inodelk (this, tmp_rsp, &xdata); +            client_post_setattr(this, tmp_rsp, &this_args_cbk->prestat, +                                &this_args_cbk->poststat, &xdata); -                CLIENT_POST_FOP (inodelk, this_rsp, this_args_cbk, xdata); -                break; +            CLIENT_POST_FOP_TYPE(setattr, this_rsp, this_args_cbk, +                                 &this_args_cbk->prestat, +                                 &this_args_cbk->poststat, xdata); +            break;          } -        case GF_FOP_FINODELK: -        { -                gf_common_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_finodelk_rsp; +        case GF_FOP_FSETATTR: { +            gfs3_fsetattr_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_fsetattr_rsp; -                client_post_finodelk (this, tmp_rsp, &xdata); +            client_post_fsetattr(this, tmp_rsp, &this_args_cbk->prestat, +                                 &this_args_cbk->poststat, &xdata); -                CLIENT_POST_FOP (finodelk, this_rsp, this_args_cbk, xdata); -                if (tmp_rsp->op_ret == 0) -                        if (local->attempt_reopen) -                                client_attempt_reopen (local->fd, this); -                break; +            CLIENT_POST_FOP_TYPE(fsetattr, this_rsp, this_args_cbk, +                                 &this_args_cbk->prestat, +                                 &this_args_cbk->poststat, xdata); +            break;          } -        case GF_FOP_ENTRYLK: -        { -                gf_common_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_entrylk_rsp; +        case GF_FOP_READDIRP: { +            gfs3_readdirp_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_readdirp_rsp; -                client_post_entrylk (this, tmp_rsp, &xdata); +            client_post_readdirp(this, tmp_rsp, local->fd, &entries, &xdata); -                CLIENT_POST_FOP (entrylk, this_rsp, this_args_cbk, xdata); -                break; +            CLIENT_POST_FOP_TYPE(readdirp, this_rsp, this_args_cbk, &entries, +                                 xdata); +            break;          } -        case GF_FOP_FENTRYLK: -        { -                gf_common_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_fentrylk_rsp; +        case GF_FOP_FREMOVEXATTR: { +            gf_common_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_fremovexattr_rsp; -                client_post_fentrylk (this, tmp_rsp, &xdata); +            client_post_fremovexattr(this, tmp_rsp, &xdata); -                CLIENT_POST_FOP (fentrylk, this_rsp, this_args_cbk, xdata); -                break; +            CLIENT_POST_FOP(fremovexattr, this_rsp, this_args_cbk, xdata); +            break;          } -        case GF_FOP_XATTROP: -        { -                gfs3_xattrop_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_xattrop_rsp; +        case GF_FOP_FALLOCATE: { +            gfs3_fallocate_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_fallocate_rsp; -                client_post_xattrop (this, tmp_rsp, &xattr, &xdata); +            client_post_fallocate(this, tmp_rsp, &this_args_cbk->prestat, +                                  &this_args_cbk->poststat, &xdata); -                CLIENT_POST_FOP_TYPE (xattrop, this_rsp, this_args_cbk, xattr, -                                      xdata); -                break; +            CLIENT_POST_FOP_TYPE(fallocate, this_rsp, this_args_cbk, +                                 &this_args_cbk->prestat, +                                 &this_args_cbk->poststat, xdata); +            break;          } -        case GF_FOP_FXATTROP: -        { -                gfs3_fxattrop_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_fxattrop_rsp; +        case GF_FOP_DISCARD: { +            gfs3_discard_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_discard_rsp; -                client_post_fxattrop (this, tmp_rsp, &xattr, &xdata); +            client_post_discard(this, tmp_rsp, &this_args_cbk->prestat, +                                &this_args_cbk->poststat, &xdata); -                CLIENT_POST_FOP_TYPE (fxattrop, this_rsp, this_args_cbk, xattr, -                                      xdata); -                if (rsp->op_ret == 0) -                        if (local->attempt_reopen) -                                client_attempt_reopen (local->fd, this); -                break; +            CLIENT_POST_FOP_TYPE(discard, this_rsp, this_args_cbk, +                                 &this_args_cbk->prestat, +                                 &this_args_cbk->poststat, xdata); +            break;          } -        case GF_FOP_FGETXATTR: -        { -                gfs3_fgetxattr_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_fgetxattr_rsp; +        case GF_FOP_ZEROFILL: { +            gfs3_zerofill_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_zerofill_rsp; -                client_post_fgetxattr (this, tmp_rsp, &xattr, &xdata); +            client_post_zerofill(this, tmp_rsp, &this_args_cbk->prestat, +                                 &this_args_cbk->poststat, &xdata); -                CLIENT_POST_FOP_TYPE (fgetxattr, this_rsp, this_args_cbk, xattr, -                                      xdata); -                break; +            CLIENT_POST_FOP_TYPE(zerofill, this_rsp, this_args_cbk, +                                 &this_args_cbk->prestat, +                                 &this_args_cbk->poststat, xdata); +            break;          } -        case GF_FOP_FSETXATTR: -        { -                gf_common_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_fsetxattr_rsp; +        case GF_FOP_IPC: { +            gfs3_ipc_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_ipc_rsp; -                client_post_fsetxattr (this, tmp_rsp, &xdata); +            client_post_ipc(this, tmp_rsp, &xdata); -                CLIENT_POST_FOP (fsetxattr, this_rsp, this_args_cbk, xdata); -                break; +            CLIENT_POST_FOP_TYPE(ipc, this_rsp, this_args_cbk, xdata); +            break;          } -        case GF_FOP_RCHECKSUM: -        { -                gfs3_rchecksum_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_rchecksum_rsp; +        case GF_FOP_SEEK: { +            gfs3_seek_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_seek_rsp; -                client_post_rchecksum (this, tmp_rsp, &xdata); +            client_post_seek(this, tmp_rsp, &xdata); -                break; -                CLIENT_POST_FOP_TYPE (rchecksum, this_rsp, this_args_cbk, -                                      tmp_rsp->weak_checksum, -                                      (uint8_t*)tmp_rsp->strong_checksum.strong_checksum_val, -                                      xdata); -                break; +            CLIENT_POST_FOP_TYPE(seek, this_rsp, this_args_cbk, tmp_rsp->offset, +                                 xdata); +            break;          } -        case GF_FOP_SETATTR: -        { -                gfs3_setattr_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_setattr_rsp; +        case GF_FOP_LEASE: { +            gfs3_lease_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_u.compound_lease_rsp; -                client_post_setattr (this, tmp_rsp, &this_args_cbk->prestat, -                                    &this_args_cbk->poststat, &xdata); +            client_post_lease(this, tmp_rsp, &this_args_cbk->lease, &xdata); -                CLIENT_POST_FOP_TYPE (setattr, this_rsp, this_args_cbk, -                                      &this_args_cbk->prestat, -                                      &this_args_cbk->poststat, xdata); -                break; +            CLIENT_POST_FOP_TYPE(lease, this_rsp, this_args_cbk, +                                 &this_args_cbk->lease, xdata); +            break;          } -        case GF_FOP_FSETATTR: -        { -                gfs3_fsetattr_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_fsetattr_rsp; +        default: +            return -ENOTSUP; +    } + +    if (xdata) +        dict_unref(xdata); +    if (xattr) +        dict_unref(xattr); +    gf_dirent_free(&entries); +    return 0; +} -                client_post_fsetattr (this, tmp_rsp, &this_args_cbk->prestat, -                                      &this_args_cbk->poststat, &xdata); +int +client_handle_fop_requirements( +    xlator_t *this, call_frame_t *frame, gfs3_compound_req *req, +    clnt_local_t *local, struct iobref **req_iobref, struct iobref **rsp_iobref, +    struct iovec *req_vector, struct iovec *rsp_vector, int *req_count, +    int *rsp_count, default_args_t *args, int fop_enum, int index) +{ +    int ret = 0; +    int op_errno = ENOMEM; +    struct iobuf *rsp_iobuf = NULL; +    int64_t remote_fd = -1; +    compound_req *this_req = &req->compound_req_array +                                  .compound_req_array_val[index]; -                CLIENT_POST_FOP_TYPE (fsetattr, this_rsp, this_args_cbk, -                                      &this_args_cbk->prestat, -                                      &this_args_cbk->poststat, xdata); -                break; -        } -        case GF_FOP_READDIRP: -        { -                gfs3_readdirp_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_readdirp_rsp; +    this_req->fop_enum = fop_enum; -                client_post_readdirp (this, tmp_rsp, local->fd, &entries, -                                      &xdata); +    switch (fop_enum) { +        case GF_FOP_STAT: +            CLIENT_PRE_FOP(stat, this, +                           &this_req->compound_req_u.compound_stat_req, +                           op_errno, out, &args->loc, args->xdata); +            break; +        case GF_FOP_READLINK: +            CLIENT_PRE_FOP(readlink, this, +                           &this_req->compound_req_u.compound_readlink_req, +                           op_errno, out, &args->loc, args->size, args->xdata); +            break; +        case GF_FOP_MKNOD: +            CLIENT_PRE_FOP(mknod, this, +                           &this_req->compound_req_u.compound_mknod_req, +                           op_errno, out, &args->loc, args->mode, args->rdev, +                           args->umask, args->xdata); +            loc_copy(&local->loc, &args->loc); +            loc_path(&local->loc, NULL); +            break; +        case GF_FOP_MKDIR: +            CLIENT_PRE_FOP(mkdir, this, +                           &this_req->compound_req_u.compound_mkdir_req, +                           op_errno, out, &args->loc, args->mode, args->umask, +                           args->xdata); +            loc_copy(&local->loc, &args->loc); +            loc_path(&local->loc, NULL); +            break; +        case GF_FOP_UNLINK: +            CLIENT_PRE_FOP(unlink, this, +                           &this_req->compound_req_u.compound_unlink_req, +                           op_errno, out, &args->loc, args->xflag, args->xdata); +            break; +        case GF_FOP_RMDIR: +            CLIENT_PRE_FOP(rmdir, this, +                           &this_req->compound_req_u.compound_rmdir_req, +                           op_errno, out, &args->loc, args->flags, args->xdata); +            break; +        case GF_FOP_SYMLINK: +            CLIENT_PRE_FOP(symlink, this, +                           &this_req->compound_req_u.compound_symlink_req, +                           op_errno, out, &args->loc, args->linkname, +                           args->umask, args->xdata); +            loc_copy(&local->loc, &args->loc); +            loc_path(&local->loc, NULL); +            break; +        case GF_FOP_RENAME: +            CLIENT_PRE_FOP(rename, this, +                           &this_req->compound_req_u.compound_rename_req, +                           op_errno, out, &args->loc, &args->loc2, args->xdata); +            break; +        case GF_FOP_LINK: +            CLIENT_PRE_FOP(link, this, +                           &this_req->compound_req_u.compound_link_req, +                           op_errno, out, &args->loc, &args->loc2, args->xdata); +            break; +        case GF_FOP_TRUNCATE: +            CLIENT_PRE_FOP( +                truncate, this, &this_req->compound_req_u.compound_truncate_req, +                op_errno, out, &args->loc, args->offset, args->xdata); +            break; +        case GF_FOP_OPEN: +            CLIENT_PRE_FOP( +                open, this, &this_req->compound_req_u.compound_open_req, +                op_errno, out, &args->loc, args->fd, args->flags, args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            break; +        case GF_FOP_READ: +            op_errno = client_pre_readv( +                this, &this_req->compound_req_u.compound_read_req, args->fd, +                args->size, args->offset, args->flags, args->xdata); -                CLIENT_POST_FOP_TYPE (readdirp, this_rsp, this_args_cbk, -                                      &entries, xdata); -                break; -        } -        case GF_FOP_FREMOVEXATTR: -        { -                gf_common_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_fremovexattr_rsp; +            if (op_errno) { +                op_errno = -op_errno; +                goto out; +            } +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            local->attempt_reopen = client_is_reopen_needed(args->fd, this, +                                                            remote_fd); +            rsp_iobuf = iobuf_get2(this->ctx->iobuf_pool, args->size); +            if (rsp_iobuf == NULL) { +                op_errno = ENOMEM; +                goto out; +            } -                client_post_fremovexattr (this, tmp_rsp, &xdata); +            if (!*rsp_iobref) { +                *rsp_iobref = iobref_new(); +                if (*rsp_iobref == NULL) { +                    op_errno = ENOMEM; +                    goto out; +                } +            } -                CLIENT_POST_FOP (fremovexattr, this_rsp, this_args_cbk, xdata); -                break; -        } -        case GF_FOP_FALLOCATE: -        { -                gfs3_fallocate_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_fallocate_rsp; +            if (*rsp_count + 1 >= MAX_IOVEC) { +                op_errno = ENOMEM; +                goto out; +            } +            rsp_vector[*rsp_count].iov_base = iobuf_ptr(rsp_iobuf); +            rsp_vector[*rsp_count].iov_len = iobuf_pagesize(rsp_iobuf); +            iobref_add(*rsp_iobref, rsp_iobuf); +            iobuf_unref(rsp_iobuf); +            rsp_iobuf = NULL; +            if (args->size > rsp_vector[*rsp_count].iov_len) { +                gf_msg(this->name, GF_LOG_WARNING, ENOMEM, PC_MSG_NO_MEMORY, +                       "read-size (%lu) is bigger than iobuf size " +                       "(%lu)", +                       (unsigned long)args->size, +                       (unsigned long)rsp_vector[*rsp_count].iov_len); +                op_errno = EINVAL; +                goto out; +            } +            *rsp_count += 1; -                client_post_fallocate (this, tmp_rsp, &this_args_cbk->prestat, -                                       &this_args_cbk->poststat, &xdata); +            break; +        case GF_FOP_WRITE: +            op_errno = client_pre_writev( +                this, &this_req->compound_req_u.compound_write_req, args->fd, +                iov_length(args->vector, args->count), args->offset, +                args->flags, &args->xdata); -                CLIENT_POST_FOP_TYPE (fallocate, this_rsp, this_args_cbk, -                                      &this_args_cbk->prestat, -                                      &this_args_cbk->poststat, xdata); -                break; -        } +            if (op_errno) { +                op_errno = -op_errno; +                goto out; +            } +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            local->attempt_reopen = client_is_reopen_needed(args->fd, this, +                                                            remote_fd); + +            if (*req_count + args->count >= MAX_IOVEC) { +                op_errno = ENOMEM; +                goto out; +            } +            memcpy(&req_vector[*req_count], args->vector, +                   (args->count * sizeof(req_vector[0]))); +            *req_count += args->count; + +            if (!*req_iobref) +                *req_iobref = args->iobref; +            else if (iobref_merge(*req_iobref, args->iobref)) +                goto out; +            break; +        case GF_FOP_STATFS: +            CLIENT_PRE_FOP(statfs, this, +                           &this_req->compound_req_u.compound_statfs_req, +                           op_errno, out, &args->loc, args->xdata); +            break; +        case GF_FOP_FLUSH: +            CLIENT_PRE_FOP(flush, this, +                           &this_req->compound_req_u.compound_flush_req, +                           op_errno, out, args->fd, args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            local->owner = frame->root->lk_owner; +            break; +        case GF_FOP_FSYNC: +            CLIENT_PRE_FOP( +                fsync, this, &this_req->compound_req_u.compound_fsync_req, +                op_errno, out, args->fd, args->datasync, args->xdata); +            break; +        case GF_FOP_SETXATTR: +            CLIENT_PRE_FOP(setxattr, this, +                           &this_req->compound_req_u.compound_setxattr_req, +                           op_errno, out, &args->loc, args->xattr, args->flags, +                           args->xdata); +            break; +        case GF_FOP_GETXATTR: +            CLIENT_PRE_FOP(getxattr, this, +                           &this_req->compound_req_u.compound_getxattr_req, +                           op_errno, out, &args->loc, args->name, args->xdata); +            loc_copy(&local->loc, &args->loc); +            loc_path(&local->loc, NULL); +            break; +        case GF_FOP_REMOVEXATTR: +            CLIENT_PRE_FOP(removexattr, this, +                           &this_req->compound_req_u.compound_removexattr_req, +                           op_errno, out, &args->loc, args->name, args->xdata); +            break; +        case GF_FOP_OPENDIR: +            CLIENT_PRE_FOP(opendir, this, +                           &this_req->compound_req_u.compound_opendir_req, +                           op_errno, out, &args->loc, args->fd, args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            loc_copy(&local->loc, &args->loc); +            loc_path(&local->loc, NULL); +            break; +        case GF_FOP_FSYNCDIR: +            CLIENT_PRE_FOP( +                fsyncdir, this, &this_req->compound_req_u.compound_fsyncdir_req, +                op_errno, out, args->fd, args->datasync, args->xdata); +            break; +        case GF_FOP_ACCESS: +            CLIENT_PRE_FOP(access, this, +                           &this_req->compound_req_u.compound_access_req, +                           op_errno, out, &args->loc, args->mask, args->xdata); +            break; +        case GF_FOP_CREATE: +            CLIENT_PRE_FOP(create, this, +                           &this_req->compound_req_u.compound_create_req, +                           op_errno, out, &args->loc, args->fd, args->mode, +                           args->flags, args->umask, args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); + +            loc_copy(&local->loc, &args->loc); +            loc_path(&local->loc, NULL); +            break; +        case GF_FOP_FTRUNCATE: +            CLIENT_PRE_FOP(ftruncate, this, +                           &this_req->compound_req_u.compound_ftruncate_req, +                           op_errno, out, args->fd, args->offset, args->xdata); +            break; +        case GF_FOP_FSTAT: +            CLIENT_PRE_FOP(fstat, this, +                           &this_req->compound_req_u.compound_fstat_req, +                           op_errno, out, args->fd, args->xdata); +            break; +        case GF_FOP_LK: +            CLIENT_PRE_FOP(lk, this, &this_req->compound_req_u.compound_lk_req, +                           op_errno, out, args->cmd, &args->lock, args->fd, +                           args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            local->owner = frame->root->lk_owner; +            break; +        case GF_FOP_LOOKUP: +            CLIENT_PRE_FOP(lookup, this, +                           &this_req->compound_req_u.compound_lookup_req, +                           op_errno, out, &args->loc, args->xdata); +            loc_copy(&local->loc, &args->loc); +            loc_path(&local->loc, NULL); +            break; +        case GF_FOP_READDIR: +            CLIENT_PRE_FOP( +                readdir, this, &this_req->compound_req_u.compound_readdir_req, +                op_errno, out, args->fd, args->size, args->offset, args->xdata); +            break; +        case GF_FOP_INODELK: +            CLIENT_PRE_FOP(inodelk, this, +                           &this_req->compound_req_u.compound_inodelk_req, +                           op_errno, out, &args->loc, args->cmd, &args->lock, +                           args->volume, args->xdata); +            break; +        case GF_FOP_FINODELK: +            CLIENT_PRE_FOP(finodelk, this, +                           &this_req->compound_req_u.compound_finodelk_req, +                           op_errno, out, args->fd, args->cmd, &args->lock, +                           args->volume, args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            local->attempt_reopen = client_is_reopen_needed(args->fd, this, +                                                            remote_fd); +            break; +        case GF_FOP_ENTRYLK: +            CLIENT_PRE_FOP( +                entrylk, this, &this_req->compound_req_u.compound_entrylk_req, +                op_errno, out, &args->loc, args->entrylkcmd, args->entrylktype, +                args->volume, args->name, args->xdata); +            break; +        case GF_FOP_FENTRYLK: +            CLIENT_PRE_FOP( +                fentrylk, this, &this_req->compound_req_u.compound_fentrylk_req, +                op_errno, out, args->fd, args->entrylkcmd, args->entrylktype, +                args->volume, args->name, args->xdata); +            break; +        case GF_FOP_XATTROP: +            CLIENT_PRE_FOP(xattrop, this, +                           &this_req->compound_req_u.compound_xattrop_req, +                           op_errno, out, &args->loc, args->xattr, args->optype, +                           args->xdata); +            break; +        case GF_FOP_FXATTROP: +            CLIENT_PRE_FOP(fxattrop, this, +                           &this_req->compound_req_u.compound_fxattrop_req, +                           op_errno, out, args->fd, args->xattr, args->optype, +                           args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            local->attempt_reopen = client_is_reopen_needed(args->fd, this, +                                                            remote_fd); +            break; +        case GF_FOP_FGETXATTR: +            CLIENT_PRE_FOP(fgetxattr, this, +                           &this_req->compound_req_u.compound_fgetxattr_req, +                           op_errno, out, args->fd, args->name, args->xdata); +            break; +        case GF_FOP_FSETXATTR: +            CLIENT_PRE_FOP(fsetxattr, this, +                           &this_req->compound_req_u.compound_fsetxattr_req, +                           op_errno, out, args->fd, args->flags, args->xattr, +                           args->xdata); +            break; +        case GF_FOP_RCHECKSUM: +            CLIENT_PRE_FOP(rchecksum, this, +                           &this_req->compound_req_u.compound_rchecksum_req, +                           op_errno, out, args->fd, args->size, args->offset, +                           args->xdata); +            break; +        case GF_FOP_SETATTR: +            CLIENT_PRE_FOP(setattr, this, +                           &this_req->compound_req_u.compound_setattr_req, +                           op_errno, out, &args->loc, args->valid, &args->stat, +                           args->xdata); +            break; +        case GF_FOP_FSETATTR: +            CLIENT_PRE_FOP( +                fsetattr, this, &this_req->compound_req_u.compound_fsetattr_req, +                op_errno, out, args->fd, args->valid, &args->stat, args->xdata); +            break; +        case GF_FOP_READDIRP: +            CLIENT_PRE_FOP( +                readdirp, this, &this_req->compound_req_u.compound_readdirp_req, +                op_errno, out, args->fd, args->size, args->offset, args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            break; +        case GF_FOP_FREMOVEXATTR: +            CLIENT_PRE_FOP(fremovexattr, this, +                           &this_req->compound_req_u.compound_fremovexattr_req, +                           op_errno, out, args->fd, args->name, args->xdata); +            break; +        case GF_FOP_FALLOCATE: +            CLIENT_PRE_FOP(fallocate, this, +                           &this_req->compound_req_u.compound_fallocate_req, +                           op_errno, out, args->fd, args->flags, args->offset, +                           args->size, args->xdata); +            break;          case GF_FOP_DISCARD: -        { -                gfs3_discard_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_discard_rsp; - -                client_post_discard (this, tmp_rsp, &this_args_cbk->prestat, -                                     &this_args_cbk->poststat, &xdata); - -                CLIENT_POST_FOP_TYPE (discard, this_rsp, this_args_cbk, -                                      &this_args_cbk->prestat, -                                      &this_args_cbk->poststat, xdata); -                break; -        } +            CLIENT_PRE_FOP( +                discard, this, &this_req->compound_req_u.compound_discard_req, +                op_errno, out, args->fd, args->offset, args->size, args->xdata); +            break;          case GF_FOP_ZEROFILL: -        { -                gfs3_zerofill_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_zerofill_rsp; - -                client_post_zerofill (this, tmp_rsp, &this_args_cbk->prestat, -                                      &this_args_cbk->poststat, &xdata); - -                CLIENT_POST_FOP_TYPE (zerofill, this_rsp, this_args_cbk, -                                      &this_args_cbk->prestat, -                                      &this_args_cbk->poststat, xdata); -                break; -        } +            CLIENT_PRE_FOP( +                zerofill, this, &this_req->compound_req_u.compound_zerofill_req, +                op_errno, out, args->fd, args->offset, args->size, args->xdata); +            break;          case GF_FOP_IPC: -        { -                gfs3_ipc_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_ipc_rsp; - -                client_post_ipc (this, tmp_rsp, &xdata); - -                CLIENT_POST_FOP_TYPE (ipc, this_rsp, this_args_cbk, xdata); -                break; -        } +            CLIENT_PRE_FOP(ipc, this, +                           &this_req->compound_req_u.compound_ipc_req, op_errno, +                           out, args->cmd, args->xdata); +            break;          case GF_FOP_SEEK: -        { -                gfs3_seek_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_seek_rsp; - -                client_post_seek (this, tmp_rsp, &xdata); - -                CLIENT_POST_FOP_TYPE (seek, this_rsp, this_args_cbk, -                                      tmp_rsp->offset, xdata); -                break; -        } +            CLIENT_PRE_FOP( +                seek, this, &this_req->compound_req_u.compound_seek_req, +                op_errno, out, args->fd, args->offset, args->what, args->xdata); +            break;          case GF_FOP_LEASE: -        { -                gfs3_lease_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_u.compound_lease_rsp; - -                client_post_lease (this, tmp_rsp, &this_args_cbk->lease, -                                   &xdata); - -                CLIENT_POST_FOP_TYPE (lease, this_rsp, this_args_cbk, -                                      &this_args_cbk->lease, xdata); -                break; -        } +            CLIENT_PRE_FOP( +                lease, this, &this_req->compound_req_u.compound_lease_req, +                op_errno, out, &args->loc, &args->lease, args->xdata); +            break;          default: -                return -ENOTSUP; -        } - -        if (xdata) -                dict_unref (xdata); -        if (xattr) -                dict_unref (xattr); -        gf_dirent_free (&entries); -        return 0; +            return ENOTSUP; +    } +    return 0; +out: +    return op_errno;  } -int -client_handle_fop_requirements (xlator_t *this, call_frame_t *frame, -                                gfs3_compound_req *req, -                                clnt_local_t *local, -                                struct iobref **req_iobref, -                                struct iobref **rsp_iobref, -                                struct iovec *req_vector, -                                struct iovec *rsp_vector, int *req_count, -                                int *rsp_count, default_args_t *args, -                                int fop_enum, int index) +void +compound_request_cleanup(gfs3_compound_req *req)  { -        int             ret           = 0; -        int             op_errno      = ENOMEM; -        struct iobuf   *rsp_iobuf     = NULL; -        int64_t         remote_fd     = -1; -        compound_req    *this_req     = &req->compound_req_array.compound_req_array_val[index]; +    int i = 0; +    int length = req->compound_req_array.compound_req_array_len; +    compound_req *curr_req = NULL; -        this_req->fop_enum = fop_enum; +    if (!req->compound_req_array.compound_req_array_val) +        return; -        switch (fop_enum) { -        case GF_FOP_STAT: -                CLIENT_PRE_FOP (stat, this, -                                &this_req->compound_req_u.compound_stat_req, -                                op_errno, out, -                                &args->loc, args->xdata); +    for (i = 0; i < length; i++) { +        curr_req = &req->compound_req_array.compound_req_array_val[i]; + +        switch (curr_req->fop_enum) { +            case GF_FOP_STAT: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, stat);                  break; -        case GF_FOP_READLINK: -                CLIENT_PRE_FOP (readlink, this, -                                &this_req->compound_req_u.compound_readlink_req, -                                op_errno, out, -                                &args->loc, args->size, args->xdata); +            case GF_FOP_READLINK: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, readlink);                  break; -        case GF_FOP_MKNOD: -                CLIENT_PRE_FOP (mknod, this, -                                &this_req->compound_req_u.compound_mknod_req, -                                op_errno, out, -                                &args->loc, args->mode, args->rdev, -                                args->umask, args->xdata); -                loc_copy (&local->loc, &args->loc); -                loc_path (&local->loc, NULL); +            case GF_FOP_MKNOD: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, mknod);                  break; -        case GF_FOP_MKDIR: -                CLIENT_PRE_FOP (mkdir, this, -                                &this_req->compound_req_u.compound_mkdir_req, -                                op_errno, out, -                                &args->loc, args->mode, -                                args->umask, args->xdata); -                loc_copy (&local->loc, &args->loc); -                loc_path (&local->loc, NULL); +            case GF_FOP_MKDIR: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, mkdir);                  break; -        case GF_FOP_UNLINK: -                CLIENT_PRE_FOP (unlink, this, -                                &this_req->compound_req_u.compound_unlink_req, -                                op_errno, out, -                                &args->loc, args->xflag, args->xdata); +            case GF_FOP_UNLINK: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, unlink);                  break; -        case GF_FOP_RMDIR: -                CLIENT_PRE_FOP (rmdir, this, -                                &this_req->compound_req_u.compound_rmdir_req, -                                op_errno, out, -                                &args->loc, args->flags, args->xdata); +            case GF_FOP_RMDIR: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, rmdir);                  break; -        case GF_FOP_SYMLINK: -                CLIENT_PRE_FOP (symlink, this, -                                &this_req->compound_req_u.compound_symlink_req, -                                op_errno, out, -                                &args->loc, args->linkname, args->umask, -                                args->xdata); -                loc_copy (&local->loc, &args->loc); -                loc_path (&local->loc, NULL); +            case GF_FOP_SYMLINK: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, symlink);                  break; -        case GF_FOP_RENAME: -                CLIENT_PRE_FOP (rename, this, -                                &this_req->compound_req_u.compound_rename_req, -                                op_errno, out, -                                &args->loc, &args->loc2, args->xdata); +            case GF_FOP_RENAME: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, rename);                  break; -        case GF_FOP_LINK: -                CLIENT_PRE_FOP (link, this, -                                &this_req->compound_req_u.compound_link_req, -                                op_errno, out, -                                &args->loc, &args->loc2, args->xdata); +            case GF_FOP_LINK: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, link);                  break; -        case GF_FOP_TRUNCATE: -                CLIENT_PRE_FOP (truncate, this, -                                &this_req->compound_req_u.compound_truncate_req, -                                op_errno, out, -                                &args->loc, args->offset, args->xdata); +            case GF_FOP_TRUNCATE: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, truncate);                  break; -        case GF_FOP_OPEN: -                CLIENT_PRE_FOP (open, this, -                                &this_req->compound_req_u.compound_open_req, -                                op_errno, out, -                                &args->loc, args->fd, args->flags, -                                args->xdata); -                if (!local->fd) -                        local->fd = fd_ref (args->fd); +            case GF_FOP_OPEN: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, open);                  break; -        case GF_FOP_READ: -                op_errno = client_pre_readv (this, -                                  &this_req->compound_req_u.compound_read_req, -                                  args->fd, args->size, args->offset, -                                  args->flags, args->xdata); - -                if (op_errno) { -                        op_errno = -op_errno; -                        goto out; -                } -                if (!local->fd) -                        local->fd = fd_ref (args->fd); -                local->attempt_reopen = client_is_reopen_needed -                                        (args->fd, this, remote_fd); -                rsp_iobuf = iobuf_get2 (this->ctx->iobuf_pool, args->size); -                if (rsp_iobuf == NULL) { -                        op_errno = ENOMEM; -                        goto out; -                } - -                if (!*rsp_iobref) { -                        *rsp_iobref = iobref_new (); -                        if (*rsp_iobref == NULL) { -                                op_errno = ENOMEM; -                                goto out; -                        } -                } - -                if (*rsp_count + 1 >= MAX_IOVEC) { -                        op_errno = ENOMEM; -                        goto out; -                } -                rsp_vector[*rsp_count].iov_base = iobuf_ptr (rsp_iobuf); -                rsp_vector[*rsp_count].iov_len = iobuf_pagesize (rsp_iobuf); -                iobref_add (*rsp_iobref, rsp_iobuf); -                iobuf_unref (rsp_iobuf); -                rsp_iobuf = NULL; -                if (args->size > rsp_vector[*rsp_count].iov_len) { -                        gf_msg (this->name, GF_LOG_WARNING, ENOMEM, -                                PC_MSG_NO_MEMORY, -                                "read-size (%lu) is bigger than iobuf size " -                                "(%lu)", -                                (unsigned long)args->size, -                                (unsigned long)rsp_vector[*rsp_count].iov_len); -                        op_errno = EINVAL; -                        goto out; -                } -                *rsp_count += 1; - +            case GF_FOP_READ: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, read);                  break; -        case GF_FOP_WRITE: -                op_errno = client_pre_writev (this, -                           &this_req->compound_req_u.compound_write_req, -                           args->fd, iov_length (args->vector, args->count), -                           args->offset, args->flags, &args->xdata); - -                if (op_errno) { -                        op_errno = -op_errno; -                        goto out; -                } -                if (!local->fd) -                        local->fd = fd_ref (args->fd); -                local->attempt_reopen = client_is_reopen_needed -                                        (args->fd, this, remote_fd); - -                if (*req_count + args->count >= MAX_IOVEC) { -                        op_errno = ENOMEM; -                        goto out; -                } -                memcpy (&req_vector[*req_count], args->vector, -                        (args->count * sizeof(req_vector[0]))); -                *req_count += args->count; - -                if (!*req_iobref) -                        *req_iobref = args->iobref; -                else -                        if (iobref_merge (*req_iobref, args->iobref)) -                                goto out; +            case GF_FOP_WRITE: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, write);                  break; -        case GF_FOP_STATFS: -                CLIENT_PRE_FOP (statfs, this, -                                &this_req->compound_req_u.compound_statfs_req, -                                op_errno, out, -                                &args->loc, args->xdata); +            case GF_FOP_STATFS: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, statfs);                  break; -        case GF_FOP_FLUSH: -                CLIENT_PRE_FOP (flush, this, -                                &this_req->compound_req_u.compound_flush_req, -                                op_errno, out, -                                args->fd, args->xdata); -                if (!local->fd) -                        local->fd = fd_ref (args->fd); -                local->owner = frame->root->lk_owner; +            case GF_FOP_FLUSH: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, flush);                  break; -        case GF_FOP_FSYNC: -                CLIENT_PRE_FOP (fsync, this, -                                &this_req->compound_req_u.compound_fsync_req, -                                op_errno, out, -                                args->fd, args->datasync, args->xdata); +            case GF_FOP_FSYNC: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, fsync);                  break; -        case GF_FOP_SETXATTR: -                CLIENT_PRE_FOP (setxattr, this, -                                &this_req->compound_req_u.compound_setxattr_req, -                                op_errno, out, -                                &args->loc, args->xattr, args->flags, -                                args->xdata); +            case GF_FOP_SETXATTR: { +                gfs3_setxattr_req *args = &CPD_REQ_FIELD(curr_req, setxattr); +                GF_FREE(args->dict.dict_val); +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, setxattr);                  break; -        case GF_FOP_GETXATTR: -                CLIENT_PRE_FOP (getxattr, this, -                                &this_req->compound_req_u.compound_getxattr_req, -                                op_errno, out, -                                &args->loc, args->name, args->xdata); -                loc_copy (&local->loc, &args->loc); -                loc_path (&local->loc, NULL); +            } +            case GF_FOP_GETXATTR: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, getxattr);                  break; -        case GF_FOP_REMOVEXATTR: -                CLIENT_PRE_FOP (removexattr, this, -                                &this_req->compound_req_u.compound_removexattr_req, -                                op_errno, out, -                                &args->loc, args->name, args->xdata); +            case GF_FOP_REMOVEXATTR: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, removexattr);                  break; -        case GF_FOP_OPENDIR: -                CLIENT_PRE_FOP (opendir, this, -                                &this_req->compound_req_u.compound_opendir_req, -                                op_errno, out, -                                &args->loc, args->fd, args->xdata); -                if (!local->fd) -                        local->fd = fd_ref (args->fd); -                loc_copy (&local->loc, &args->loc); -                loc_path (&local->loc, NULL); +            case GF_FOP_OPENDIR: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, opendir);                  break; -        case GF_FOP_FSYNCDIR: -                CLIENT_PRE_FOP (fsyncdir, this, -                                &this_req->compound_req_u.compound_fsyncdir_req, -                                op_errno, out, -                                args->fd, args->datasync, args->xdata); +            case GF_FOP_FSYNCDIR: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, fsyncdir);                  break; -        case GF_FOP_ACCESS: -                CLIENT_PRE_FOP (access, this, -                                &this_req->compound_req_u.compound_access_req, -                                op_errno, out, -                                &args->loc, args->mask, args->xdata); +            case GF_FOP_ACCESS: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, access);                  break; -        case GF_FOP_CREATE: -                CLIENT_PRE_FOP (create, this, -                                &this_req->compound_req_u.compound_create_req, -                                op_errno, out, -                                &args->loc, args->fd, args->mode, args->flags, -                                args->umask, args->xdata); -                if (!local->fd) -                        local->fd = fd_ref (args->fd); - -                loc_copy (&local->loc, &args->loc); -                loc_path (&local->loc, NULL); +            case GF_FOP_CREATE: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, create);                  break; -        case GF_FOP_FTRUNCATE: -                CLIENT_PRE_FOP (ftruncate, this, -                                &this_req->compound_req_u.compound_ftruncate_req, -                                op_errno, out, -                                args->fd, args->offset, args->xdata); +            case GF_FOP_FTRUNCATE: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, ftruncate);                  break; -        case GF_FOP_FSTAT: -                CLIENT_PRE_FOP (fstat, this, -                                &this_req->compound_req_u.compound_fstat_req, -                                op_errno, out, -                                args->fd, args->xdata); +            case GF_FOP_FSTAT: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, fstat);                  break; -        case GF_FOP_LK: -                CLIENT_PRE_FOP (lk, this, -                                &this_req->compound_req_u.compound_lk_req, -                                op_errno, out, -                                args->cmd, &args->lock, args->fd, args->xdata); -                if (!local->fd) -                        local->fd    = fd_ref (args->fd); -                local->owner = frame->root->lk_owner; +            case GF_FOP_LK: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, lk);                  break; -        case GF_FOP_LOOKUP: -                CLIENT_PRE_FOP (lookup, this, -                                &this_req->compound_req_u.compound_lookup_req, -                                op_errno, out, -                                &args->loc, args->xdata); -                loc_copy (&local->loc, &args->loc); -                loc_path (&local->loc, NULL); +            case GF_FOP_LOOKUP: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, lookup);                  break; -        case GF_FOP_READDIR: -                CLIENT_PRE_FOP (readdir, this, -                                &this_req->compound_req_u.compound_readdir_req, -                                op_errno, out, -                                args->fd, args->size, args->offset, -                                args->xdata); +            case GF_FOP_READDIR: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, readdir);                  break; -        case GF_FOP_INODELK: -                CLIENT_PRE_FOP (inodelk, this, -                                &this_req->compound_req_u.compound_inodelk_req, -                                op_errno, out, -                                &args->loc, args->cmd, &args->lock, -                                args->volume, args->xdata); +            case GF_FOP_INODELK: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, inodelk);                  break; -        case GF_FOP_FINODELK: -                CLIENT_PRE_FOP (finodelk, this, -                                &this_req->compound_req_u.compound_finodelk_req, -                                op_errno, out, -                                args->fd, args->cmd, &args->lock, -                                args->volume, args->xdata); -                if (!local->fd) -                        local->fd = fd_ref (args->fd); -                local->attempt_reopen = client_is_reopen_needed -                                        (args->fd, this, remote_fd); +            case GF_FOP_FINODELK: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, finodelk);                  break; -        case GF_FOP_ENTRYLK: -                CLIENT_PRE_FOP (entrylk, this, -                                &this_req->compound_req_u.compound_entrylk_req, -                                op_errno, out, -                                &args->loc, args->entrylkcmd, -                                args->entrylktype, args->volume, -                                args->name, args->xdata); +            case GF_FOP_ENTRYLK: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, entrylk);                  break; -        case GF_FOP_FENTRYLK: -                CLIENT_PRE_FOP (fentrylk, this, -                                &this_req->compound_req_u.compound_fentrylk_req, -                                op_errno, out, -                                args->fd, args->entrylkcmd, -                                args->entrylktype, args->volume, -                                args->name, args->xdata); +            case GF_FOP_FENTRYLK: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, fentrylk);                  break; -        case GF_FOP_XATTROP: -                CLIENT_PRE_FOP (xattrop, this, -                                &this_req->compound_req_u.compound_xattrop_req, -                                op_errno, out, -                                &args->loc, args->xattr, args->optype, -                                args->xdata); +            case GF_FOP_XATTROP: { +                gfs3_xattrop_req *args = &CPD_REQ_FIELD(curr_req, xattrop); +                GF_FREE(args->dict.dict_val); +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, xattrop);                  break; -        case GF_FOP_FXATTROP: -                CLIENT_PRE_FOP (fxattrop, this, -                                &this_req->compound_req_u.compound_fxattrop_req, -                                op_errno, out, -                                args->fd, args->xattr, args->optype, -                                args->xdata); -                if (!local->fd) -                        local->fd = fd_ref (args->fd); -                local->attempt_reopen = client_is_reopen_needed -                                        (args->fd, this, remote_fd); +            } +            case GF_FOP_FXATTROP: { +                gfs3_fxattrop_req *args = &CPD_REQ_FIELD(curr_req, fxattrop); +                GF_FREE(args->dict.dict_val); +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, fxattrop);                  break; -        case GF_FOP_FGETXATTR: -                CLIENT_PRE_FOP (fgetxattr, this, -                                &this_req->compound_req_u.compound_fgetxattr_req, -                                op_errno, out, -                                args->fd, args->name, args->xdata); +            } +            case GF_FOP_FGETXATTR: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, fgetxattr);                  break; -        case GF_FOP_FSETXATTR: -                CLIENT_PRE_FOP (fsetxattr, this, -                                &this_req->compound_req_u.compound_fsetxattr_req, -                                op_errno, out, -                                args->fd, args->flags, args->xattr, -                                args->xdata); +            case GF_FOP_FSETXATTR: { +                gfs3_fsetxattr_req *args = &CPD_REQ_FIELD(curr_req, fsetxattr); +                GF_FREE(args->dict.dict_val); +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, fsetxattr);                  break; -        case GF_FOP_RCHECKSUM: -                CLIENT_PRE_FOP (rchecksum, this, -                                &this_req->compound_req_u.compound_rchecksum_req, -                                op_errno, out, -                                args->fd, args->size, args->offset, -                                args->xdata); +            } +            case GF_FOP_RCHECKSUM: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, rchecksum);                  break; -        case GF_FOP_SETATTR: -                CLIENT_PRE_FOP (setattr, this, -                                &this_req->compound_req_u.compound_setattr_req, -                                op_errno, out, -                                &args->loc, args->valid, &args->stat, -                                args->xdata); +            case GF_FOP_SETATTR: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, setattr);                  break; -        case GF_FOP_FSETATTR: -                CLIENT_PRE_FOP (fsetattr, this, -                                &this_req->compound_req_u.compound_fsetattr_req, -                                op_errno, out, -                                args->fd, args->valid, &args->stat, -                                args->xdata); +            case GF_FOP_FSETATTR: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, fsetattr);                  break; -        case GF_FOP_READDIRP: -                CLIENT_PRE_FOP (readdirp, this, -                                &this_req->compound_req_u.compound_readdirp_req, -                                op_errno, out, -                                args->fd, args->size, args->offset, -                                args->xdata); -                if (!local->fd) -                        local->fd = fd_ref (args->fd); +            case GF_FOP_READDIRP: { +                gfs3_readdirp_req *args = &CPD_REQ_FIELD(curr_req, readdirp); +                GF_FREE(args->dict.dict_val);                  break; -        case GF_FOP_FREMOVEXATTR: -                CLIENT_PRE_FOP (fremovexattr, this, -                                &this_req->compound_req_u.compound_fremovexattr_req, -                                op_errno, out, -                                args->fd, args->name, args->xdata); -                break; -	case GF_FOP_FALLOCATE: -                CLIENT_PRE_FOP (fallocate, this, -                                &this_req->compound_req_u.compound_fallocate_req, -                                op_errno, out, -                                args->fd, args->flags, args->offset, -                                args->size, args->xdata); -                break; -	case GF_FOP_DISCARD: -                CLIENT_PRE_FOP (discard, this, -                                &this_req->compound_req_u.compound_discard_req, -                                op_errno, out, -                                args->fd, args->offset, args->size, -                                args->xdata); +            } +            case GF_FOP_FREMOVEXATTR: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, fremovexattr);                  break; -        case GF_FOP_ZEROFILL: -                CLIENT_PRE_FOP (zerofill, this, -                                &this_req->compound_req_u.compound_zerofill_req, -                                op_errno, out, -                                args->fd, args->offset, args->size, -                                args->xdata); +            case GF_FOP_FALLOCATE: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, fallocate);                  break; -        case GF_FOP_IPC: -                CLIENT_PRE_FOP (ipc, this, -                                &this_req->compound_req_u.compound_ipc_req, -                                op_errno, out, -                                args->cmd, args->xdata); +            case GF_FOP_DISCARD: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, discard);                  break; -        case GF_FOP_SEEK: -                CLIENT_PRE_FOP (seek, this, -                                &this_req->compound_req_u.compound_seek_req, -                                op_errno, out, -                                args->fd, args->offset, args->what, -                                args->xdata); +            case GF_FOP_ZEROFILL: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, zerofill);                  break; -        case GF_FOP_LEASE: -                CLIENT_PRE_FOP (lease, this, -                                &this_req->compound_req_u.compound_lease_req, -                                op_errno, out, &args->loc, &args->lease, -                                args->xdata); +            case GF_FOP_IPC: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, ipc); +                break; +            case GF_FOP_SEEK: +                CLIENT_COMPOUND_FOP_CLEANUP(curr_req, seek); +                break; +            default:                  break; -        default: -                return ENOTSUP; -        } -        return 0; -out: -        return op_errno; -} - -void -compound_request_cleanup (gfs3_compound_req *req) -{ -        int i       = 0; -        int length  = req->compound_req_array.compound_req_array_len; -        compound_req   *curr_req = NULL; - - -        if (!req->compound_req_array.compound_req_array_val) -                return; - -        for (i = 0; i < length; i++) { -                curr_req = &req->compound_req_array.compound_req_array_val[i]; - -                switch (curr_req->fop_enum) { -                case GF_FOP_STAT: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, stat); -                        break; -                case GF_FOP_READLINK: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, readlink); -                        break; -                case GF_FOP_MKNOD: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, mknod); -                        break; -                case GF_FOP_MKDIR: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, mkdir); -                        break; -                case GF_FOP_UNLINK: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, unlink); -                        break; -                case GF_FOP_RMDIR: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, rmdir); -                        break; -                case GF_FOP_SYMLINK: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, symlink); -                        break; -                case GF_FOP_RENAME: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, rename); -                        break; -                case GF_FOP_LINK: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, link); -                        break; -                case GF_FOP_TRUNCATE: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, truncate); -                        break; -                case GF_FOP_OPEN: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, open); -                        break; -                case GF_FOP_READ: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, read); -                        break; -                case GF_FOP_WRITE: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, write); -                        break; -                case GF_FOP_STATFS: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, statfs); -                        break; -                case GF_FOP_FLUSH: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, flush); -                        break; -                case GF_FOP_FSYNC: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, fsync); -                        break; -                case GF_FOP_SETXATTR: -                { -                        gfs3_setxattr_req *args = &CPD_REQ_FIELD (curr_req, -                                                  setxattr); -                        GF_FREE (args->dict.dict_val); -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, setxattr); -                        break; -                } -                case GF_FOP_GETXATTR: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, getxattr); -                        break; -                case GF_FOP_REMOVEXATTR: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, removexattr); -                        break; -                case GF_FOP_OPENDIR: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, opendir); -                        break; -                case GF_FOP_FSYNCDIR: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, fsyncdir); -                        break; -                case GF_FOP_ACCESS: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, access); -                        break; -                case GF_FOP_CREATE: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, create); -                        break; -                case GF_FOP_FTRUNCATE: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, ftruncate); -                        break; -                case GF_FOP_FSTAT: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, fstat); -                        break; -                case GF_FOP_LK: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, lk); -                        break; -                case GF_FOP_LOOKUP: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, lookup); -                        break; -                case GF_FOP_READDIR: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, readdir); -                        break; -                case GF_FOP_INODELK: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, inodelk); -                        break; -                case GF_FOP_FINODELK: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, finodelk); -                        break; -                case GF_FOP_ENTRYLK: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, entrylk); -                        break; -                case GF_FOP_FENTRYLK: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, fentrylk); -                        break; -                case GF_FOP_XATTROP: -                { -                        gfs3_xattrop_req *args = &CPD_REQ_FIELD (curr_req, -                                                 xattrop); -                        GF_FREE (args->dict.dict_val); -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, xattrop); -                        break; -                } -                case GF_FOP_FXATTROP: -                { -                        gfs3_fxattrop_req *args = &CPD_REQ_FIELD (curr_req, -                                                  fxattrop); -                        GF_FREE (args->dict.dict_val); -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, fxattrop); -                        break; -                } -                case GF_FOP_FGETXATTR: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, fgetxattr); -                        break; -                case GF_FOP_FSETXATTR: -                { -                        gfs3_fsetxattr_req *args = &CPD_REQ_FIELD(curr_req, -                                                   fsetxattr); -                        GF_FREE (args->dict.dict_val); -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, fsetxattr); -                        break; -                } -                case GF_FOP_RCHECKSUM: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, rchecksum); -                        break; -                case GF_FOP_SETATTR: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, setattr); -                        break; -                case GF_FOP_FSETATTR: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, fsetattr); -                        break; -                case GF_FOP_READDIRP: -                { -                        gfs3_readdirp_req *args = &CPD_REQ_FIELD(curr_req, -                                                  readdirp); -                        GF_FREE (args->dict.dict_val); -                        break; -                } -                case GF_FOP_FREMOVEXATTR: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, fremovexattr); -                        break; -                case GF_FOP_FALLOCATE: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, fallocate); -                        break; -                case GF_FOP_DISCARD: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, discard); -                        break; -                case GF_FOP_ZEROFILL: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, zerofill); -                        break; -                case GF_FOP_IPC: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, ipc); -                        break; -                case GF_FOP_SEEK: -                        CLIENT_COMPOUND_FOP_CLEANUP (curr_req, seek); -                        break; -                default: -                        break; -                }          } +    } -        GF_FREE (req->compound_req_array.compound_req_array_val); -        return; +    GF_FREE(req->compound_req_array.compound_req_array_val); +    return;  }  void -clnt_getactivelk_rsp_cleanup (gfs3_getactivelk_rsp *rsp) +clnt_getactivelk_rsp_cleanup(gfs3_getactivelk_rsp *rsp)  { -        gfs3_locklist   *trav = NULL; -        gfs3_locklist   *next = NULL; +    gfs3_locklist *trav = NULL; +    gfs3_locklist *next = NULL; -        trav = rsp->reply; +    trav = rsp->reply; -        while (trav) { -                next = trav->nextentry; -                free (trav->client_uid); -                free (trav); -                trav = next; -        } +    while (trav) { +        next = trav->nextentry; +        free(trav->client_uid); +        free(trav); +        trav = next; +    }  }  void -clnt_getactivelk_rsp_cleanup_v2 (gfx_getactivelk_rsp *rsp) +clnt_getactivelk_rsp_cleanup_v2(gfx_getactivelk_rsp *rsp)  { -        gfs3_locklist   *trav = NULL; -        gfs3_locklist   *next = NULL; +    gfs3_locklist *trav = NULL; +    gfs3_locklist *next = NULL; -        trav = rsp->reply; +    trav = rsp->reply; -        while (trav) { -                next = trav->nextentry; -                free (trav->client_uid); -                free (trav); -                trav = next; -        } +    while (trav) { +        next = trav->nextentry; +        free(trav->client_uid); +        free(trav); +        trav = next; +    }  }  int -clnt_unserialize_rsp_locklist (xlator_t *this, struct gfs3_getactivelk_rsp *rsp, -                               lock_migration_info_t *lmi) +clnt_unserialize_rsp_locklist(xlator_t *this, struct gfs3_getactivelk_rsp *rsp, +                              lock_migration_info_t *lmi)  { -        struct gfs3_locklist            *trav           = NULL; -        lock_migration_info_t           *temp           = NULL; -        int                             ret             = -1; -        clnt_conf_t                     *conf           = NULL; +    struct gfs3_locklist *trav = NULL; +    lock_migration_info_t *temp = NULL; +    int ret = -1; +    clnt_conf_t *conf = NULL; -        trav = rsp->reply; +    trav = rsp->reply; -        conf = this->private; -        if (!conf) -                goto out; +    conf = this->private; +    if (!conf) +        goto out; -        while (trav) { -                temp = GF_CALLOC (1, sizeof (*lmi), gf_common_mt_lock_mig); -                if (temp == NULL) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, 0, "No memory"); -                        goto out; -                } +    while (trav) { +        temp = GF_CALLOC(1, sizeof(*lmi), gf_common_mt_lock_mig); +        if (temp == NULL) { +            gf_msg(this->name, GF_LOG_ERROR, 0, 0, "No memory"); +            goto out; +        } -                INIT_LIST_HEAD (&temp->list); +        INIT_LIST_HEAD(&temp->list); -                gf_proto_flock_to_flock (&trav->flock, &temp->flock); +        gf_proto_flock_to_flock(&trav->flock, &temp->flock); -                temp->lk_flags = trav->lk_flags; +        temp->lk_flags = trav->lk_flags; -                temp->client_uid =  gf_strdup (trav->client_uid); +        temp->client_uid = gf_strdup(trav->client_uid); -                list_add_tail (&temp->list, &lmi->list); +        list_add_tail(&temp->list, &lmi->list); -                trav = trav->nextentry; -        } +        trav = trav->nextentry; +    } -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  }  int -clnt_unserialize_rsp_locklist_v2 (xlator_t *this, struct gfx_getactivelk_rsp *rsp, -                                  lock_migration_info_t *lmi) +clnt_unserialize_rsp_locklist_v2(xlator_t *this, +                                 struct gfx_getactivelk_rsp *rsp, +                                 lock_migration_info_t *lmi)  { -        struct gfs3_locklist            *trav           = NULL; -        lock_migration_info_t           *temp           = NULL; -        int                             ret             = -1; -        clnt_conf_t                     *conf           = NULL; +    struct gfs3_locklist *trav = NULL; +    lock_migration_info_t *temp = NULL; +    int ret = -1; +    clnt_conf_t *conf = NULL; -        trav = rsp->reply; +    trav = rsp->reply; -        conf = this->private; -        if (!conf) -                goto out; +    conf = this->private; +    if (!conf) +        goto out; -        while (trav) { -                temp = GF_CALLOC (1, sizeof (*lmi), gf_common_mt_lock_mig); -                if (temp == NULL) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, 0, "No memory"); -                        goto out; -                } +    while (trav) { +        temp = GF_CALLOC(1, sizeof(*lmi), gf_common_mt_lock_mig); +        if (temp == NULL) { +            gf_msg(this->name, GF_LOG_ERROR, 0, 0, "No memory"); +            goto out; +        } -                INIT_LIST_HEAD (&temp->list); +        INIT_LIST_HEAD(&temp->list); -                gf_proto_flock_to_flock (&trav->flock, &temp->flock); +        gf_proto_flock_to_flock(&trav->flock, &temp->flock); -                temp->lk_flags = trav->lk_flags; +        temp->lk_flags = trav->lk_flags; -                temp->client_uid =  gf_strdup (trav->client_uid); +        temp->client_uid = gf_strdup(trav->client_uid); -                list_add_tail (&temp->list, &lmi->list); +        list_add_tail(&temp->list, &lmi->list); -                trav = trav->nextentry; -        } +        trav = trav->nextentry; +    } -        ret = 0; +    ret = 0;  out: -        return ret; +    return ret;  } -  void -clnt_setactivelk_req_cleanup (gfs3_setactivelk_req *req) +clnt_setactivelk_req_cleanup(gfs3_setactivelk_req *req)  { -        gfs3_locklist   *trav = NULL; -        gfs3_locklist   *next = NULL; +    gfs3_locklist *trav = NULL; +    gfs3_locklist *next = NULL; -        trav = req->request; +    trav = req->request; -        while (trav) { -                next = trav->nextentry; -                GF_FREE (trav->client_uid); -                GF_FREE (trav); -                trav = next; -        } +    while (trav) { +        next = trav->nextentry; +        GF_FREE(trav->client_uid); +        GF_FREE(trav); +        trav = next; +    }  }  void -clnt_setactivelk_req_cleanup_v2 (gfx_setactivelk_req *req) +clnt_setactivelk_req_cleanup_v2(gfx_setactivelk_req *req)  { -        gfs3_locklist   *trav = NULL; -        gfs3_locklist   *next = NULL; +    gfs3_locklist *trav = NULL; +    gfs3_locklist *next = NULL; -        trav = req->request; +    trav = req->request; -        while (trav) { -                next = trav->nextentry; -                GF_FREE (trav->client_uid); -                GF_FREE (trav); -                trav = next; -        } +    while (trav) { +        next = trav->nextentry; +        GF_FREE(trav->client_uid); +        GF_FREE(trav); +        trav = next; +    }  }  int -serialize_req_locklist (lock_migration_info_t *locklist, -                        gfs3_setactivelk_req *req) +serialize_req_locklist(lock_migration_info_t *locklist, +                       gfs3_setactivelk_req *req)  { -        lock_migration_info_t   *tmp    = NULL; -        gfs3_locklist           *trav   = NULL; -        gfs3_locklist           *prev   = NULL; -        int                     ret     = -1; - -        GF_VALIDATE_OR_GOTO ("server", locklist, out); -        GF_VALIDATE_OR_GOTO ("server", req, out); - -        list_for_each_entry (tmp, &locklist->list, list) { -                trav = GF_CALLOC (1, sizeof (*trav), -                                  gf_client_mt_clnt_lock_request_t); -                if (!trav) -                        goto out; - -                switch (tmp->flock.l_type) { -                case F_RDLCK: -                        tmp->flock.l_type = GF_LK_F_RDLCK; -                        break; -                case F_WRLCK: -                        tmp->flock.l_type = GF_LK_F_WRLCK; -                        break; -                case F_UNLCK: -                        tmp->flock.l_type = GF_LK_F_UNLCK; -                        break; - -                default: -                        gf_msg (THIS->name, GF_LOG_ERROR, 0, 0, -                                "Unknown lock type: %"PRId32"!", -                                tmp->flock.l_type); -                        break; -                } +    lock_migration_info_t *tmp = NULL; +    gfs3_locklist *trav = NULL; +    gfs3_locklist *prev = NULL; +    int ret = -1; -                gf_proto_flock_from_flock (&trav->flock, &tmp->flock); +    GF_VALIDATE_OR_GOTO("server", locklist, out); +    GF_VALIDATE_OR_GOTO("server", req, out); -                trav->lk_flags = tmp->lk_flags; +    list_for_each_entry(tmp, &locklist->list, list) +    { +        trav = GF_CALLOC(1, sizeof(*trav), gf_client_mt_clnt_lock_request_t); +        if (!trav) +            goto out; -                trav->client_uid = gf_strdup (tmp->client_uid); -                if (!trav->client_uid) { -                        gf_msg (THIS->name, GF_LOG_ERROR, 0, 0, -                                "client_uid could not be allocated"); -                        ret = -1; -                        goto out; -                } +        switch (tmp->flock.l_type) { +            case F_RDLCK: +                tmp->flock.l_type = GF_LK_F_RDLCK; +                break; +            case F_WRLCK: +                tmp->flock.l_type = GF_LK_F_WRLCK; +                break; +            case F_UNLCK: +                tmp->flock.l_type = GF_LK_F_UNLCK; +                break; -                if (prev) -                        prev->nextentry = trav; -                else -                        req->request = trav; +            default: +                gf_msg(THIS->name, GF_LOG_ERROR, 0, 0, +                       "Unknown lock type: %" PRId32 "!", tmp->flock.l_type); +                break; +        } + +        gf_proto_flock_from_flock(&trav->flock, &tmp->flock); -                prev = trav; -                trav = NULL; +        trav->lk_flags = tmp->lk_flags; + +        trav->client_uid = gf_strdup(tmp->client_uid); +        if (!trav->client_uid) { +            gf_msg(THIS->name, GF_LOG_ERROR, 0, 0, +                   "client_uid could not be allocated"); +            ret = -1; +            goto out;          } -        ret = 0; +        if (prev) +            prev->nextentry = trav; +        else +            req->request = trav; + +        prev = trav; +        trav = NULL; +    } + +    ret = 0;  out: -        GF_FREE (trav); +    GF_FREE(trav); -        return ret; +    return ret;  } -  int -serialize_req_locklist_v2 (lock_migration_info_t *locklist, -                           gfx_setactivelk_req *req) +serialize_req_locklist_v2(lock_migration_info_t *locklist, +                          gfx_setactivelk_req *req)  { -        lock_migration_info_t   *tmp    = NULL; -        gfs3_locklist           *trav   = NULL; -        gfs3_locklist           *prev   = NULL; -        int                     ret     = -1; - -        GF_VALIDATE_OR_GOTO ("server", locklist, out); -        GF_VALIDATE_OR_GOTO ("server", req, out); - -        list_for_each_entry (tmp, &locklist->list, list) { -                trav = GF_CALLOC (1, sizeof (*trav), -                                  gf_client_mt_clnt_lock_request_t); -                if (!trav) -                        goto out; - -                switch (tmp->flock.l_type) { -                case F_RDLCK: -                        tmp->flock.l_type = GF_LK_F_RDLCK; -                        break; -                case F_WRLCK: -                        tmp->flock.l_type = GF_LK_F_WRLCK; -                        break; -                case F_UNLCK: -                        tmp->flock.l_type = GF_LK_F_UNLCK; -                        break; - -                default: -                        gf_msg (THIS->name, GF_LOG_ERROR, 0, 0, -                                "Unknown lock type: %"PRId32"!", -                                tmp->flock.l_type); -                        break; -                } +    lock_migration_info_t *tmp = NULL; +    gfs3_locklist *trav = NULL; +    gfs3_locklist *prev = NULL; +    int ret = -1; -                gf_proto_flock_from_flock (&trav->flock, &tmp->flock); +    GF_VALIDATE_OR_GOTO("server", locklist, out); +    GF_VALIDATE_OR_GOTO("server", req, out); -                trav->lk_flags = tmp->lk_flags; +    list_for_each_entry(tmp, &locklist->list, list) +    { +        trav = GF_CALLOC(1, sizeof(*trav), gf_client_mt_clnt_lock_request_t); +        if (!trav) +            goto out; -                trav->client_uid = gf_strdup (tmp->client_uid); -                if (!trav->client_uid) { -                        gf_msg (THIS->name, GF_LOG_ERROR, 0, 0, -                                "client_uid could not be allocated"); -                        ret = -1; -                        goto out; -                } +        switch (tmp->flock.l_type) { +            case F_RDLCK: +                tmp->flock.l_type = GF_LK_F_RDLCK; +                break; +            case F_WRLCK: +                tmp->flock.l_type = GF_LK_F_WRLCK; +                break; +            case F_UNLCK: +                tmp->flock.l_type = GF_LK_F_UNLCK; +                break; + +            default: +                gf_msg(THIS->name, GF_LOG_ERROR, 0, 0, +                       "Unknown lock type: %" PRId32 "!", tmp->flock.l_type); +                break; +        } + +        gf_proto_flock_from_flock(&trav->flock, &tmp->flock); -                if (prev) -                        prev->nextentry = trav; -                else -                        req->request = trav; +        trav->lk_flags = tmp->lk_flags; -                prev = trav; -                trav = NULL; +        trav->client_uid = gf_strdup(tmp->client_uid); +        if (!trav->client_uid) { +            gf_msg(THIS->name, GF_LOG_ERROR, 0, 0, +                   "client_uid could not be allocated"); +            ret = -1; +            goto out;          } -        ret = 0; +        if (prev) +            prev->nextentry = trav; +        else +            req->request = trav; + +        prev = trav; +        trav = NULL; +    } + +    ret = 0;  out: -        GF_FREE (trav); +    GF_FREE(trav); -        return ret; +    return ret;  }  void -client_compound_rsp_cleanup (gfs3_compound_rsp *rsp, int len) +client_compound_rsp_cleanup(gfs3_compound_rsp *rsp, int len)  { -        int i = 0; -        compound_rsp            *this_rsp       = NULL; - -        for (i = 0; i < len; i++) { -                this_rsp = &rsp->compound_rsp_array.compound_rsp_array_val[i]; -                switch (this_rsp->fop_enum) { -                case GF_FOP_STAT: -                        CLIENT_FOP_RSP_CLEANUP (rsp, stat, i); -                        break; -                case GF_FOP_MKNOD: -                        CLIENT_FOP_RSP_CLEANUP (rsp, mknod, i); -                        break; -                case GF_FOP_MKDIR: -                        CLIENT_FOP_RSP_CLEANUP (rsp, mkdir, i); -                        break; -                case GF_FOP_UNLINK: -                        CLIENT_FOP_RSP_CLEANUP (rsp, unlink, i); -                        break; -                case GF_FOP_RMDIR: -                        CLIENT_FOP_RSP_CLEANUP (rsp, rmdir, i); -                        break; -                case GF_FOP_SYMLINK: -                        CLIENT_FOP_RSP_CLEANUP (rsp, symlink, i); -                        break; -                case GF_FOP_RENAME: -                        CLIENT_FOP_RSP_CLEANUP (rsp, rename, i); -                        break; -                case GF_FOP_LINK: -                        CLIENT_FOP_RSP_CLEANUP (rsp, link, i); -                        break; -                case GF_FOP_TRUNCATE: -                        CLIENT_FOP_RSP_CLEANUP (rsp, truncate, i); -                        break; -                case GF_FOP_OPEN: -                        CLIENT_FOP_RSP_CLEANUP (rsp, open, i); -                        break; -                case GF_FOP_READ: -                        CLIENT_FOP_RSP_CLEANUP (rsp, read, i); -                        break; -                case GF_FOP_WRITE: -                        CLIENT_FOP_RSP_CLEANUP (rsp, write, i); -                        break; -                case GF_FOP_STATFS: -                        CLIENT_FOP_RSP_CLEANUP (rsp, statfs, i); -                        break; -                case GF_FOP_FSYNC: -                        CLIENT_FOP_RSP_CLEANUP (rsp, fsync, i); -                        break; -                case GF_FOP_OPENDIR: -                        CLIENT_FOP_RSP_CLEANUP (rsp, opendir, i); -                        break; -                case GF_FOP_CREATE: -                        CLIENT_FOP_RSP_CLEANUP (rsp, create, i); -                        break; -                case GF_FOP_FTRUNCATE: -                        CLIENT_FOP_RSP_CLEANUP (rsp, ftruncate, i); -                        break; -                case GF_FOP_FSTAT: -                        CLIENT_FOP_RSP_CLEANUP (rsp, fstat, i); -                        break; -                case GF_FOP_LOOKUP: -                        CLIENT_FOP_RSP_CLEANUP (rsp, lookup, i); -                        break; -                case GF_FOP_SETATTR: -                        CLIENT_FOP_RSP_CLEANUP (rsp, setattr, i); -                        break; -                case GF_FOP_FSETATTR: -                        CLIENT_FOP_RSP_CLEANUP (rsp, fsetattr, i); -                        break; -                case GF_FOP_FALLOCATE: -                        CLIENT_FOP_RSP_CLEANUP (rsp, fallocate, i); -                        break; -                case GF_FOP_DISCARD: -                        CLIENT_FOP_RSP_CLEANUP (rsp, discard, i); -                        break; -                case GF_FOP_ZEROFILL: -                        CLIENT_FOP_RSP_CLEANUP (rsp, zerofill, i); -                        break; -                case GF_FOP_IPC: -                        CLIENT_FOP_RSP_CLEANUP (rsp, ipc, i); -                        break; -                case GF_FOP_SEEK: -                        CLIENT_FOP_RSP_CLEANUP (rsp, seek, i); -                        break; -                case GF_FOP_LEASE: -                        CLIENT_FOP_RSP_CLEANUP (rsp, lease, i); -                        break; -                /* fops that use gf_common_rsp */ -                case GF_FOP_FLUSH: -                        CLIENT_COMMON_RSP_CLEANUP (rsp, flush, i); -                        break; -                case GF_FOP_SETXATTR: -                        CLIENT_COMMON_RSP_CLEANUP (rsp, setxattr, i); -                        break; -                case GF_FOP_REMOVEXATTR: -                        CLIENT_COMMON_RSP_CLEANUP (rsp, removexattr, i); -                        break; -                case GF_FOP_FSETXATTR: -                        CLIENT_COMMON_RSP_CLEANUP (rsp, fsetxattr, i); -                        break; -                case GF_FOP_FREMOVEXATTR: -                        CLIENT_COMMON_RSP_CLEANUP (rsp, fremovexattr, i); -                        break; -                case GF_FOP_FSYNCDIR: -                        CLIENT_COMMON_RSP_CLEANUP (rsp, fsyncdir, i); -                        break; -                case GF_FOP_ACCESS: -                        CLIENT_COMMON_RSP_CLEANUP (rsp, access, i); -                        break; -                case GF_FOP_INODELK: -                        CLIENT_COMMON_RSP_CLEANUP (rsp, inodelk, i); -                        break; -                case GF_FOP_FINODELK: -                        CLIENT_COMMON_RSP_CLEANUP (rsp, finodelk, i); -                        break; -                case GF_FOP_ENTRYLK: -                        CLIENT_COMMON_RSP_CLEANUP (rsp, entrylk, i); -                        break; -                case GF_FOP_FENTRYLK: -                        CLIENT_COMMON_RSP_CLEANUP (rsp, fentrylk, i); -                        break; -                /* fops that need extra cleanup */ -                case GF_FOP_LK: -                { -                        CLIENT_FOP_RSP_CLEANUP (rsp, lk, i); -                        gfs3_lk_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, lk); -                        free (tmp_rsp->flock.lk_owner.lk_owner_val); -                        break; -                } -                case GF_FOP_READLINK: -                { -                        CLIENT_FOP_RSP_CLEANUP (rsp, readlink, i); -                        gfs3_readlink_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, -                                                                    readlink); -                        free (tmp_rsp->path); -                        break; -                } -                case GF_FOP_XATTROP: -                { -                        CLIENT_FOP_RSP_CLEANUP (rsp, xattrop, i); -                        gfs3_xattrop_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, -                                                                   xattrop); -                        free (tmp_rsp->dict.dict_val); -                        break; -                } -                case GF_FOP_FXATTROP: -                { -                        CLIENT_FOP_RSP_CLEANUP (rsp, fxattrop, i); -                        gfs3_fxattrop_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, -                                                                    fxattrop); -                        free (tmp_rsp->dict.dict_val); -                        break; -                } -                case GF_FOP_READDIR: -                { -                        CLIENT_FOP_RSP_CLEANUP (rsp, readdir, i); -                        gfs3_readdir_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, -                                                                   readdir); -                        clnt_readdir_rsp_cleanup (tmp_rsp); -                        break; -                } -                case GF_FOP_READDIRP: -                { -                        CLIENT_FOP_RSP_CLEANUP (rsp, readdirp, i); -                        gfs3_readdirp_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, -                                                                    readdirp); -                        clnt_readdirp_rsp_cleanup (tmp_rsp); -                        break; -                } -                case GF_FOP_GETXATTR: -                { -                        CLIENT_FOP_RSP_CLEANUP (rsp, getxattr, i); -                        gfs3_getxattr_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, -                                                                    getxattr); -                        free (tmp_rsp->dict.dict_val); -                        break; -                } -                case GF_FOP_FGETXATTR: -                { -                        CLIENT_FOP_RSP_CLEANUP (rsp, fgetxattr, i); -                        gfs3_fgetxattr_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, -                                                      fgetxattr); -                        free (tmp_rsp->dict.dict_val); -                        break; -                } -                case GF_FOP_RCHECKSUM: -                { -                        CLIENT_FOP_RSP_CLEANUP (rsp, rchecksum, i); -                        gfs3_rchecksum_rsp *rck = &CPD_RSP_FIELD(this_rsp, -                                                  rchecksum); -                        if (rck->strong_checksum.strong_checksum_val) { -                                free (rck->strong_checksum.strong_checksum_val); -                        } -                        break; -                } -                default: -                        break; +    int i = 0; +    compound_rsp *this_rsp = NULL; + +    for (i = 0; i < len; i++) { +        this_rsp = &rsp->compound_rsp_array.compound_rsp_array_val[i]; +        switch (this_rsp->fop_enum) { +            case GF_FOP_STAT: +                CLIENT_FOP_RSP_CLEANUP(rsp, stat, i); +                break; +            case GF_FOP_MKNOD: +                CLIENT_FOP_RSP_CLEANUP(rsp, mknod, i); +                break; +            case GF_FOP_MKDIR: +                CLIENT_FOP_RSP_CLEANUP(rsp, mkdir, i); +                break; +            case GF_FOP_UNLINK: +                CLIENT_FOP_RSP_CLEANUP(rsp, unlink, i); +                break; +            case GF_FOP_RMDIR: +                CLIENT_FOP_RSP_CLEANUP(rsp, rmdir, i); +                break; +            case GF_FOP_SYMLINK: +                CLIENT_FOP_RSP_CLEANUP(rsp, symlink, i); +                break; +            case GF_FOP_RENAME: +                CLIENT_FOP_RSP_CLEANUP(rsp, rename, i); +                break; +            case GF_FOP_LINK: +                CLIENT_FOP_RSP_CLEANUP(rsp, link, i); +                break; +            case GF_FOP_TRUNCATE: +                CLIENT_FOP_RSP_CLEANUP(rsp, truncate, i); +                break; +            case GF_FOP_OPEN: +                CLIENT_FOP_RSP_CLEANUP(rsp, open, i); +                break; +            case GF_FOP_READ: +                CLIENT_FOP_RSP_CLEANUP(rsp, read, i); +                break; +            case GF_FOP_WRITE: +                CLIENT_FOP_RSP_CLEANUP(rsp, write, i); +                break; +            case GF_FOP_STATFS: +                CLIENT_FOP_RSP_CLEANUP(rsp, statfs, i); +                break; +            case GF_FOP_FSYNC: +                CLIENT_FOP_RSP_CLEANUP(rsp, fsync, i); +                break; +            case GF_FOP_OPENDIR: +                CLIENT_FOP_RSP_CLEANUP(rsp, opendir, i); +                break; +            case GF_FOP_CREATE: +                CLIENT_FOP_RSP_CLEANUP(rsp, create, i); +                break; +            case GF_FOP_FTRUNCATE: +                CLIENT_FOP_RSP_CLEANUP(rsp, ftruncate, i); +                break; +            case GF_FOP_FSTAT: +                CLIENT_FOP_RSP_CLEANUP(rsp, fstat, i); +                break; +            case GF_FOP_LOOKUP: +                CLIENT_FOP_RSP_CLEANUP(rsp, lookup, i); +                break; +            case GF_FOP_SETATTR: +                CLIENT_FOP_RSP_CLEANUP(rsp, setattr, i); +                break; +            case GF_FOP_FSETATTR: +                CLIENT_FOP_RSP_CLEANUP(rsp, fsetattr, i); +                break; +            case GF_FOP_FALLOCATE: +                CLIENT_FOP_RSP_CLEANUP(rsp, fallocate, i); +                break; +            case GF_FOP_DISCARD: +                CLIENT_FOP_RSP_CLEANUP(rsp, discard, i); +                break; +            case GF_FOP_ZEROFILL: +                CLIENT_FOP_RSP_CLEANUP(rsp, zerofill, i); +                break; +            case GF_FOP_IPC: +                CLIENT_FOP_RSP_CLEANUP(rsp, ipc, i); +                break; +            case GF_FOP_SEEK: +                CLIENT_FOP_RSP_CLEANUP(rsp, seek, i); +                break; +            case GF_FOP_LEASE: +                CLIENT_FOP_RSP_CLEANUP(rsp, lease, i); +                break; +            /* fops that use gf_common_rsp */ +            case GF_FOP_FLUSH: +                CLIENT_COMMON_RSP_CLEANUP(rsp, flush, i); +                break; +            case GF_FOP_SETXATTR: +                CLIENT_COMMON_RSP_CLEANUP(rsp, setxattr, i); +                break; +            case GF_FOP_REMOVEXATTR: +                CLIENT_COMMON_RSP_CLEANUP(rsp, removexattr, i); +                break; +            case GF_FOP_FSETXATTR: +                CLIENT_COMMON_RSP_CLEANUP(rsp, fsetxattr, i); +                break; +            case GF_FOP_FREMOVEXATTR: +                CLIENT_COMMON_RSP_CLEANUP(rsp, fremovexattr, i); +                break; +            case GF_FOP_FSYNCDIR: +                CLIENT_COMMON_RSP_CLEANUP(rsp, fsyncdir, i); +                break; +            case GF_FOP_ACCESS: +                CLIENT_COMMON_RSP_CLEANUP(rsp, access, i); +                break; +            case GF_FOP_INODELK: +                CLIENT_COMMON_RSP_CLEANUP(rsp, inodelk, i); +                break; +            case GF_FOP_FINODELK: +                CLIENT_COMMON_RSP_CLEANUP(rsp, finodelk, i); +                break; +            case GF_FOP_ENTRYLK: +                CLIENT_COMMON_RSP_CLEANUP(rsp, entrylk, i); +                break; +            case GF_FOP_FENTRYLK: +                CLIENT_COMMON_RSP_CLEANUP(rsp, fentrylk, i); +                break; +            /* fops that need extra cleanup */ +            case GF_FOP_LK: { +                CLIENT_FOP_RSP_CLEANUP(rsp, lk, i); +                gfs3_lk_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, lk); +                free(tmp_rsp->flock.lk_owner.lk_owner_val); +                break; +            } +            case GF_FOP_READLINK: { +                CLIENT_FOP_RSP_CLEANUP(rsp, readlink, i); +                gfs3_readlink_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, readlink); +                free(tmp_rsp->path); +                break; +            } +            case GF_FOP_XATTROP: { +                CLIENT_FOP_RSP_CLEANUP(rsp, xattrop, i); +                gfs3_xattrop_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, xattrop); +                free(tmp_rsp->dict.dict_val); +                break; +            } +            case GF_FOP_FXATTROP: { +                CLIENT_FOP_RSP_CLEANUP(rsp, fxattrop, i); +                gfs3_fxattrop_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, fxattrop); +                free(tmp_rsp->dict.dict_val); +                break; +            } +            case GF_FOP_READDIR: { +                CLIENT_FOP_RSP_CLEANUP(rsp, readdir, i); +                gfs3_readdir_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, readdir); +                clnt_readdir_rsp_cleanup(tmp_rsp); +                break; +            } +            case GF_FOP_READDIRP: { +                CLIENT_FOP_RSP_CLEANUP(rsp, readdirp, i); +                gfs3_readdirp_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, readdirp); +                clnt_readdirp_rsp_cleanup(tmp_rsp); +                break; +            } +            case GF_FOP_GETXATTR: { +                CLIENT_FOP_RSP_CLEANUP(rsp, getxattr, i); +                gfs3_getxattr_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, getxattr); +                free(tmp_rsp->dict.dict_val); +                break; +            } +            case GF_FOP_FGETXATTR: { +                CLIENT_FOP_RSP_CLEANUP(rsp, fgetxattr, i); +                gfs3_fgetxattr_rsp *tmp_rsp = &CPD_RSP_FIELD(this_rsp, +                                                             fgetxattr); +                free(tmp_rsp->dict.dict_val); +                break; +            } +            case GF_FOP_RCHECKSUM: { +                CLIENT_FOP_RSP_CLEANUP(rsp, rchecksum, i); +                gfs3_rchecksum_rsp *rck = &CPD_RSP_FIELD(this_rsp, rchecksum); +                if (rck->strong_checksum.strong_checksum_val) { +                    free(rck->strong_checksum.strong_checksum_val);                  } +                break; +            } +            default: +                break;          } -        return; +    } +    return;  }  /* compound v2 */  int -client_handle_fop_requirements_v2 (xlator_t *this, call_frame_t *frame, -                                gfx_compound_req *req, -                                clnt_local_t *local, -                                struct iobref **req_iobref, -                                struct iobref **rsp_iobref, -                                struct iovec *req_vector, -                                struct iovec *rsp_vector, int *req_count, -                                int *rsp_count, default_args_t *args, -                                int fop_enum, int index) +client_handle_fop_requirements_v2( +    xlator_t *this, call_frame_t *frame, gfx_compound_req *req, +    clnt_local_t *local, struct iobref **req_iobref, struct iobref **rsp_iobref, +    struct iovec *req_vector, struct iovec *rsp_vector, int *req_count, +    int *rsp_count, default_args_t *args, int fop_enum, int index)  { -        int              ret           = 0; -        int              op_errno      = ENOMEM; -        struct iobuf    *rsp_iobuf     = NULL; -        int64_t          remote_fd     = -1; -        compound_req_v2 *this_req     = &req->compound_req_array.compound_req_array_val[index]; +    int ret = 0; +    int op_errno = ENOMEM; +    struct iobuf *rsp_iobuf = NULL; +    int64_t remote_fd = -1; +    compound_req_v2 *this_req = &req->compound_req_array +                                     .compound_req_array_val[index]; -        this_req->fop_enum = fop_enum; +    this_req->fop_enum = fop_enum; -        switch (fop_enum) { +    switch (fop_enum) {          case GF_FOP_STAT: -                CLIENT4_PRE_FOP (stat, this, -                                &this_req->compound_req_v2_u.compound_stat_req, -                                op_errno, out, -                                &args->loc, args->xdata); -                break; +            CLIENT4_PRE_FOP(stat, this, +                            &this_req->compound_req_v2_u.compound_stat_req, +                            op_errno, out, &args->loc, args->xdata); +            break;          case GF_FOP_READLINK: -                CLIENT4_PRE_FOP (readlink, this, -                                &this_req->compound_req_v2_u.compound_readlink_req, -                                op_errno, out, -                                &args->loc, args->size, args->xdata); -                break; +            CLIENT4_PRE_FOP(readlink, this, +                            &this_req->compound_req_v2_u.compound_readlink_req, +                            op_errno, out, &args->loc, args->size, args->xdata); +            break;          case GF_FOP_MKNOD: -                CLIENT4_PRE_FOP (mknod, this, -                                &this_req->compound_req_v2_u.compound_mknod_req, -                                op_errno, out, -                                &args->loc, args->mode, args->rdev, -                                args->umask, args->xdata); -                loc_copy (&local->loc, &args->loc); -                loc_path (&local->loc, NULL); -                break; +            CLIENT4_PRE_FOP(mknod, this, +                            &this_req->compound_req_v2_u.compound_mknod_req, +                            op_errno, out, &args->loc, args->mode, args->rdev, +                            args->umask, args->xdata); +            loc_copy(&local->loc, &args->loc); +            loc_path(&local->loc, NULL); +            break;          case GF_FOP_MKDIR: -                CLIENT4_PRE_FOP (mkdir, this, -                                &this_req->compound_req_v2_u.compound_mkdir_req, -                                op_errno, out, -                                &args->loc, args->mode, -                                args->umask, args->xdata); -                loc_copy (&local->loc, &args->loc); -                loc_path (&local->loc, NULL); -                break; +            CLIENT4_PRE_FOP(mkdir, this, +                            &this_req->compound_req_v2_u.compound_mkdir_req, +                            op_errno, out, &args->loc, args->mode, args->umask, +                            args->xdata); +            loc_copy(&local->loc, &args->loc); +            loc_path(&local->loc, NULL); +            break;          case GF_FOP_UNLINK: -                CLIENT4_PRE_FOP (unlink, this, -                                &this_req->compound_req_v2_u.compound_unlink_req, -                                op_errno, out, -                                &args->loc, args->xflag, args->xdata); -                break; +            CLIENT4_PRE_FOP( +                unlink, this, &this_req->compound_req_v2_u.compound_unlink_req, +                op_errno, out, &args->loc, args->xflag, args->xdata); +            break;          case GF_FOP_RMDIR: -                CLIENT4_PRE_FOP (rmdir, this, -                                &this_req->compound_req_v2_u.compound_rmdir_req, -                                op_errno, out, -                                &args->loc, args->flags, args->xdata); -                break; +            CLIENT4_PRE_FOP( +                rmdir, this, &this_req->compound_req_v2_u.compound_rmdir_req, +                op_errno, out, &args->loc, args->flags, args->xdata); +            break;          case GF_FOP_SYMLINK: -                CLIENT4_PRE_FOP (symlink, this, -                                &this_req->compound_req_v2_u.compound_symlink_req, -                                op_errno, out, -                                &args->loc, args->linkname, args->umask, -                                args->xdata); -                loc_copy (&local->loc, &args->loc); -                loc_path (&local->loc, NULL); -                break; +            CLIENT4_PRE_FOP(symlink, this, +                            &this_req->compound_req_v2_u.compound_symlink_req, +                            op_errno, out, &args->loc, args->linkname, +                            args->umask, args->xdata); +            loc_copy(&local->loc, &args->loc); +            loc_path(&local->loc, NULL); +            break;          case GF_FOP_RENAME: -                CLIENT4_PRE_FOP (rename, this, -                                &this_req->compound_req_v2_u.compound_rename_req, -                                op_errno, out, -                                &args->loc, &args->loc2, args->xdata); -                break; +            CLIENT4_PRE_FOP( +                rename, this, &this_req->compound_req_v2_u.compound_rename_req, +                op_errno, out, &args->loc, &args->loc2, args->xdata); +            break;          case GF_FOP_LINK: -                CLIENT4_PRE_FOP (link, this, -                                &this_req->compound_req_v2_u.compound_link_req, -                                op_errno, out, -                                &args->loc, &args->loc2, args->xdata); -                break; +            CLIENT4_PRE_FOP( +                link, this, &this_req->compound_req_v2_u.compound_link_req, +                op_errno, out, &args->loc, &args->loc2, args->xdata); +            break;          case GF_FOP_TRUNCATE: -                CLIENT4_PRE_FOP (truncate, this, -                                &this_req->compound_req_v2_u.compound_truncate_req, -                                op_errno, out, -                                &args->loc, args->offset, args->xdata); -                break; +            CLIENT4_PRE_FOP(truncate, this, +                            &this_req->compound_req_v2_u.compound_truncate_req, +                            op_errno, out, &args->loc, args->offset, +                            args->xdata); +            break;          case GF_FOP_OPEN: -                CLIENT4_PRE_FOP (open, this, -                                &this_req->compound_req_v2_u.compound_open_req, -                                op_errno, out, -                                &args->loc, args->fd, args->flags, -                                args->xdata); -                if (!local->fd) -                        local->fd = fd_ref (args->fd); -                break; +            CLIENT4_PRE_FOP( +                open, this, &this_req->compound_req_v2_u.compound_open_req, +                op_errno, out, &args->loc, args->fd, args->flags, args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            break;          case GF_FOP_READ: -                op_errno = client_pre_readv_v2 (this, -                                  &this_req->compound_req_v2_u.compound_read_req, -                                  args->fd, args->size, args->offset, -                                  args->flags, args->xdata); - -                if (op_errno) { -                        op_errno = -op_errno; -                        goto out; -                } -                if (!local->fd) -                        local->fd = fd_ref (args->fd); -                local->attempt_reopen = client_is_reopen_needed -                                        (args->fd, this, remote_fd); -                rsp_iobuf = iobuf_get2 (this->ctx->iobuf_pool, args->size); -                if (rsp_iobuf == NULL) { -                        op_errno = ENOMEM; -                        goto out; -                } +            op_errno = client_pre_readv_v2( +                this, &this_req->compound_req_v2_u.compound_read_req, args->fd, +                args->size, args->offset, args->flags, args->xdata); -                if (!*rsp_iobref) { -                        *rsp_iobref = iobref_new (); -                        if (*rsp_iobref == NULL) { -                                op_errno = ENOMEM; -                                goto out; -                        } -                } +            if (op_errno) { +                op_errno = -op_errno; +                goto out; +            } +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            local->attempt_reopen = client_is_reopen_needed(args->fd, this, +                                                            remote_fd); +            rsp_iobuf = iobuf_get2(this->ctx->iobuf_pool, args->size); +            if (rsp_iobuf == NULL) { +                op_errno = ENOMEM; +                goto out; +            } -                if (*rsp_count + 1 >= MAX_IOVEC) { -                        op_errno = ENOMEM; -                        goto out; -                } -                rsp_vector[*rsp_count].iov_base = iobuf_ptr (rsp_iobuf); -                rsp_vector[*rsp_count].iov_len = iobuf_pagesize (rsp_iobuf); -                iobref_add (*rsp_iobref, rsp_iobuf); -                iobuf_unref (rsp_iobuf); -                rsp_iobuf = NULL; -                if (args->size > rsp_vector[*rsp_count].iov_len) { -                        gf_msg (this->name, GF_LOG_WARNING, ENOMEM, -                                PC_MSG_NO_MEMORY, -                                "read-size (%lu) is bigger than iobuf size " -                                "(%lu)", -                                (unsigned long)args->size, -                                (unsigned long)rsp_vector[*rsp_count].iov_len); -                        op_errno = EINVAL; -                        goto out; +            if (!*rsp_iobref) { +                *rsp_iobref = iobref_new(); +                if (*rsp_iobref == NULL) { +                    op_errno = ENOMEM; +                    goto out;                  } -                *rsp_count += 1; +            } -                break; +            if (*rsp_count + 1 >= MAX_IOVEC) { +                op_errno = ENOMEM; +                goto out; +            } +            rsp_vector[*rsp_count].iov_base = iobuf_ptr(rsp_iobuf); +            rsp_vector[*rsp_count].iov_len = iobuf_pagesize(rsp_iobuf); +            iobref_add(*rsp_iobref, rsp_iobuf); +            iobuf_unref(rsp_iobuf); +            rsp_iobuf = NULL; +            if (args->size > rsp_vector[*rsp_count].iov_len) { +                gf_msg(this->name, GF_LOG_WARNING, ENOMEM, PC_MSG_NO_MEMORY, +                       "read-size (%lu) is bigger than iobuf size " +                       "(%lu)", +                       (unsigned long)args->size, +                       (unsigned long)rsp_vector[*rsp_count].iov_len); +                op_errno = EINVAL; +                goto out; +            } +            *rsp_count += 1; + +            break;          case GF_FOP_WRITE: -                op_errno = client_pre_writev_v2 (this, -                           &this_req->compound_req_v2_u.compound_write_req, -                           args->fd, iov_length (args->vector, args->count), -                           args->offset, args->flags, &args->xdata); - -                if (op_errno) { -                        op_errno = -op_errno; -                        goto out; -                } -                if (!local->fd) -                        local->fd = fd_ref (args->fd); -                local->attempt_reopen = client_is_reopen_needed -                                        (args->fd, this, remote_fd); - -                if (*req_count + args->count >= MAX_IOVEC) { -                        op_errno = ENOMEM; -                        goto out; -                } -                memcpy (&req_vector[*req_count], args->vector, -                        (args->count * sizeof(req_vector[0]))); -                *req_count += args->count; +            op_errno = client_pre_writev_v2( +                this, &this_req->compound_req_v2_u.compound_write_req, args->fd, +                iov_length(args->vector, args->count), args->offset, +                args->flags, &args->xdata); -                if (!*req_iobref) -                        *req_iobref = args->iobref; -                else -                        if (iobref_merge (*req_iobref, args->iobref)) -                                goto out; -                break; +            if (op_errno) { +                op_errno = -op_errno; +                goto out; +            } +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            local->attempt_reopen = client_is_reopen_needed(args->fd, this, +                                                            remote_fd); + +            if (*req_count + args->count >= MAX_IOVEC) { +                op_errno = ENOMEM; +                goto out; +            } +            memcpy(&req_vector[*req_count], args->vector, +                   (args->count * sizeof(req_vector[0]))); +            *req_count += args->count; + +            if (!*req_iobref) +                *req_iobref = args->iobref; +            else if (iobref_merge(*req_iobref, args->iobref)) +                goto out; +            break;          case GF_FOP_STATFS: -                CLIENT4_PRE_FOP (statfs, this, -                                &this_req->compound_req_v2_u.compound_statfs_req, -                                op_errno, out, -                                &args->loc, args->xdata); -                break; +            CLIENT4_PRE_FOP(statfs, this, +                            &this_req->compound_req_v2_u.compound_statfs_req, +                            op_errno, out, &args->loc, args->xdata); +            break;          case GF_FOP_FLUSH: -                CLIENT4_PRE_FOP (flush, this, -                                &this_req->compound_req_v2_u.compound_flush_req, -                                op_errno, out, -                                args->fd, args->xdata); -                if (!local->fd) -                        local->fd = fd_ref (args->fd); -                local->owner = frame->root->lk_owner; -                break; +            CLIENT4_PRE_FOP(flush, this, +                            &this_req->compound_req_v2_u.compound_flush_req, +                            op_errno, out, args->fd, args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            local->owner = frame->root->lk_owner; +            break;          case GF_FOP_FSYNC: -                CLIENT4_PRE_FOP (fsync, this, -                                &this_req->compound_req_v2_u.compound_fsync_req, -                                op_errno, out, -                                args->fd, args->datasync, args->xdata); -                break; +            CLIENT4_PRE_FOP( +                fsync, this, &this_req->compound_req_v2_u.compound_fsync_req, +                op_errno, out, args->fd, args->datasync, args->xdata); +            break;          case GF_FOP_SETXATTR: -                CLIENT4_PRE_FOP (setxattr, this, -                                &this_req->compound_req_v2_u.compound_setxattr_req, -                                op_errno, out, -                                &args->loc, args->xattr, args->flags, -                                args->xdata); -                break; +            CLIENT4_PRE_FOP(setxattr, this, +                            &this_req->compound_req_v2_u.compound_setxattr_req, +                            op_errno, out, &args->loc, args->xattr, args->flags, +                            args->xdata); +            break;          case GF_FOP_GETXATTR: -                CLIENT4_PRE_FOP (getxattr, this, -                                &this_req->compound_req_v2_u.compound_getxattr_req, -                                op_errno, out, -                                &args->loc, args->name, args->xdata); -                loc_copy (&local->loc, &args->loc); -                loc_path (&local->loc, NULL); -                break; +            CLIENT4_PRE_FOP(getxattr, this, +                            &this_req->compound_req_v2_u.compound_getxattr_req, +                            op_errno, out, &args->loc, args->name, args->xdata); +            loc_copy(&local->loc, &args->loc); +            loc_path(&local->loc, NULL); +            break;          case GF_FOP_REMOVEXATTR: -                CLIENT4_PRE_FOP (removexattr, this, -                                &this_req->compound_req_v2_u.compound_removexattr_req, -                                op_errno, out, -                                &args->loc, args->name, args->xdata); -                break; +            CLIENT4_PRE_FOP( +                removexattr, this, +                &this_req->compound_req_v2_u.compound_removexattr_req, op_errno, +                out, &args->loc, args->name, args->xdata); +            break;          case GF_FOP_OPENDIR: -                CLIENT4_PRE_FOP (opendir, this, -                                &this_req->compound_req_v2_u.compound_opendir_req, -                                op_errno, out, -                                &args->loc, args->fd, args->xdata); -                if (!local->fd) -                        local->fd = fd_ref (args->fd); -                loc_copy (&local->loc, &args->loc); -                loc_path (&local->loc, NULL); -                break; +            CLIENT4_PRE_FOP(opendir, this, +                            &this_req->compound_req_v2_u.compound_opendir_req, +                            op_errno, out, &args->loc, args->fd, args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            loc_copy(&local->loc, &args->loc); +            loc_path(&local->loc, NULL); +            break;          case GF_FOP_FSYNCDIR: -                CLIENT4_PRE_FOP (fsyncdir, this, -                                &this_req->compound_req_v2_u.compound_fsyncdir_req, -                                op_errno, out, -                                args->fd, args->datasync, args->xdata); -                break; +            CLIENT4_PRE_FOP(fsyncdir, this, +                            &this_req->compound_req_v2_u.compound_fsyncdir_req, +                            op_errno, out, args->fd, args->datasync, +                            args->xdata); +            break;          case GF_FOP_ACCESS: -                CLIENT4_PRE_FOP (access, this, -                                &this_req->compound_req_v2_u.compound_access_req, -                                op_errno, out, -                                &args->loc, args->mask, args->xdata); -                break; +            CLIENT4_PRE_FOP(access, this, +                            &this_req->compound_req_v2_u.compound_access_req, +                            op_errno, out, &args->loc, args->mask, args->xdata); +            break;          case GF_FOP_CREATE: -                CLIENT4_PRE_FOP (create, this, -                                &this_req->compound_req_v2_u.compound_create_req, -                                op_errno, out, -                                &args->loc, args->fd, args->mode, args->flags, -                                args->umask, args->xdata); -                if (!local->fd) -                        local->fd = fd_ref (args->fd); - -                loc_copy (&local->loc, &args->loc); -                loc_path (&local->loc, NULL); -                break; +            CLIENT4_PRE_FOP(create, this, +                            &this_req->compound_req_v2_u.compound_create_req, +                            op_errno, out, &args->loc, args->fd, args->mode, +                            args->flags, args->umask, args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); + +            loc_copy(&local->loc, &args->loc); +            loc_path(&local->loc, NULL); +            break;          case GF_FOP_FTRUNCATE: -                CLIENT4_PRE_FOP (ftruncate, this, -                                &this_req->compound_req_v2_u.compound_ftruncate_req, -                                op_errno, out, -                                args->fd, args->offset, args->xdata); -                break; +            CLIENT4_PRE_FOP(ftruncate, this, +                            &this_req->compound_req_v2_u.compound_ftruncate_req, +                            op_errno, out, args->fd, args->offset, args->xdata); +            break;          case GF_FOP_FSTAT: -                CLIENT4_PRE_FOP (fstat, this, -                                &this_req->compound_req_v2_u.compound_fstat_req, -                                op_errno, out, -                                args->fd, args->xdata); -                break; +            CLIENT4_PRE_FOP(fstat, this, +                            &this_req->compound_req_v2_u.compound_fstat_req, +                            op_errno, out, args->fd, args->xdata); +            break;          case GF_FOP_LK: -                CLIENT4_PRE_FOP (lk, this, -                                &this_req->compound_req_v2_u.compound_lk_req, -                                op_errno, out, -                                args->cmd, &args->lock, args->fd, args->xdata); -                if (!local->fd) -                        local->fd    = fd_ref (args->fd); -                local->owner = frame->root->lk_owner; -                break; +            CLIENT4_PRE_FOP( +                lk, this, &this_req->compound_req_v2_u.compound_lk_req, +                op_errno, out, args->cmd, &args->lock, args->fd, args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            local->owner = frame->root->lk_owner; +            break;          case GF_FOP_LOOKUP: -                CLIENT4_PRE_FOP (lookup, this, -                                &this_req->compound_req_v2_u.compound_lookup_req, -                                op_errno, out, -                                &args->loc, args->xdata); -                loc_copy (&local->loc, &args->loc); -                loc_path (&local->loc, NULL); -                break; +            CLIENT4_PRE_FOP(lookup, this, +                            &this_req->compound_req_v2_u.compound_lookup_req, +                            op_errno, out, &args->loc, args->xdata); +            loc_copy(&local->loc, &args->loc); +            loc_path(&local->loc, NULL); +            break;          case GF_FOP_READDIR: -                CLIENT4_PRE_FOP (readdir, this, -                                &this_req->compound_req_v2_u.compound_readdir_req, -                                op_errno, out, -                                args->fd, args->size, args->offset, -                                args->xdata); -                break; +            CLIENT4_PRE_FOP(readdir, this, +                            &this_req->compound_req_v2_u.compound_readdir_req, +                            op_errno, out, args->fd, args->size, args->offset, +                            args->xdata); +            break;          case GF_FOP_INODELK: -                CLIENT4_PRE_FOP (inodelk, this, -                                &this_req->compound_req_v2_u.compound_inodelk_req, -                                op_errno, out, -                                &args->loc, args->cmd, &args->lock, -                                args->volume, args->xdata); -                break; +            CLIENT4_PRE_FOP(inodelk, this, +                            &this_req->compound_req_v2_u.compound_inodelk_req, +                            op_errno, out, &args->loc, args->cmd, &args->lock, +                            args->volume, args->xdata); +            break;          case GF_FOP_FINODELK: -                CLIENT4_PRE_FOP (finodelk, this, -                                &this_req->compound_req_v2_u.compound_finodelk_req, -                                op_errno, out, -                                args->fd, args->cmd, &args->lock, -                                args->volume, args->xdata); -                if (!local->fd) -                        local->fd = fd_ref (args->fd); -                local->attempt_reopen = client_is_reopen_needed -                                        (args->fd, this, remote_fd); -                break; +            CLIENT4_PRE_FOP(finodelk, this, +                            &this_req->compound_req_v2_u.compound_finodelk_req, +                            op_errno, out, args->fd, args->cmd, &args->lock, +                            args->volume, args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            local->attempt_reopen = client_is_reopen_needed(args->fd, this, +                                                            remote_fd); +            break;          case GF_FOP_ENTRYLK: -                CLIENT4_PRE_FOP (entrylk, this, -                                &this_req->compound_req_v2_u.compound_entrylk_req, -                                op_errno, out, -                                &args->loc, args->entrylkcmd, -                                args->entrylktype, args->volume, -                                args->name, args->xdata); -                break; +            CLIENT4_PRE_FOP(entrylk, this, +                            &this_req->compound_req_v2_u.compound_entrylk_req, +                            op_errno, out, &args->loc, args->entrylkcmd, +                            args->entrylktype, args->volume, args->name, +                            args->xdata); +            break;          case GF_FOP_FENTRYLK: -                CLIENT4_PRE_FOP (fentrylk, this, -                                &this_req->compound_req_v2_u.compound_fentrylk_req, -                                op_errno, out, -                                args->fd, args->entrylkcmd, -                                args->entrylktype, args->volume, -                                args->name, args->xdata); -                break; +            CLIENT4_PRE_FOP(fentrylk, this, +                            &this_req->compound_req_v2_u.compound_fentrylk_req, +                            op_errno, out, args->fd, args->entrylkcmd, +                            args->entrylktype, args->volume, args->name, +                            args->xdata); +            break;          case GF_FOP_XATTROP: -                CLIENT4_PRE_FOP (xattrop, this, -                                &this_req->compound_req_v2_u.compound_xattrop_req, -                                op_errno, out, -                                &args->loc, args->xattr, args->optype, -                                args->xdata); -                break; +            CLIENT4_PRE_FOP(xattrop, this, +                            &this_req->compound_req_v2_u.compound_xattrop_req, +                            op_errno, out, &args->loc, args->xattr, +                            args->optype, args->xdata); +            break;          case GF_FOP_FXATTROP: -                CLIENT4_PRE_FOP (fxattrop, this, -                                &this_req->compound_req_v2_u.compound_fxattrop_req, -                                op_errno, out, -                                args->fd, args->xattr, args->optype, -                                args->xdata); -                if (!local->fd) -                        local->fd = fd_ref (args->fd); -                local->attempt_reopen = client_is_reopen_needed -                                        (args->fd, this, remote_fd); -                break; +            CLIENT4_PRE_FOP(fxattrop, this, +                            &this_req->compound_req_v2_u.compound_fxattrop_req, +                            op_errno, out, args->fd, args->xattr, args->optype, +                            args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            local->attempt_reopen = client_is_reopen_needed(args->fd, this, +                                                            remote_fd); +            break;          case GF_FOP_FGETXATTR: -                CLIENT4_PRE_FOP (fgetxattr, this, -                                &this_req->compound_req_v2_u.compound_fgetxattr_req, -                                op_errno, out, -                                args->fd, args->name, args->xdata); -                break; +            CLIENT4_PRE_FOP(fgetxattr, this, +                            &this_req->compound_req_v2_u.compound_fgetxattr_req, +                            op_errno, out, args->fd, args->name, args->xdata); +            break;          case GF_FOP_FSETXATTR: -                CLIENT4_PRE_FOP (fsetxattr, this, -                                &this_req->compound_req_v2_u.compound_fsetxattr_req, -                                op_errno, out, -                                args->fd, args->flags, args->xattr, -                                args->xdata); -                break; +            CLIENT4_PRE_FOP(fsetxattr, this, +                            &this_req->compound_req_v2_u.compound_fsetxattr_req, +                            op_errno, out, args->fd, args->flags, args->xattr, +                            args->xdata); +            break;          case GF_FOP_RCHECKSUM: -                CLIENT4_PRE_FOP (rchecksum, this, -                                &this_req->compound_req_v2_u.compound_rchecksum_req, -                                op_errno, out, -                                args->fd, args->size, args->offset, -                                args->xdata); -                break; +            CLIENT4_PRE_FOP(rchecksum, this, +                            &this_req->compound_req_v2_u.compound_rchecksum_req, +                            op_errno, out, args->fd, args->size, args->offset, +                            args->xdata); +            break;          case GF_FOP_SETATTR: -                CLIENT4_PRE_FOP (setattr, this, -                                &this_req->compound_req_v2_u.compound_setattr_req, -                                op_errno, out, -                                &args->loc, args->valid, &args->stat, -                                args->xdata); -                break; +            CLIENT4_PRE_FOP(setattr, this, +                            &this_req->compound_req_v2_u.compound_setattr_req, +                            op_errno, out, &args->loc, args->valid, &args->stat, +                            args->xdata); +            break;          case GF_FOP_FSETATTR: -                CLIENT4_PRE_FOP (fsetattr, this, -                                &this_req->compound_req_v2_u.compound_fsetattr_req, -                                op_errno, out, -                                args->fd, args->valid, &args->stat, -                                args->xdata); -                break; +            CLIENT4_PRE_FOP(fsetattr, this, +                            &this_req->compound_req_v2_u.compound_fsetattr_req, +                            op_errno, out, args->fd, args->valid, &args->stat, +                            args->xdata); +            break;          case GF_FOP_READDIRP: -                CLIENT4_PRE_FOP (readdirp, this, -                                &this_req->compound_req_v2_u.compound_readdirp_req, -                                op_errno, out, -                                args->fd, args->size, args->offset, -                                args->xdata); -                if (!local->fd) -                        local->fd = fd_ref (args->fd); -                break; +            CLIENT4_PRE_FOP(readdirp, this, +                            &this_req->compound_req_v2_u.compound_readdirp_req, +                            op_errno, out, args->fd, args->size, args->offset, +                            args->xdata); +            if (!local->fd) +                local->fd = fd_ref(args->fd); +            break;          case GF_FOP_FREMOVEXATTR: -                CLIENT4_PRE_FOP (fremovexattr, this, -                                &this_req->compound_req_v2_u.compound_fremovexattr_req, -                                op_errno, out, -                                args->fd, args->name, args->xdata); -                break; +            CLIENT4_PRE_FOP( +                fremovexattr, this, +                &this_req->compound_req_v2_u.compound_fremovexattr_req, +                op_errno, out, args->fd, args->name, args->xdata); +            break;          case GF_FOP_FALLOCATE: -                CLIENT4_PRE_FOP (fallocate, this, -                                &this_req->compound_req_v2_u.compound_fallocate_req, -                                op_errno, out, -                                args->fd, args->flags, args->offset, -                                args->size, args->xdata); -                break; +            CLIENT4_PRE_FOP(fallocate, this, +                            &this_req->compound_req_v2_u.compound_fallocate_req, +                            op_errno, out, args->fd, args->flags, args->offset, +                            args->size, args->xdata); +            break;          case GF_FOP_DISCARD: -                CLIENT4_PRE_FOP (discard, this, -                                &this_req->compound_req_v2_u.compound_discard_req, -                                op_errno, out, -                                args->fd, args->offset, args->size, -                                args->xdata); -                break; +            CLIENT4_PRE_FOP(discard, this, +                            &this_req->compound_req_v2_u.compound_discard_req, +                            op_errno, out, args->fd, args->offset, args->size, +                            args->xdata); +            break;          case GF_FOP_ZEROFILL: -                CLIENT4_PRE_FOP (zerofill, this, -                                &this_req->compound_req_v2_u.compound_zerofill_req, -                                op_errno, out, -                                args->fd, args->offset, args->size, -                                args->xdata); -                break; +            CLIENT4_PRE_FOP(zerofill, this, +                            &this_req->compound_req_v2_u.compound_zerofill_req, +                            op_errno, out, args->fd, args->offset, args->size, +                            args->xdata); +            break;          case GF_FOP_IPC: -                CLIENT4_PRE_FOP (ipc, this, -                                &this_req->compound_req_v2_u.compound_ipc_req, -                                op_errno, out, -                                args->cmd, args->xdata); -                break; +            CLIENT4_PRE_FOP(ipc, this, +                            &this_req->compound_req_v2_u.compound_ipc_req, +                            op_errno, out, args->cmd, args->xdata); +            break;          case GF_FOP_SEEK: -                CLIENT4_PRE_FOP (seek, this, -                                &this_req->compound_req_v2_u.compound_seek_req, -                                op_errno, out, -                                args->fd, args->offset, args->what, -                                args->xdata); -                break; +            CLIENT4_PRE_FOP( +                seek, this, &this_req->compound_req_v2_u.compound_seek_req, +                op_errno, out, args->fd, args->offset, args->what, args->xdata); +            break;          case GF_FOP_LEASE: -                CLIENT4_PRE_FOP (lease, this, -                                &this_req->compound_req_v2_u.compound_lease_req, -                                op_errno, out, &args->loc, &args->lease, -                                args->xdata); -                break; +            CLIENT4_PRE_FOP( +                lease, this, &this_req->compound_req_v2_u.compound_lease_req, +                op_errno, out, &args->loc, &args->lease, args->xdata); +            break;          default: -                return ENOTSUP; -        } -        return 0; +            return ENOTSUP; +    } +    return 0;  out: -        return op_errno; +    return op_errno;  }  void -compound_request_cleanup_v2 (gfx_compound_req *req) +compound_request_cleanup_v2(gfx_compound_req *req)  { -        int i       = 0; -        int length  = req->compound_req_array.compound_req_array_len; -        compound_req_v2  *curr_req = NULL; - -        if (!req->compound_req_array.compound_req_array_val) -                return; - -        for (i = 0; i < length; i++) { -                curr_req = &req->compound_req_array.compound_req_array_val[i]; - -                switch (curr_req->fop_enum) { -                case GF_FOP_STAT: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, stat); -                        break; -                case GF_FOP_READLINK: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, readlink); -                        break; -                case GF_FOP_MKNOD: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, mknod); -                        break; -                case GF_FOP_MKDIR: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, mkdir); -                        break; -                case GF_FOP_UNLINK: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, unlink); -                        break; -                case GF_FOP_RMDIR: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, rmdir); -                        break; -                case GF_FOP_SYMLINK: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, symlink); -                        break; -                case GF_FOP_RENAME: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, rename); -                        break; -                case GF_FOP_LINK: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, link); -                        break; -                case GF_FOP_TRUNCATE: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, truncate); -                        break; -                case GF_FOP_OPEN: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, open); -                        break; -                case GF_FOP_READ: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, read); -                        break; -                case GF_FOP_WRITE: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, write); -                        break; -                case GF_FOP_STATFS: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, statfs); -                        break; -                case GF_FOP_FLUSH: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, flush); -                        break; -                case GF_FOP_FSYNC: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, fsync); -                        break; -                case GF_FOP_SETXATTR: -                { -                        gfx_setxattr_req *args = &CPD4_REQ_FIELD (curr_req, -                                                                  setxattr); -                        GF_FREE (args->dict.pairs.pairs_val); -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, setxattr); -                        break; -                } -                case GF_FOP_GETXATTR: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, getxattr); -                        break; -                case GF_FOP_REMOVEXATTR: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, removexattr); -                        break; -                case GF_FOP_OPENDIR: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, opendir); -                        break; -                case GF_FOP_FSYNCDIR: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, fsyncdir); -                        break; -                case GF_FOP_ACCESS: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, access); -                        break; -                case GF_FOP_CREATE: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, create); -                        break; -                case GF_FOP_FTRUNCATE: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, ftruncate); -                        break; -                case GF_FOP_FSTAT: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, fstat); -                        break; -                case GF_FOP_LK: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, lk); -                        break; -                case GF_FOP_LOOKUP: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, lookup); -                        break; -                case GF_FOP_READDIR: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, readdir); -                        break; -                case GF_FOP_INODELK: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, inodelk); -                        break; -                case GF_FOP_FINODELK: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, finodelk); -                        break; -                case GF_FOP_ENTRYLK: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, entrylk); -                        break; -                case GF_FOP_FENTRYLK: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, fentrylk); -                        break; -                case GF_FOP_XATTROP: -                { -                        gfx_xattrop_req *args = &CPD4_REQ_FIELD (curr_req, -                                                 xattrop); -                        GF_FREE (args->dict.pairs.pairs_val); -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, xattrop); -                        break; -                } -                case GF_FOP_FXATTROP: -                { -                        gfx_fxattrop_req *args = &CPD4_REQ_FIELD (curr_req, -                                                  fxattrop); -                        GF_FREE (args->dict.pairs.pairs_val); -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, fxattrop); -                        break; -                } -                case GF_FOP_FGETXATTR: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, fgetxattr); -                        break; -                case GF_FOP_FSETXATTR: -                { -                        gfx_fsetxattr_req *args = &CPD4_REQ_FIELD(curr_req, -                                                                  fsetxattr); -                        GF_FREE (args->dict.pairs.pairs_val); -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, fsetxattr); -                        break; -                } -                case GF_FOP_RCHECKSUM: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, rchecksum); -                        break; -                case GF_FOP_SETATTR: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, setattr); -                        break; -                case GF_FOP_FSETATTR: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, fsetattr); -                        break; -                case GF_FOP_READDIRP: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, readdirp); -                        break; -                case GF_FOP_FREMOVEXATTR: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, fremovexattr); -                        break; -                case GF_FOP_FALLOCATE: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, fallocate); -                        break; -                case GF_FOP_DISCARD: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, discard); -                        break; -                case GF_FOP_ZEROFILL: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, zerofill); -                        break; -                case GF_FOP_IPC: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, ipc); -                        break; -                case GF_FOP_SEEK: -                        CLIENT4_COMPOUND_FOP_CLEANUP (curr_req, seek); -                        break; -                default: -                        break; -                } -        } +    int i = 0; +    int length = req->compound_req_array.compound_req_array_len; +    compound_req_v2 *curr_req = NULL; -        GF_FREE (req->compound_req_array.compound_req_array_val); +    if (!req->compound_req_array.compound_req_array_val)          return; -} +    for (i = 0; i < length; i++) { +        curr_req = &req->compound_req_array.compound_req_array_val[i]; -void -client_compound_rsp_cleanup_v2 (gfx_compound_rsp *rsp, int len) -{ -        int i = 0; -        compound_rsp_v2            *this_rsp       = NULL; - -        for (i = 0; i < len; i++) { -                this_rsp = &rsp->compound_rsp_array.compound_rsp_array_val[i]; -                switch (this_rsp->fop_enum) { -                /* fops that need extra cleanup */ -                case GF_FOP_LK: -                { -                        gfx_lk_rsp *tmp_rsp = &CPD4_RSP_FIELD(this_rsp, lk); -                        free (tmp_rsp->flock.lk_owner.lk_owner_val); -                        break; -                } -                case GF_FOP_READLINK: -                { -                        gfx_readlink_rsp *tmp_rsp = &CPD4_RSP_FIELD(this_rsp, -                                                                    readlink); -                        free (tmp_rsp->path); -                        break; -                } -                case GF_FOP_READDIR: -                { +        switch (curr_req->fop_enum) { +            case GF_FOP_STAT: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, stat); +                break; +            case GF_FOP_READLINK: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, readlink); +                break; +            case GF_FOP_MKNOD: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, mknod); +                break; +            case GF_FOP_MKDIR: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, mkdir); +                break; +            case GF_FOP_UNLINK: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, unlink); +                break; +            case GF_FOP_RMDIR: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, rmdir); +                break; +            case GF_FOP_SYMLINK: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, symlink); +                break; +            case GF_FOP_RENAME: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, rename); +                break; +            case GF_FOP_LINK: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, link); +                break; +            case GF_FOP_TRUNCATE: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, truncate); +                break; +            case GF_FOP_OPEN: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, open); +                break; +            case GF_FOP_READ: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, read); +                break; +            case GF_FOP_WRITE: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, write); +                break; +            case GF_FOP_STATFS: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, statfs); +                break; +            case GF_FOP_FLUSH: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, flush); +                break; +            case GF_FOP_FSYNC: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, fsync); +                break; +            case GF_FOP_SETXATTR: { +                gfx_setxattr_req *args = &CPD4_REQ_FIELD(curr_req, setxattr); +                GF_FREE(args->dict.pairs.pairs_val); +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, setxattr); +                break; +            } +            case GF_FOP_GETXATTR: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, getxattr); +                break; +            case GF_FOP_REMOVEXATTR: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, removexattr); +                break; +            case GF_FOP_OPENDIR: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, opendir); +                break; +            case GF_FOP_FSYNCDIR: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, fsyncdir); +                break; +            case GF_FOP_ACCESS: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, access); +                break; +            case GF_FOP_CREATE: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, create); +                break; +            case GF_FOP_FTRUNCATE: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, ftruncate); +                break; +            case GF_FOP_FSTAT: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, fstat); +                break; +            case GF_FOP_LK: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, lk); +                break; +            case GF_FOP_LOOKUP: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, lookup); +                break; +            case GF_FOP_READDIR: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, readdir); +                break; +            case GF_FOP_INODELK: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, inodelk); +                break; +            case GF_FOP_FINODELK: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, finodelk); +                break; +            case GF_FOP_ENTRYLK: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, entrylk); +                break; +            case GF_FOP_FENTRYLK: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, fentrylk); +                break; +            case GF_FOP_XATTROP: { +                gfx_xattrop_req *args = &CPD4_REQ_FIELD(curr_req, xattrop); +                GF_FREE(args->dict.pairs.pairs_val); +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, xattrop); +                break; +            } +            case GF_FOP_FXATTROP: { +                gfx_fxattrop_req *args = &CPD4_REQ_FIELD(curr_req, fxattrop); +                GF_FREE(args->dict.pairs.pairs_val); +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, fxattrop); +                break; +            } +            case GF_FOP_FGETXATTR: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, fgetxattr); +                break; +            case GF_FOP_FSETXATTR: { +                gfx_fsetxattr_req *args = &CPD4_REQ_FIELD(curr_req, fsetxattr); +                GF_FREE(args->dict.pairs.pairs_val); +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, fsetxattr); +                break; +            } +            case GF_FOP_RCHECKSUM: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, rchecksum); +                break; +            case GF_FOP_SETATTR: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, setattr); +                break; +            case GF_FOP_FSETATTR: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, fsetattr); +                break; +            case GF_FOP_READDIRP: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, readdirp); +                break; +            case GF_FOP_FREMOVEXATTR: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, fremovexattr); +                break; +            case GF_FOP_FALLOCATE: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, fallocate); +                break; +            case GF_FOP_DISCARD: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, discard); +                break; +            case GF_FOP_ZEROFILL: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, zerofill); +                break; +            case GF_FOP_IPC: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, ipc); +                break; +            case GF_FOP_SEEK: +                CLIENT4_COMPOUND_FOP_CLEANUP(curr_req, seek); +                break; +            default: +                break; +        } +    } -                        gfx_readdir_rsp *tmp_rsp = &CPD4_RSP_FIELD(this_rsp, -                                                                   readdir); -                        clnt_readdir_rsp_cleanup_v2 (tmp_rsp); -                        break; -                } -                case GF_FOP_READDIRP: -                { +    GF_FREE(req->compound_req_array.compound_req_array_val); +    return; +} -                        gfx_readdirp_rsp *tmp_rsp = &CPD4_RSP_FIELD(this_rsp, -                                                                    readdirp); -                        clnt_readdirp_rsp_cleanup_v2 (tmp_rsp); -                        break; -                } -                case GF_FOP_RCHECKSUM: -                { - -                        gfx_rchecksum_rsp *rck = &CPD4_RSP_FIELD(this_rsp, -                                                  rchecksum); -                        if (rck->strong_checksum.strong_checksum_val) { -                                free (rck->strong_checksum.strong_checksum_val); -                        } -                        break; -                } -                default: -                        break; +void +client_compound_rsp_cleanup_v2(gfx_compound_rsp *rsp, int len) +{ +    int i = 0; +    compound_rsp_v2 *this_rsp = NULL; + +    for (i = 0; i < len; i++) { +        this_rsp = &rsp->compound_rsp_array.compound_rsp_array_val[i]; +        switch (this_rsp->fop_enum) { +            /* fops that need extra cleanup */ +            case GF_FOP_LK: { +                gfx_lk_rsp *tmp_rsp = &CPD4_RSP_FIELD(this_rsp, lk); +                free(tmp_rsp->flock.lk_owner.lk_owner_val); +                break; +            } +            case GF_FOP_READLINK: { +                gfx_readlink_rsp *tmp_rsp = &CPD4_RSP_FIELD(this_rsp, readlink); +                free(tmp_rsp->path); +                break; +            } +            case GF_FOP_READDIR: { +                gfx_readdir_rsp *tmp_rsp = &CPD4_RSP_FIELD(this_rsp, readdir); +                clnt_readdir_rsp_cleanup_v2(tmp_rsp); +                break; +            } +            case GF_FOP_READDIRP: { +                gfx_readdirp_rsp *tmp_rsp = &CPD4_RSP_FIELD(this_rsp, readdirp); +                clnt_readdirp_rsp_cleanup_v2(tmp_rsp); +                break; +            } +            case GF_FOP_RCHECKSUM: { +                gfx_rchecksum_rsp *rck = &CPD4_RSP_FIELD(this_rsp, rchecksum); +                if (rck->strong_checksum.strong_checksum_val) { +                    free(rck->strong_checksum.strong_checksum_val);                  } +                break; +            } +            default: +                break;          } -        return; +    } +    return;  }  int -client_process_response_v2 (call_frame_t *frame, xlator_t *this, -                            struct rpc_req *req, gfx_compound_rsp *rsp, -                            compound_args_cbk_t *args_cbk, -                            int index) +client_process_response_v2(call_frame_t *frame, xlator_t *this, +                           struct rpc_req *req, gfx_compound_rsp *rsp, +                           compound_args_cbk_t *args_cbk, int index)  { -        int                      ret            = 0; -        dict_t                  *xdata          = NULL; -        dict_t                  *xattr          = NULL; -        struct iovec             vector[MAX_IOVEC] = {{0}, }; -        gf_dirent_t              entries; -        default_args_cbk_t      *this_args_cbk  = &args_cbk->rsp_list[index]; -        clnt_local_t            *local          = frame->local; -        compound_rsp_v2         *this_rsp       = NULL; -        compound_args_t         *args           = local->compound_args; - -        this_rsp = &rsp->compound_rsp_array.compound_rsp_array_val[index]; -        args_cbk->enum_list[index] = this_rsp->fop_enum; - -        INIT_LIST_HEAD (&entries.list); - -        switch (args_cbk->enum_list[index]) { - +    int ret = 0; +    dict_t *xdata = NULL; +    dict_t *xattr = NULL; +    struct iovec vector[MAX_IOVEC] = { +        {0}, +    }; +    gf_dirent_t entries; +    default_args_cbk_t *this_args_cbk = &args_cbk->rsp_list[index]; +    clnt_local_t *local = frame->local; +    compound_rsp_v2 *this_rsp = NULL; +    compound_args_t *args = local->compound_args; + +    this_rsp = &rsp->compound_rsp_array.compound_rsp_array_val[index]; +    args_cbk->enum_list[index] = this_rsp->fop_enum; + +    INIT_LIST_HEAD(&entries.list); + +    switch (args_cbk->enum_list[index]) {          case GF_FOP_STAT: -        case GF_FOP_FSTAT: -        { -                gfx_common_iatt_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_stat_rsp; +        case GF_FOP_FSTAT: { +            gfx_common_iatt_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_stat_rsp; -                client_post_common_iatt (this, tmp_rsp, &this_args_cbk->stat, &xdata); +            client_post_common_iatt(this, tmp_rsp, &this_args_cbk->stat, +                                    &xdata); -                CLIENT4_POST_FOP_TYPE (stat, common_iatt, this_rsp, this_args_cbk, -                                       &this_args_cbk->stat, xdata); -                break; +            CLIENT4_POST_FOP_TYPE(stat, common_iatt, this_rsp, this_args_cbk, +                                  &this_args_cbk->stat, xdata); +            break;          } -        case GF_FOP_READLINK: -        { -                gfx_readlink_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_readlink_rsp; +        case GF_FOP_READLINK: { +            gfx_readlink_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_readlink_rsp; -                gfx_stat_to_iattx (&tmp_rsp->buf, &this_args_cbk->stat); -                xdr_to_dict (&tmp_rsp->xdata, &xdata); +            gfx_stat_to_iattx(&tmp_rsp->buf, &this_args_cbk->stat); +            xdr_to_dict(&tmp_rsp->xdata, &xdata); -                CLIENT4_POST_FOP_TYPE (readlink, readlink, this_rsp, this_args_cbk, -                                      tmp_rsp->path, &this_args_cbk->stat, -                                      xdata); -                break; +            CLIENT4_POST_FOP_TYPE(readlink, readlink, this_rsp, this_args_cbk, +                                  tmp_rsp->path, &this_args_cbk->stat, xdata); +            break;          }          case GF_FOP_MKDIR:          case GF_FOP_MKNOD:          case GF_FOP_SYMLINK: -        case GF_FOP_LINK: -        { -                gfx_common_3iatt_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_mknod_rsp; +        case GF_FOP_LINK: { +            gfx_common_3iatt_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_mknod_rsp; -                client_post_common_3iatt (this, tmp_rsp, &this_args_cbk->stat, -                                          &this_args_cbk->preparent, -                                          &this_args_cbk->postparent, &xdata); -                CLIENT4_POST_FOP_TYPE (mknod, common_3iatt, this_rsp, this_args_cbk, -                                       local->loc.inode, &this_args_cbk->stat, -                                       &this_args_cbk->preparent, -                                       &this_args_cbk->postparent, xdata); -                break; +            client_post_common_3iatt(this, tmp_rsp, &this_args_cbk->stat, +                                     &this_args_cbk->preparent, +                                     &this_args_cbk->postparent, &xdata); +            CLIENT4_POST_FOP_TYPE(mknod, common_3iatt, this_rsp, this_args_cbk, +                                  local->loc.inode, &this_args_cbk->stat, +                                  &this_args_cbk->preparent, +                                  &this_args_cbk->postparent, xdata); +            break;          }          case GF_FOP_UNLINK: -        case GF_FOP_RMDIR: -        { -                gfx_common_2iatt_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_unlink_rsp; +        case GF_FOP_RMDIR: { +            gfx_common_2iatt_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_unlink_rsp; -                client_post_common_2iatt (this, tmp_rsp, &this_args_cbk->preparent, -                                          &this_args_cbk->postparent, &xdata); -                CLIENT4_POST_FOP_TYPE (unlink, common_2iatt, this_rsp, this_args_cbk, -                                       &this_args_cbk->preparent, -                                       &this_args_cbk->postparent, xdata); -                break; -        } -        case GF_FOP_RENAME: -        { -                gfx_rename_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_rename_rsp; - -                client_post_rename_v2 (this, tmp_rsp, &this_args_cbk->stat, -                                    &this_args_cbk->preparent, -                                    &this_args_cbk->postparent, -                                    &this_args_cbk->preparent2, -                                    &this_args_cbk->postparent2, &xdata); -                CLIENT4_POST_FOP_TYPE (rename, rename, this_rsp, this_args_cbk, -                                      &this_args_cbk->stat, -                                      &this_args_cbk->preparent, -                                      &this_args_cbk->postparent, -                                      &this_args_cbk->preparent2, -                                      &this_args_cbk->postparent2, xdata); -                break; +            client_post_common_2iatt(this, tmp_rsp, &this_args_cbk->preparent, +                                     &this_args_cbk->postparent, &xdata); +            CLIENT4_POST_FOP_TYPE(unlink, common_2iatt, this_rsp, this_args_cbk, +                                  &this_args_cbk->preparent, +                                  &this_args_cbk->postparent, xdata); +            break; +        } +        case GF_FOP_RENAME: { +            gfx_rename_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_rename_rsp; + +            client_post_rename_v2( +                this, tmp_rsp, &this_args_cbk->stat, &this_args_cbk->preparent, +                &this_args_cbk->postparent, &this_args_cbk->preparent2, +                &this_args_cbk->postparent2, &xdata); +            CLIENT4_POST_FOP_TYPE( +                rename, rename, this_rsp, this_args_cbk, &this_args_cbk->stat, +                &this_args_cbk->preparent, &this_args_cbk->postparent, +                &this_args_cbk->preparent2, &this_args_cbk->postparent2, xdata); +            break;          }          case GF_FOP_WRITE:          case GF_FOP_TRUNCATE: @@ -3026,97 +2780,88 @@ client_process_response_v2 (call_frame_t *frame, xlator_t *this,          case GF_FOP_DISCARD:          case GF_FOP_FALLOCATE:          case GF_FOP_FSETATTR: -        case GF_FOP_SETATTR: -        { -                gfx_common_2iatt_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_truncate_rsp; - -                client_post_common_2iatt (this, tmp_rsp, &this_args_cbk->prestat, -                                          &this_args_cbk->poststat, &xdata); -                CLIENT4_POST_FOP_TYPE (truncate, common_2iatt, this_rsp, this_args_cbk, -                                      &this_args_cbk->prestat, -                                      &this_args_cbk->poststat, xdata); -                break; -        } -        case GF_FOP_OPEN: -        { -                gfx_open_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_open_rsp; - -                xdr_to_dict (&tmp_rsp->xdata, &xdata); -                CLIENT4_POST_FOP_TYPE (open, open, this_rsp, this_args_cbk, local->fd, -                                      xdata); -                if (-1 != this_args_cbk->op_ret) -                        ret = client_add_fd_to_saved_fds (this, local->fd, -                                                          &local->loc, -                                                          args->req_list[index].flags, -                                                          tmp_rsp->fd, -                                                          0); -                break; -        } -        case GF_FOP_READ: -        { -                gfx_read_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_read_rsp; - -                client_post_readv_v2 (this, tmp_rsp, &this_args_cbk->iobref, -                                  req->rsp_iobref, &this_args_cbk->stat, -                                  vector, &req->rsp[1], &this_args_cbk->count, -                                  &xdata); - -                /* Each read should be given read response that only -                 * corresponds to its request. -                 * Modify the iovecs accordingly. -                 * After each read, store the length of data already read -                 * so that the next ones can continue from there. -                 */ -                if (local->read_length) { -                        vector[0].iov_base += local->read_length; -                        local->read_length += tmp_rsp->op_ret; -                } else { -                        local->read_length = tmp_rsp->op_ret; -                } - -                args_readv_cbk_store (this_args_cbk, tmp_rsp->op_ret, -                                      gf_error_to_errno (tmp_rsp->op_errno), -                                      vector, this_args_cbk->count, -                                      &this_args_cbk->stat, -                                      this_args_cbk->iobref, xdata); - -                if (tmp_rsp->op_ret >= 0) -                        if (local->attempt_reopen) -                                client_attempt_reopen (local->fd, this); +        case GF_FOP_SETATTR: { +            gfx_common_2iatt_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_truncate_rsp; -                break; -        } -        case GF_FOP_STATFS: -        { -                gfx_statfs_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_statfs_rsp; - -                gf_statfs_to_statfs (&tmp_rsp->statfs, &this_args_cbk->statvfs); -                xdr_to_dict (&tmp_rsp->xdata, &xdata); - -                CLIENT4_POST_FOP_TYPE (statfs, statfs, this_rsp, this_args_cbk, -                                      &this_args_cbk->statvfs, xdata); -                break; -         } -        case GF_FOP_FLUSH: -        { -                gfx_common_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_flush_rsp; - -                xdr_to_dict (&tmp_rsp->xdata, &xdata); - -                CLIENT4_POST_FOP (flush, this_rsp, this_args_cbk, xdata); -                if (this_args_cbk->op_ret >= 0 && !fd_is_anonymous (local->fd)) { -                        /* Delete all saved locks of the owner issuing flush */ -                        ret = delete_granted_locks_owner (local->fd, &local->owner); -                        gf_msg_trace (this->name, 0, -                                      "deleting locks of owner (%s) returned %d", -                                      lkowner_utoa (&local->owner), ret); -                } -                break; +            client_post_common_2iatt(this, tmp_rsp, &this_args_cbk->prestat, +                                     &this_args_cbk->poststat, &xdata); +            CLIENT4_POST_FOP_TYPE(truncate, common_2iatt, this_rsp, +                                  this_args_cbk, &this_args_cbk->prestat, +                                  &this_args_cbk->poststat, xdata); +            break; +        } +        case GF_FOP_OPEN: { +            gfx_open_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_open_rsp; + +            xdr_to_dict(&tmp_rsp->xdata, &xdata); +            CLIENT4_POST_FOP_TYPE(open, open, this_rsp, this_args_cbk, +                                  local->fd, xdata); +            if (-1 != this_args_cbk->op_ret) +                ret = client_add_fd_to_saved_fds(this, local->fd, &local->loc, +                                                 args->req_list[index].flags, +                                                 tmp_rsp->fd, 0); +            break; +        } +        case GF_FOP_READ: { +            gfx_read_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_read_rsp; + +            client_post_readv_v2(this, tmp_rsp, &this_args_cbk->iobref, +                                 req->rsp_iobref, &this_args_cbk->stat, vector, +                                 &req->rsp[1], &this_args_cbk->count, &xdata); + +            /* Each read should be given read response that only +             * corresponds to its request. +             * Modify the iovecs accordingly. +             * After each read, store the length of data already read +             * so that the next ones can continue from there. +             */ +            if (local->read_length) { +                vector[0].iov_base += local->read_length; +                local->read_length += tmp_rsp->op_ret; +            } else { +                local->read_length = tmp_rsp->op_ret; +            } + +            args_readv_cbk_store(this_args_cbk, tmp_rsp->op_ret, +                                 gf_error_to_errno(tmp_rsp->op_errno), vector, +                                 this_args_cbk->count, &this_args_cbk->stat, +                                 this_args_cbk->iobref, xdata); + +            if (tmp_rsp->op_ret >= 0) +                if (local->attempt_reopen) +                    client_attempt_reopen(local->fd, this); + +            break; +        } +        case GF_FOP_STATFS: { +            gfx_statfs_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_statfs_rsp; + +            gf_statfs_to_statfs(&tmp_rsp->statfs, &this_args_cbk->statvfs); +            xdr_to_dict(&tmp_rsp->xdata, &xdata); + +            CLIENT4_POST_FOP_TYPE(statfs, statfs, this_rsp, this_args_cbk, +                                  &this_args_cbk->statvfs, xdata); +            break; +        } +        case GF_FOP_FLUSH: { +            gfx_common_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_flush_rsp; + +            xdr_to_dict(&tmp_rsp->xdata, &xdata); + +            CLIENT4_POST_FOP(flush, this_rsp, this_args_cbk, xdata); +            if (this_args_cbk->op_ret >= 0 && !fd_is_anonymous(local->fd)) { +                /* Delete all saved locks of the owner issuing flush */ +                ret = delete_granted_locks_owner(local->fd, &local->owner); +                gf_msg_trace(this->name, 0, +                             "deleting locks of owner (%s) returned %d", +                             lkowner_utoa(&local->owner), ret); +            } +            break;          }          case GF_FOP_FSYNCDIR:          case GF_FOP_ACCESS: @@ -3128,290 +2873,284 @@ client_process_response_v2 (call_frame_t *frame, xlator_t *this,          case GF_FOP_FINODELK:          case GF_FOP_ENTRYLK:          case GF_FOP_FENTRYLK: -        case GF_FOP_IPC: -        { -                gfx_common_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_setxattr_rsp; +        case GF_FOP_IPC: { +            gfx_common_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_setxattr_rsp; -                xdr_to_dict (&tmp_rsp->xdata, &xdata); +            xdr_to_dict(&tmp_rsp->xdata, &xdata); -                CLIENT4_POST_FOP (setxattr, this_rsp, this_args_cbk, xdata); -                break; +            CLIENT4_POST_FOP(setxattr, this_rsp, this_args_cbk, xdata); +            break;          }          case GF_FOP_GETXATTR:          case GF_FOP_FGETXATTR:          case GF_FOP_XATTROP: -        case GF_FOP_FXATTROP: -        { -                gfx_common_dict_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_getxattr_rsp; +        case GF_FOP_FXATTROP: { +            gfx_common_dict_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_getxattr_rsp; -                client_post_common_dict (this, tmp_rsp, &xattr, &xdata); +            client_post_common_dict(this, tmp_rsp, &xattr, &xdata); -                CLIENT4_POST_FOP_TYPE (getxattr, common_dict, this_rsp, this_args_cbk, xattr, -                                      xdata); -                break; +            CLIENT4_POST_FOP_TYPE(getxattr, common_dict, this_rsp, +                                  this_args_cbk, xattr, xdata); +            break;          } -        case GF_FOP_OPENDIR: -        { -                gfx_open_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_opendir_rsp; +        case GF_FOP_OPENDIR: { +            gfx_open_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_opendir_rsp; -                xdr_to_dict (&tmp_rsp->xdata, &xdata); +            xdr_to_dict(&tmp_rsp->xdata, &xdata); -                CLIENT4_POST_FOP_TYPE (opendir, open, this_rsp, this_args_cbk, -                                      local->fd, xdata); -                if (-1 != this_args_cbk->op_ret) -                        ret = client_add_fd_to_saved_fds (this, local->fd, -                                                          &local->loc, -                                                          args->req_list[index].flags, -                                                          tmp_rsp->fd, 0); -                break; +            CLIENT4_POST_FOP_TYPE(opendir, open, this_rsp, this_args_cbk, +                                  local->fd, xdata); +            if (-1 != this_args_cbk->op_ret) +                ret = client_add_fd_to_saved_fds(this, local->fd, &local->loc, +                                                 args->req_list[index].flags, +                                                 tmp_rsp->fd, 0); +            break;          } -        case GF_FOP_CREATE: -        { -                gfx_create_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_create_rsp; - -                client_post_create_v2 (this, tmp_rsp, &this_args_cbk->stat, -                                   &this_args_cbk->preparent, -                                   &this_args_cbk->postparent, local, &xdata); - -                CLIENT4_POST_FOP_TYPE (create, create, this_rsp, this_args_cbk, -                                      local->fd, local->loc.inode, -                                      &this_args_cbk->stat, -                                      &this_args_cbk->preparent, -                                      &this_args_cbk->postparent, xdata); -                if (-1 != this_args_cbk->op_ret) -                        ret = client_add_fd_to_saved_fds (this, local->fd, -                                                          &local->loc, -                                                          args->req_list[index].flags, -                                                          tmp_rsp->fd, 0); -                break; +        case GF_FOP_CREATE: { +            gfx_create_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_create_rsp; + +            client_post_create_v2(this, tmp_rsp, &this_args_cbk->stat, +                                  &this_args_cbk->preparent, +                                  &this_args_cbk->postparent, local, &xdata); + +            CLIENT4_POST_FOP_TYPE( +                create, create, this_rsp, this_args_cbk, local->fd, +                local->loc.inode, &this_args_cbk->stat, +                &this_args_cbk->preparent, &this_args_cbk->postparent, xdata); +            if (-1 != this_args_cbk->op_ret) +                ret = client_add_fd_to_saved_fds(this, local->fd, &local->loc, +                                                 args->req_list[index].flags, +                                                 tmp_rsp->fd, 0); +            break;          } -        case GF_FOP_LK: -        { -                gfx_lk_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_lk_rsp; +        case GF_FOP_LK: { +            gfx_lk_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_lk_rsp; -                client_post_lk_v2 (this, tmp_rsp, &this_args_cbk->lock, &xdata); +            client_post_lk_v2(this, tmp_rsp, &this_args_cbk->lock, &xdata); -                CLIENT4_POST_FOP_TYPE (lk, lk, this_rsp, this_args_cbk, -                                      &this_args_cbk->lock, xdata); -                break; +            CLIENT4_POST_FOP_TYPE(lk, lk, this_rsp, this_args_cbk, +                                  &this_args_cbk->lock, xdata); +            break;          } -        case GF_FOP_LOOKUP: -        { -                gfx_common_2iatt_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_lookup_rsp; +        case GF_FOP_LOOKUP: { +            gfx_common_2iatt_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_lookup_rsp; -                client_post_common_2iatt (this, tmp_rsp, &this_args_cbk->stat, -                                          &this_args_cbk->postparent, &xdata); -                CLIENT4_POST_FOP_TYPE (lookup, common_2iatt, this_rsp, this_args_cbk, -                                      local->loc.inode, &this_args_cbk->stat, -                                      xdata, &this_args_cbk->postparent); -                break; +            client_post_common_2iatt(this, tmp_rsp, &this_args_cbk->stat, +                                     &this_args_cbk->postparent, &xdata); +            CLIENT4_POST_FOP_TYPE(lookup, common_2iatt, this_rsp, this_args_cbk, +                                  local->loc.inode, &this_args_cbk->stat, xdata, +                                  &this_args_cbk->postparent); +            break;          } -        case GF_FOP_READDIR: -        { -                gfx_readdir_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_readdir_rsp; +        case GF_FOP_READDIR: { +            gfx_readdir_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_readdir_rsp; -                client_post_readdir_v2 (this, tmp_rsp, &entries, &xdata); +            client_post_readdir_v2(this, tmp_rsp, &entries, &xdata); -                CLIENT4_POST_FOP_TYPE (readdir, readdir, this_rsp, this_args_cbk, -                                      &entries, xdata); -                break; +            CLIENT4_POST_FOP_TYPE(readdir, readdir, this_rsp, this_args_cbk, +                                  &entries, xdata); +            break;          } -        case GF_FOP_RCHECKSUM: -        { -                gfx_rchecksum_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_rchecksum_rsp; +        case GF_FOP_RCHECKSUM: { +            gfx_rchecksum_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_rchecksum_rsp; -                xdr_to_dict (&tmp_rsp->xdata, &xdata); +            xdr_to_dict(&tmp_rsp->xdata, &xdata); -                CLIENT4_POST_FOP_TYPE (rchecksum, rchecksum, this_rsp, this_args_cbk, -                                      tmp_rsp->weak_checksum, -                                      (uint8_t *)tmp_rsp->strong_checksum.strong_checksum_val, -                                      xdata); -                break; +            CLIENT4_POST_FOP_TYPE( +                rchecksum, rchecksum, this_rsp, this_args_cbk, +                tmp_rsp->weak_checksum, +                (uint8_t *)tmp_rsp->strong_checksum.strong_checksum_val, xdata); +            break;          } -        case GF_FOP_READDIRP: -        { -                gfx_readdirp_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_readdirp_rsp; +        case GF_FOP_READDIRP: { +            gfx_readdirp_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_readdirp_rsp; -                client_post_readdirp_v2 (this, tmp_rsp, local->fd, &entries, -                                      &xdata); +            client_post_readdirp_v2(this, tmp_rsp, local->fd, &entries, &xdata); -                CLIENT4_POST_FOP_TYPE (readdirp, readdirp, this_rsp, this_args_cbk, -                                      &entries, xdata); -                break; +            CLIENT4_POST_FOP_TYPE(readdirp, readdirp, this_rsp, this_args_cbk, +                                  &entries, xdata); +            break;          } -        case GF_FOP_SEEK: -        { -                gfx_seek_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_seek_rsp; +        case GF_FOP_SEEK: { +            gfx_seek_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_seek_rsp; -                xdr_to_dict (&tmp_rsp->xdata, &xdata); +            xdr_to_dict(&tmp_rsp->xdata, &xdata); -                CLIENT4_POST_FOP_TYPE (seek, seek, this_rsp, this_args_cbk, -                                      tmp_rsp->offset, xdata); -                break; +            CLIENT4_POST_FOP_TYPE(seek, seek, this_rsp, this_args_cbk, +                                  tmp_rsp->offset, xdata); +            break;          } -        case GF_FOP_LEASE: -        { -                gfx_lease_rsp *tmp_rsp = NULL; -                tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_lease_rsp; +        case GF_FOP_LEASE: { +            gfx_lease_rsp *tmp_rsp = NULL; +            tmp_rsp = &this_rsp->compound_rsp_v2_u.compound_lease_rsp; -                client_post_lease_v2 (this, tmp_rsp, &this_args_cbk->lease, -                                   &xdata); +            client_post_lease_v2(this, tmp_rsp, &this_args_cbk->lease, &xdata); -                CLIENT4_POST_FOP_TYPE (lease, lease, this_rsp, this_args_cbk, -                                      &this_args_cbk->lease, xdata); -                break; +            CLIENT4_POST_FOP_TYPE(lease, lease, this_rsp, this_args_cbk, +                                  &this_args_cbk->lease, xdata); +            break;          }          default: -                return -ENOTSUP; -        } - -        if (xdata) -                dict_unref (xdata); -        if (xattr) -                dict_unref (xattr); -        gf_dirent_free (&entries); -        return 0; +            return -ENOTSUP; +    } + +    if (xdata) +        dict_unref(xdata); +    if (xattr) +        dict_unref(xattr); +    gf_dirent_free(&entries); +    return 0;  }  extern int -client3_3_releasedir_cbk (struct rpc_req *req, struct iovec *iov, int count, -                          void *myframe); +client3_3_releasedir_cbk(struct rpc_req *req, struct iovec *iov, int count, +                         void *myframe);  extern int -client3_3_release_cbk (struct rpc_req *req, struct iovec *iov, int count, -                       void *myframe); +client3_3_release_cbk(struct rpc_req *req, struct iovec *iov, int count, +                      void *myframe);  extern int -client4_0_releasedir_cbk (struct rpc_req *req, struct iovec *iov, int count, -                          void *myframe); +client4_0_releasedir_cbk(struct rpc_req *req, struct iovec *iov, int count, +                         void *myframe);  extern int -client4_0_release_cbk (struct rpc_req *req, struct iovec *iov, int count, -                       void *myframe); +client4_0_release_cbk(struct rpc_req *req, struct iovec *iov, int count, +                      void *myframe);  static int -send_release4_0_over_wire (xlator_t *this, clnt_fd_ctx_t *fdctx, -                           call_frame_t *fr) +send_release4_0_over_wire(xlator_t *this, clnt_fd_ctx_t *fdctx, +                          call_frame_t *fr)  { -        clnt_conf_t  *conf = NULL; -        conf = (clnt_conf_t *) this->private; -        if (fdctx->is_dir) { -                gfx_releasedir_req  req = {{0,},}; -                memcpy (req.gfid, fdctx->gfid, 16); -                req.fd = fdctx->remote_fd; - -                gf_msg_trace (this->name, 0, "sending releasedir on fd"); -                (void)client_submit_request (this, &req, fr, conf->fops, -                                             GFS3_OP_RELEASEDIR, -                                             client4_0_releasedir_cbk, -                                             NULL, NULL, 0, NULL, 0, NULL, -                                             (xdrproc_t)xdr_gfx_releasedir_req); -        } else { -                gfx_release_req  req = {{0,},}; -                memcpy (req.gfid, fdctx->gfid, 16); -                req.fd = fdctx->remote_fd; -                gf_msg_trace (this->name, 0, "sending release on fd"); -                (void)client_submit_request (this, &req, fr, conf->fops, -                                             GFS3_OP_RELEASE, -                                             client4_0_release_cbk, NULL, -                                             NULL, 0, NULL, 0, NULL, -                                             (xdrproc_t)xdr_gfx_release_req); -        } - -        return 0; +    clnt_conf_t *conf = NULL; +    conf = (clnt_conf_t *)this->private; +    if (fdctx->is_dir) { +        gfx_releasedir_req req = { +            { +                0, +            }, +        }; +        memcpy(req.gfid, fdctx->gfid, 16); +        req.fd = fdctx->remote_fd; + +        gf_msg_trace(this->name, 0, "sending releasedir on fd"); +        (void)client_submit_request( +            this, &req, fr, conf->fops, GFS3_OP_RELEASEDIR, +            client4_0_releasedir_cbk, NULL, NULL, 0, NULL, 0, NULL, +            (xdrproc_t)xdr_gfx_releasedir_req); +    } else { +        gfx_release_req req = { +            { +                0, +            }, +        }; +        memcpy(req.gfid, fdctx->gfid, 16); +        req.fd = fdctx->remote_fd; +        gf_msg_trace(this->name, 0, "sending release on fd"); +        (void)client_submit_request(this, &req, fr, conf->fops, GFS3_OP_RELEASE, +                                    client4_0_release_cbk, NULL, NULL, 0, NULL, +                                    0, NULL, (xdrproc_t)xdr_gfx_release_req); +    } + +    return 0;  }  static int -send_release3_3_over_wire (xlator_t *this, clnt_fd_ctx_t *fdctx, -                           call_frame_t *fr) +send_release3_3_over_wire(xlator_t *this, clnt_fd_ctx_t *fdctx, +                          call_frame_t *fr)  { -        clnt_conf_t  *conf        = NULL; -        conf = (clnt_conf_t *) this->private; -        if (fdctx->is_dir) { -                gfs3_releasedir_req  req = {{0,},}; -                memcpy (req.gfid, fdctx->gfid, 16); -                req.fd = fdctx->remote_fd; -                gf_msg_trace (this->name, 0, "sending releasedir on fd"); -                (void)client_submit_request (this, &req, fr, conf->fops, -                                             GFS3_OP_RELEASEDIR, -                                             client3_3_releasedir_cbk, -                                             NULL, NULL, 0, NULL, 0, NULL, -                                             (xdrproc_t)xdr_gfs3_releasedir_req); -        } else { -                gfs3_release_req  req = {{0,},}; -                memcpy (req.gfid, fdctx->gfid, 16); -                req.fd = fdctx->remote_fd; -                gf_msg_trace (this->name, 0, "sending release on fd"); -                (void)client_submit_request (this, &req, fr, conf->fops, -                                             GFS3_OP_RELEASE, -                                             client3_3_release_cbk, NULL, -                                             NULL, 0, NULL, 0, NULL, -                                             (xdrproc_t)xdr_gfs3_release_req); -        } - -        return 0; +    clnt_conf_t *conf = NULL; +    conf = (clnt_conf_t *)this->private; +    if (fdctx->is_dir) { +        gfs3_releasedir_req req = { +            { +                0, +            }, +        }; +        memcpy(req.gfid, fdctx->gfid, 16); +        req.fd = fdctx->remote_fd; +        gf_msg_trace(this->name, 0, "sending releasedir on fd"); +        (void)client_submit_request( +            this, &req, fr, conf->fops, GFS3_OP_RELEASEDIR, +            client3_3_releasedir_cbk, NULL, NULL, 0, NULL, 0, NULL, +            (xdrproc_t)xdr_gfs3_releasedir_req); +    } else { +        gfs3_release_req req = { +            { +                0, +            }, +        }; +        memcpy(req.gfid, fdctx->gfid, 16); +        req.fd = fdctx->remote_fd; +        gf_msg_trace(this->name, 0, "sending release on fd"); +        (void)client_submit_request(this, &req, fr, conf->fops, GFS3_OP_RELEASE, +                                    client3_3_release_cbk, NULL, NULL, 0, NULL, +                                    0, NULL, (xdrproc_t)xdr_gfs3_release_req); +    } + +    return 0;  }  int -client_fdctx_destroy (xlator_t *this, clnt_fd_ctx_t *fdctx) +client_fdctx_destroy(xlator_t *this, clnt_fd_ctx_t *fdctx)  { -        clnt_conf_t  *conf        = NULL; -        call_frame_t *fr          = NULL; -        int32_t       ret         = -1; -        char          parent_down = 0; -        fd_lk_ctx_t  *lk_ctx      = NULL; - -        GF_VALIDATE_OR_GOTO ("client", this, out); -        GF_VALIDATE_OR_GOTO (this->name, fdctx, out); - -        conf = (clnt_conf_t *) this->private; - -        if (fdctx->remote_fd == -1) { -                gf_msg_debug (this->name, 0, "not a valid fd"); -                goto out; -        } - -        pthread_mutex_lock (&conf->lock); -        { -                parent_down   = conf->parent_down; -        } -        pthread_mutex_unlock (&conf->lock); -        lk_ctx        = fdctx->lk_ctx; -        fdctx->lk_ctx = NULL; - -        if (lk_ctx) -                fd_lk_ctx_unref (lk_ctx); - -        if (!parent_down) -                rpc_clnt_ref (conf->rpc); -        else -                goto out; - -        fr = create_frame (this, this->ctx->pool); -        if (fr == NULL) { -                goto out; -        } - -        ret = 0; - -        if (conf->fops->progver == GLUSTER_FOP_VERSION) -                send_release3_3_over_wire (this, fdctx, fr); -        else -                send_release4_0_over_wire (this, fdctx, fr); - -        rpc_clnt_unref (conf->rpc); +    clnt_conf_t *conf = NULL; +    call_frame_t *fr = NULL; +    int32_t ret = -1; +    char parent_down = 0; +    fd_lk_ctx_t *lk_ctx = NULL; + +    GF_VALIDATE_OR_GOTO("client", this, out); +    GF_VALIDATE_OR_GOTO(this->name, fdctx, out); + +    conf = (clnt_conf_t *)this->private; + +    if (fdctx->remote_fd == -1) { +        gf_msg_debug(this->name, 0, "not a valid fd"); +        goto out; +    } + +    pthread_mutex_lock(&conf->lock); +    { +        parent_down = conf->parent_down; +    } +    pthread_mutex_unlock(&conf->lock); +    lk_ctx = fdctx->lk_ctx; +    fdctx->lk_ctx = NULL; + +    if (lk_ctx) +        fd_lk_ctx_unref(lk_ctx); + +    if (!parent_down) +        rpc_clnt_ref(conf->rpc); +    else +        goto out; + +    fr = create_frame(this, this->ctx->pool); +    if (fr == NULL) { +        goto out; +    } + +    ret = 0; + +    if (conf->fops->progver == GLUSTER_FOP_VERSION) +        send_release3_3_over_wire(this, fdctx, fr); +    else +        send_release4_0_over_wire(this, fdctx, fr); + +    rpc_clnt_unref(conf->rpc);  out: -        if (fdctx) { -                fdctx->remote_fd = -1; -                GF_FREE (fdctx); -        } +    if (fdctx) { +        fdctx->remote_fd = -1; +        GF_FREE(fdctx); +    } -        return ret; +    return ret;  }  | 
