diff options
Diffstat (limited to 'xlators/features/cloudsync/src/cloudsync.c')
| -rw-r--r-- | xlators/features/cloudsync/src/cloudsync.c | 2460 | 
1 files changed, 1197 insertions, 1263 deletions
diff --git a/xlators/features/cloudsync/src/cloudsync.c b/xlators/features/cloudsync/src/cloudsync.c index 3e1cd6a7111..00437aaf80c 100644 --- a/xlators/features/cloudsync/src/cloudsync.c +++ b/xlators/features/cloudsync/src/cloudsync.c @@ -19,1713 +19,1647 @@  #include <dlfcn.h>  void -cs_cleanup_private (cs_private_t *priv) +cs_cleanup_private(cs_private_t *priv)  { -        if (priv) { -                if (priv->stores) { -                        priv->stores->fini (priv->stores->config); -                        GF_FREE (priv->stores); -                } - -                pthread_spin_destroy (&priv->lock); -                GF_FREE (priv); +    if (priv) { +        if (priv->stores) { +            priv->stores->fini(priv->stores->config); +            GF_FREE(priv->stores);          } -        return; +        pthread_spin_destroy(&priv->lock); +        GF_FREE(priv); +    } + +    return;  }  struct cs_plugin plugins[] = { -        { -          .name = "cloudsyncs3", -          .library = "cloudsyncs3.so", -          .description = "cloudsync s3 store." -        }, +    {.name = "cloudsyncs3", +     .library = "cloudsyncs3.so", +     .description = "cloudsync s3 store."}, -        {.name = NULL}, +    {.name = NULL},  };  int -cs_init (xlator_t *this) +cs_init(xlator_t *this)  { -        cs_private_t            *priv = NULL; -        gf_boolean_t            per_vol = _gf_false; -        int                     ret = 0; -        char                    *libpath = NULL; -        store_methods_t         *store_methods = NULL; -        void                    *handle = NULL; -        char                    *temp_str = NULL; -        int                      index = 0; -        char                    *libname = NULL; - -        priv = GF_CALLOC (1, sizeof (*priv), gf_cs_mt_cs_private_t); -        if (!priv) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "insufficient memory"); -                goto out; +    cs_private_t *priv = NULL; +    gf_boolean_t per_vol = _gf_false; +    int ret = 0; +    char *libpath = NULL; +    store_methods_t *store_methods = NULL; +    void *handle = NULL; +    char *temp_str = NULL; +    int index = 0; +    char *libname = NULL; + +    priv = GF_CALLOC(1, sizeof(*priv), gf_cs_mt_cs_private_t); +    if (!priv) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, "insufficient memory"); +        goto out; +    } + +    priv->this = this; + +    this->local_pool = mem_pool_new(cs_local_t, 512); +    if (!this->local_pool) { +        gf_msg(this->name, GF_LOG_ERROR, 0, ENOMEM, "initialisation failed."); +        ret = -1; +        goto out; +    } + +    this->private = priv; + +    /* temp workaround. Should be configurable through glusterd*/ +    per_vol = _gf_true; + +    if (per_vol) { +        if (dict_get_str(this->options, "cloudsync-storetype", &temp_str) == +            0) { +            for (index = 0; plugins[index].name; index++) { +                if (!strcmp(temp_str, plugins[index].name)) { +                    libname = plugins[index].library; +                    break; +                } +            } +        } else { +            ret = 0;          } -        priv->this = this; - -        this->local_pool = mem_pool_new (cs_local_t, 512); -        if (!this->local_pool) { -                gf_msg (this->name, GF_LOG_ERROR, 0, ENOMEM, -                        "initialisation failed."); -                ret = -1; -                goto out; +        if (!libname) { +            gf_msg(this->name, GF_LOG_WARNING, 0, 0, "no plugin enabled"); +            ret = 0; +            goto out;          } -        this->private = priv; - -        /* temp workaround. Should be configurable through glusterd*/ -        per_vol = _gf_true; - -        if (per_vol) { -                if (dict_get_str (this->options, "cloudsync-storetype", -                    &temp_str) == 0) { -                        for (index = 0; plugins[index].name; index++) { -                                if (!strcmp (temp_str, plugins[index].name)) { -                                        libname = plugins[index].library; -                                        break; -                                } -                        } -                } else { -                        ret = 0; -                } - -                if (!libname) { -                        gf_msg (this->name, GF_LOG_WARNING, 0, 0, -                                "no plugin enabled"); -                        ret = 0; -                        goto out; -                } - -                ret = gf_asprintf (&libpath, "%s/%s", CS_PLUGINDIR, libname); -                if (ret == -1) { -                        goto out; -                } - -                handle = dlopen (libpath, RTLD_NOW); -                if (!handle) { -                        gf_msg (this->name, GF_LOG_WARNING, 0, 0, "could not " -                                "load the required library. %s", dlerror ()); -                        ret = 0; -                        goto out; -                } else { -                        gf_msg (this->name, GF_LOG_INFO, 0, 0, -                                "loading library:%s successful", libname); -                } +        ret = gf_asprintf(&libpath, "%s/%s", CS_PLUGINDIR, libname); +        if (ret == -1) { +            goto out; +        } +        handle = dlopen(libpath, RTLD_NOW); +        if (!handle) { +            gf_msg(this->name, GF_LOG_WARNING, 0, 0, +                   "could not " +                   "load the required library. %s", +                   dlerror()); +            ret = 0; +            goto out; +        } else { +            gf_msg(this->name, GF_LOG_INFO, 0, 0, +                   "loading library:%s successful", libname); +        } -                priv->stores = GF_CALLOC (1, sizeof (struct cs_remote_stores), -                                          gf_cs_mt_cs_remote_stores_t); -                if (!priv->stores) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, 0, "Could not " -                                "allocate memory for priv->stores"); -                        ret = -1; -                        goto out; -                } +        priv->stores = GF_CALLOC(1, sizeof(struct cs_remote_stores), +                                 gf_cs_mt_cs_remote_stores_t); +        if (!priv->stores) { +            gf_msg(this->name, GF_LOG_ERROR, 0, 0, +                   "Could not " +                   "allocate memory for priv->stores"); +            ret = -1; +            goto out; +        } -                (void) dlerror (); /* clear out previous error string */ +        (void)dlerror(); /* clear out previous error string */ -                /* load library methods */ -                store_methods = (store_methods_t *) dlsym (handle, "store_ops"); -                if (!store_methods) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, 0, -                                "null store_methods %s", dlerror ()); -                        ret = -1; -                        goto out; -                } +        /* load library methods */ +        store_methods = (store_methods_t *)dlsym(handle, "store_ops"); +        if (!store_methods) { +            gf_msg(this->name, GF_LOG_ERROR, 0, 0, "null store_methods %s", +                   dlerror()); +            ret = -1; +            goto out; +        } -                (void) dlerror (); +        (void)dlerror(); -                priv->stores->dlfop = store_methods->fop_download; -                if (!priv->stores->dlfop) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, 0, "failed to get" -                                " download fop %s", dlerror ()); -                        ret = -1; -                        goto out; -                } +        priv->stores->dlfop = store_methods->fop_download; +        if (!priv->stores->dlfop) { +            gf_msg(this->name, GF_LOG_ERROR, 0, 0, +                   "failed to get" +                   " download fop %s", +                   dlerror()); +            ret = -1; +            goto out; +        } -                (void) dlerror (); -                priv->stores->init = store_methods->fop_init; -                if (!priv->stores->init) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, 0, "failed to get" -                                " init fop %s", dlerror ()); -                        ret = -1; -                        goto out; -                } +        (void)dlerror(); +        priv->stores->init = store_methods->fop_init; +        if (!priv->stores->init) { +            gf_msg(this->name, GF_LOG_ERROR, 0, 0, +                   "failed to get" +                   " init fop %s", +                   dlerror()); +            ret = -1; +            goto out; +        } -                (void) dlerror (); -                priv->stores->reconfigure = store_methods->fop_reconfigure; -                if (!priv->stores->reconfigure) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, 0, "failed to get" -                                " reconfigure fop %s", dlerror ()); -                        ret = -1; -                        goto out; -                } +        (void)dlerror(); +        priv->stores->reconfigure = store_methods->fop_reconfigure; +        if (!priv->stores->reconfigure) { +            gf_msg(this->name, GF_LOG_ERROR, 0, 0, +                   "failed to get" +                   " reconfigure fop %s", +                   dlerror()); +            ret = -1; +            goto out; +        } -                priv->stores->handle = handle; +        priv->stores->handle = handle; -                priv->stores->config = (void *) ((priv->stores->init) (this)); -                if (!priv->stores->config) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, 0, "null config"); -                        ret = -1; -                        goto out; -                } +        priv->stores->config = (void *)((priv->stores->init)(this)); +        if (!priv->stores->config) { +            gf_msg(this->name, GF_LOG_ERROR, 0, 0, "null config"); +            ret = -1; +            goto out;          } +    } -        ret = 0; +    ret = 0;  out: -        if (ret == -1) { -                if (this->local_pool) -                        mem_pool_destroy (this->local_pool); +    if (ret == -1) { +        if (this->local_pool) +            mem_pool_destroy(this->local_pool); -                cs_cleanup_private (priv); +        cs_cleanup_private(priv); -                if (handle) { -                        dlclose (handle); -                } +        if (handle) { +            dlclose(handle);          } +    } -        GF_FREE (libpath); +    GF_FREE(libpath); -        return ret; +    return ret;  }  void -cs_fini (xlator_t *this) +cs_fini(xlator_t *this)  { -        cs_private_t *priv = NULL; -        priv = this->private; +    cs_private_t *priv = NULL; +    priv = this->private; -        cs_cleanup_private (priv); +    cs_cleanup_private(priv);  }  int -cs_reconfigure (xlator_t *this, dict_t *options) +cs_reconfigure(xlator_t *this, dict_t *options)  { -        cs_private_t    *priv = NULL; -        int              ret = 0; +    cs_private_t *priv = NULL; +    int ret = 0; -        priv = this->private; -        if (!priv) { -                ret = -1; -                goto out; -        } +    priv = this->private; +    if (!priv) { +        ret = -1; +        goto out; +    } -        /* needed only for per volume configuration*/ -        ret = priv->stores->reconfigure (this, options); +    /* needed only for per volume configuration*/ +    ret = priv->stores->reconfigure(this, options);  out: -        return ret; +    return ret;  }  int32_t -cs_mem_acct_init (xlator_t *this) +cs_mem_acct_init(xlator_t *this)  { -        int     ret = -1; +    int ret = -1; -        GF_VALIDATE_OR_GOTO ("cloudsync", this, out); +    GF_VALIDATE_OR_GOTO("cloudsync", this, out); -        ret = xlator_mem_acct_init (this, gf_cs_mt_end + 1); +    ret = xlator_mem_acct_init(this, gf_cs_mt_end + 1); -        if (ret != 0) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, -                        "Memory accounting init failed"); -                return ret; -        } -out: +    if (ret != 0) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, "Memory accounting init failed");          return ret; +    } +out: +    return ret;  }  int32_t -cs_readdirp_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                 int32_t op_ret, int32_t op_errno, gf_dirent_t *entries, -                 dict_t *xdata) +cs_readdirp_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                int32_t op_ret, int32_t op_errno, gf_dirent_t *entries, +                dict_t *xdata)  { -        gf_dirent_t *tmp = NULL; -        char        *sxattr = NULL; -        uint64_t     ia_size = 0; -        int          ret = 0; - -        list_for_each_entry (tmp, &entries->list, list) { -                ret = dict_get_str (tmp->dict, GF_CS_OBJECT_SIZE, &sxattr); -                if (ret) { -                        gf_msg_trace (this->name, 0, "size xattr found"); -                        continue; -                } - -                ia_size = atoll (sxattr); -                tmp->d_stat.ia_size = ia_size; +    gf_dirent_t *tmp = NULL; +    char *sxattr = NULL; +    uint64_t ia_size = 0; +    int ret = 0; + +    list_for_each_entry(tmp, &entries->list, list) +    { +        ret = dict_get_str(tmp->dict, GF_CS_OBJECT_SIZE, &sxattr); +        if (ret) { +            gf_msg_trace(this->name, 0, "size xattr found"); +            continue;          } -        STACK_UNWIND_STRICT (readdirp, frame, op_ret, op_errno, -                             entries, xdata); -        return 0; -} +        ia_size = atoll(sxattr); +        tmp->d_stat.ia_size = ia_size; +    } +    STACK_UNWIND_STRICT(readdirp, frame, op_ret, op_errno, entries, xdata); +    return 0; +}  int32_t -cs_readdirp (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, -             off_t off, dict_t *xdata) +cs_readdirp(call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, +            off_t off, dict_t *xdata)  { -        int ret = 0; -        int op_errno = ENOMEM; +    int ret = 0; +    int op_errno = ENOMEM; +    if (!xdata) { +        xdata = dict_new();          if (!xdata) { -                xdata = dict_new (); -                if (!xdata) { -                        goto err; -                } +            goto err;          } +    } -        ret = dict_set_int32 (xdata, GF_CS_OBJECT_SIZE, 1); -        if (ret) { -                goto err; -        } +    ret = dict_set_int32(xdata, GF_CS_OBJECT_SIZE, 1); +    if (ret) { +        goto err; +    } -        STACK_WIND (frame, cs_readdirp_cbk, -                    FIRST_CHILD(this), FIRST_CHILD(this)->fops->readdirp, -                    fd, size, off, xdata); -        return 0; +    STACK_WIND(frame, cs_readdirp_cbk, FIRST_CHILD(this), +               FIRST_CHILD(this)->fops->readdirp, fd, size, off, xdata); +    return 0;  err: -        STACK_UNWIND_STRICT (readdirp, frame, -1, op_errno, -                             NULL, NULL); -        return 0; +    STACK_UNWIND_STRICT(readdirp, frame, -1, op_errno, NULL, NULL); +    return 0;  } -  int32_t -cs_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                 int32_t op_ret, int32_t op_errno, struct iatt *prebuf, -                 struct iatt *postbuf, dict_t *xdata) +cs_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                int32_t op_ret, int32_t op_errno, struct iatt *prebuf, +                struct iatt *postbuf, dict_t *xdata)  { -        cs_local_t      *local = NULL; -        int              ret = 0; -        uint64_t         val = 0; - -        local = frame->local; - -        /* Do we need lock here? */ -        local->call_cnt++; - -        if (op_ret == -1) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "truncate failed"); -                ret = dict_get_uint64 (xdata, GF_CS_OBJECT_STATUS, &val); -                if (ret == 0) { -                        if (val == GF_CS_ERROR) { -                                gf_msg (this->name, GF_LOG_ERROR, 0, 0, -                                        "could not get file state, unwinding"); -                                op_ret = -1; -                                op_errno = EIO; -                                goto unwind; -                        } else { -                                __cs_inode_ctx_update (this, local->loc.inode, -                                                       val); -                                gf_msg (this->name, GF_LOG_INFO, 0, 0, -                                        " state = %ld", val); - -                                if (local->call_cnt == 1 && -                                    (val == GF_CS_REMOTE || -                                     val == GF_CS_DOWNLOADING))  { -                                        gf_msg (this->name, GF_LOG_WARNING, 0, -                                                0, "will repair and download " -                                                "the file, current state : %ld", -                                                val); -                                        goto repair; -                                } else { -                                        gf_msg (this->name, GF_LOG_ERROR, 0, 0, -                                                "second truncate, Unwinding"); -                                        goto unwind; -                                } -                        } +    cs_local_t *local = NULL; +    int ret = 0; +    uint64_t val = 0; + +    local = frame->local; + +    /* Do we need lock here? */ +    local->call_cnt++; + +    if (op_ret == -1) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, "truncate failed"); +        ret = dict_get_uint64(xdata, GF_CS_OBJECT_STATUS, &val); +        if (ret == 0) { +            if (val == GF_CS_ERROR) { +                gf_msg(this->name, GF_LOG_ERROR, 0, 0, +                       "could not get file state, unwinding"); +                op_ret = -1; +                op_errno = EIO; +                goto unwind; +            } else { +                __cs_inode_ctx_update(this, local->loc.inode, val); +                gf_msg(this->name, GF_LOG_INFO, 0, 0, " state = %ld", val); + +                if (local->call_cnt == 1 && +                    (val == GF_CS_REMOTE || val == GF_CS_DOWNLOADING)) { +                    gf_msg(this->name, GF_LOG_WARNING, 0, 0, +                           "will repair and download " +                           "the file, current state : %ld", +                           val); +                    goto repair;                  } else { -                        gf_msg (this->name, GF_LOG_ERROR, 0, 0, "file state " -                                "could not be figured, unwinding"); -                        goto unwind; +                    gf_msg(this->name, GF_LOG_ERROR, 0, 0, +                           "second truncate, Unwinding"); +                    goto unwind;                  } +            }          } else { -                /* successful write => file is local */ -                __cs_inode_ctx_update (this, local->loc.inode, GF_CS_LOCAL); -                gf_msg (this->name, GF_LOG_INFO, 0, 0, "state : GF_CS_LOCAL" -                        ", truncate successful"); - -                goto unwind; +            gf_msg(this->name, GF_LOG_ERROR, 0, 0, +                   "file state " +                   "could not be figured, unwinding"); +            goto unwind;          } +    } else { +        /* successful write => file is local */ +        __cs_inode_ctx_update(this, local->loc.inode, GF_CS_LOCAL); +        gf_msg(this->name, GF_LOG_INFO, 0, 0, +               "state : GF_CS_LOCAL" +               ", truncate successful"); + +        goto unwind; +    }  repair: -        ret = locate_and_execute (frame); -        if (ret) { -                goto unwind; -        } +    ret = locate_and_execute(frame); +    if (ret) { +        goto unwind; +    } -        return 0; +    return 0;  unwind: -        CS_STACK_UNWIND (truncate, frame, op_ret, op_errno, prebuf, postbuf, -                         xdata); -        return 0; +    CS_STACK_UNWIND(truncate, frame, op_ret, op_errno, prebuf, postbuf, xdata); +    return 0;  } -  int32_t -cs_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset, -             dict_t *xdata) +cs_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, off_t offset, +            dict_t *xdata)  { -        int                     op_errno        = -1; -        cs_local_t             *local           = NULL; -        int                     ret             = 0; -        cs_inode_ctx_t         *ctx             = NULL; -        gf_cs_obj_state            state           = -1; - -        VALIDATE_OR_GOTO (frame, err); -        VALIDATE_OR_GOTO (this, err); -        VALIDATE_OR_GOTO (loc, err); - -        local = cs_local_init (this, frame, loc, NULL, GF_FOP_TRUNCATE); -        if (!local) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "local init failed"); -                op_errno = ENOMEM; -                goto err; -        } - -        __cs_inode_ctx_get (this, loc->inode, &ctx); - -        if (ctx) -                state = __cs_get_file_state (this, loc->inode, ctx); -        else -                state = GF_CS_LOCAL; - -        local->xattr_req = xdata ? dict_ref (xdata) : (xdata = dict_new ()); - -        ret = dict_set_uint32 (local->xattr_req, GF_CS_OBJECT_STATUS, 1); +    int op_errno = -1; +    cs_local_t *local = NULL; +    int ret = 0; +    cs_inode_ctx_t *ctx = NULL; +    gf_cs_obj_state state = -1; + +    VALIDATE_OR_GOTO(frame, err); +    VALIDATE_OR_GOTO(this, err); +    VALIDATE_OR_GOTO(loc, err); + +    local = cs_local_init(this, frame, loc, NULL, GF_FOP_TRUNCATE); +    if (!local) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, "local init failed"); +        op_errno = ENOMEM; +        goto err; +    } + +    __cs_inode_ctx_get(this, loc->inode, &ctx); + +    if (ctx) +        state = __cs_get_file_state(this, loc->inode, ctx); +    else +        state = GF_CS_LOCAL; + +    local->xattr_req = xdata ? dict_ref(xdata) : (xdata = dict_new()); + +    ret = dict_set_uint32(local->xattr_req, GF_CS_OBJECT_STATUS, 1); +    if (ret) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, +               "dict_set failed key:" +               " %s", +               GF_CS_OBJECT_STATUS); +        goto err; +    } + +    local->stub = fop_truncate_stub(frame, cs_resume_truncate, loc, offset, +                                    xdata); +    if (!local->stub) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, "insufficient memory"); +        op_errno = ENOMEM; +        goto err; +    } + +    if (state == GF_CS_LOCAL) { +        STACK_WIND(frame, cs_truncate_cbk, FIRST_CHILD(this), +                   FIRST_CHILD(this)->fops->truncate, loc, offset, xdata); + +    } else { +        local->call_cnt++; +        ret = locate_and_execute(frame);          if (ret) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "dict_set failed key:" -                        " %s", GF_CS_OBJECT_STATUS); -                goto err; +            op_errno = ENOMEM; +            goto err;          } +    } -        local->stub = fop_truncate_stub (frame, cs_resume_truncate, loc, offset, -                                         xdata); -        if (!local->stub) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "insufficient memory"); -                op_errno = ENOMEM; -                goto err; -        } - -        if (state == GF_CS_LOCAL) { -                STACK_WIND (frame, cs_truncate_cbk, -                            FIRST_CHILD(this), -                            FIRST_CHILD(this)->fops->truncate, -                            loc, offset, xdata); - -        } else { -                local->call_cnt++; -                ret = locate_and_execute (frame); -                if (ret) { -                        op_errno = ENOMEM; -                        goto err; -                } -        } - -        return 0; +    return 0;  err: -        CS_STACK_UNWIND (truncate, frame, -1, op_errno, NULL, NULL, NULL); -        return 0; +    CS_STACK_UNWIND(truncate, frame, -1, op_errno, NULL, NULL, NULL); +    return 0;  }  int32_t -cs_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -        int32_t op_ret, int32_t op_errno, struct statvfs *buf, -        dict_t *xdata) +cs_statfs_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, +              int32_t op_errno, struct statvfs *buf, dict_t *xdata)  { -        STACK_UNWIND_STRICT (statfs, frame, op_ret, op_errno, -                             buf, xdata); -        return 0; +    STACK_UNWIND_STRICT(statfs, frame, op_ret, op_errno, buf, xdata); +    return 0;  } -  int32_t -cs_statfs (call_frame_t *frame, xlator_t *this, -        loc_t *loc, -        dict_t *xdata) +cs_statfs(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata)  { -        STACK_WIND (frame, cs_statfs_cbk, -                    FIRST_CHILD(this), FIRST_CHILD(this)->fops->statfs, -                    loc, xdata); -        return 0; +    STACK_WIND(frame, cs_statfs_cbk, FIRST_CHILD(this), +               FIRST_CHILD(this)->fops->statfs, loc, xdata); +    return 0;  } -  int32_t -cs_getxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -        int32_t op_ret, int32_t op_errno, dict_t *dict, -        dict_t *xdata) +cs_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)  { -        STACK_UNWIND_STRICT (getxattr, frame, op_ret, op_errno, -                             dict, xdata); -        return 0; +    STACK_UNWIND_STRICT(getxattr, frame, op_ret, op_errno, dict, xdata); +    return 0;  } -  int32_t -cs_getxattr (call_frame_t *frame, xlator_t *this, -        loc_t *loc, -        const char *name, -        dict_t *xattr_req) +cs_getxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, const char *name, +            dict_t *xattr_req)  { -        STACK_WIND (frame, cs_getxattr_cbk, -                    FIRST_CHILD(this), FIRST_CHILD(this)->fops->getxattr, -                    loc, name, xattr_req); -        return 0; +    STACK_WIND(frame, cs_getxattr_cbk, FIRST_CHILD(this), +               FIRST_CHILD(this)->fops->getxattr, loc, name, xattr_req); +    return 0;  }  int32_t -cs_setxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -        int32_t op_ret, int32_t op_errno, dict_t *xdata) +cs_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                int32_t op_ret, int32_t op_errno, dict_t *xdata)  { -        cs_local_t      *local = NULL; +    cs_local_t *local = NULL; -        local = frame->local; +    local = frame->local; -        if (local->locked) -                cs_inodelk_unlock (frame); +    if (local->locked) +        cs_inodelk_unlock(frame); -        CS_STACK_UNWIND (setxattr, frame, op_ret, op_errno, xdata); +    CS_STACK_UNWIND(setxattr, frame, op_ret, op_errno, xdata); -        return 0; +    return 0;  } -  int32_t -cs_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict, -             int32_t flags, dict_t *xdata) +cs_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *dict, +            int32_t flags, dict_t *xdata)  { -        data_t          *tmp = NULL; -        cs_local_t      *local = NULL; -        int              ret = 0; +    data_t *tmp = NULL; +    cs_local_t *local = NULL; +    int ret = 0; -        VALIDATE_OR_GOTO (frame, err); -        VALIDATE_OR_GOTO (this, err); - -        local = cs_local_init (this, frame, loc, NULL, GF_FOP_SETXATTR); -        if (!local) { -                ret = -1; -                goto err; -        } +    VALIDATE_OR_GOTO(frame, err); +    VALIDATE_OR_GOTO(this, err); -        local->xattr_req = xdata ? dict_ref (xdata) : (xdata = dict_new ()); +    local = cs_local_init(this, frame, loc, NULL, GF_FOP_SETXATTR); +    if (!local) { +        ret = -1; +        goto err; +    } -        tmp = dict_get (dict, GF_CS_OBJECT_UPLOAD_COMPLETE); -        if (tmp) { -                /* Value of key should be the atime */ -                local->stub = fop_setxattr_stub (frame, cs_resume_setxattr, -                                                 loc, dict, flags, xdata); +    local->xattr_req = xdata ? dict_ref(xdata) : (xdata = dict_new()); -                if (!local->stub) -                        goto err; +    tmp = dict_get(dict, GF_CS_OBJECT_UPLOAD_COMPLETE); +    if (tmp) { +        /* Value of key should be the atime */ +        local->stub = fop_setxattr_stub(frame, cs_resume_setxattr, loc, dict, +                                        flags, xdata); -                ret = locate_and_execute (frame); -                if (ret) { -                        goto err; -                } +        if (!local->stub) +            goto err; -                return 0; +        ret = locate_and_execute(frame); +        if (ret) { +            goto err;          } -        STACK_WIND (frame, cs_setxattr_cbk, -                    FIRST_CHILD(this), FIRST_CHILD(this)->fops->setxattr, -                    loc, dict, flags, xdata);          return 0; +    } + +    STACK_WIND(frame, cs_setxattr_cbk, FIRST_CHILD(this), +               FIRST_CHILD(this)->fops->setxattr, loc, dict, flags, xdata); +    return 0;  err: -        CS_STACK_UNWIND (setxattr, frame, -1, errno, NULL); -        return 0; +    CS_STACK_UNWIND(setxattr, frame, -1, errno, NULL); +    return 0;  } -  int32_t -cs_fgetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -        int32_t op_ret, int32_t op_errno, dict_t *dict, -        dict_t *xdata) +cs_fgetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                 int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata)  { -        STACK_UNWIND_STRICT (fgetxattr, frame, op_ret, op_errno, -                             dict, xdata); -        return 0; +    STACK_UNWIND_STRICT(fgetxattr, frame, op_ret, op_errno, dict, xdata); +    return 0;  } -  int32_t -cs_fgetxattr (call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name, -              dict_t *xdata) +cs_fgetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, const char *name, +             dict_t *xdata)  { -        STACK_WIND (frame, cs_fgetxattr_cbk, -                    FIRST_CHILD(this), FIRST_CHILD(this)->fops->fgetxattr, -                    fd, name, xdata); -        return 0; +    STACK_WIND(frame, cs_fgetxattr_cbk, FIRST_CHILD(this), +               FIRST_CHILD(this)->fops->fgetxattr, fd, name, xdata); +    return 0;  } - -  int32_t -cs_fsetxattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -        int32_t op_ret, int32_t op_errno, dict_t *xdata) +cs_fsetxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                 int32_t op_ret, int32_t op_errno, dict_t *xdata)  { -        STACK_UNWIND_STRICT (fsetxattr, frame, op_ret, op_errno, -                             xdata); -        return 0; +    STACK_UNWIND_STRICT(fsetxattr, frame, op_ret, op_errno, xdata); +    return 0;  } -  int32_t -cs_fsetxattr (call_frame_t *frame, xlator_t *this, -        fd_t *fd, -        dict_t *dict, -        int32_t flags, -        dict_t *xdata) +cs_fsetxattr(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *dict, +             int32_t flags, dict_t *xdata)  { -        STACK_WIND (frame, cs_fsetxattr_cbk, -                    FIRST_CHILD(this), FIRST_CHILD(this)->fops->fsetxattr, -                    fd, dict, flags, xdata); -        return 0; +    STACK_WIND(frame, cs_fsetxattr_cbk, FIRST_CHILD(this), +               FIRST_CHILD(this)->fops->fsetxattr, fd, dict, flags, xdata); +    return 0;  }  int32_t -cs_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -        int32_t op_ret, int32_t op_errno, struct iatt *preparent, -        struct iatt *postparent, -        dict_t *xdata) +cs_unlink_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, +              int32_t op_errno, struct iatt *preparent, struct iatt *postparent, +              dict_t *xdata)  { -        STACK_UNWIND_STRICT (unlink, frame, op_ret, op_errno, -                             preparent, postparent, xdata); -        return 0; +    STACK_UNWIND_STRICT(unlink, frame, op_ret, op_errno, preparent, postparent, +                        xdata); +    return 0;  } -  int32_t -cs_unlink (call_frame_t *frame, xlator_t *this, -        loc_t *loc, -        int32_t flags, -        dict_t *xattr_req) +cs_unlink(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags, +          dict_t *xattr_req)  { -        cs_local_t      *local = NULL; -        int              ret   = 0; - -        local = cs_local_init (this, frame, loc, NULL, GF_FOP_UNLINK); -        if (!local) -                goto err; - -        local->xattr_req = xattr_req ? dict_ref (xattr_req) : dict_new (); - -        ret = dict_set_uint32 (local->xattr_req, GF_CS_OBJECT_STATUS, 1); -        if (ret) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "dict_set failed key:" -                        " %s", GF_CS_OBJECT_STATUS); -                goto err; -        } -        STACK_WIND (frame, cs_unlink_cbk, -                    FIRST_CHILD(this), FIRST_CHILD(this)->fops->unlink, -                    loc, flags, local->xattr_req); -        return 0; +    cs_local_t *local = NULL; +    int ret = 0; + +    local = cs_local_init(this, frame, loc, NULL, GF_FOP_UNLINK); +    if (!local) +        goto err; + +    local->xattr_req = xattr_req ? dict_ref(xattr_req) : dict_new(); + +    ret = dict_set_uint32(local->xattr_req, GF_CS_OBJECT_STATUS, 1); +    if (ret) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, +               "dict_set failed key:" +               " %s", +               GF_CS_OBJECT_STATUS); +        goto err; +    } +    STACK_WIND(frame, cs_unlink_cbk, FIRST_CHILD(this), +               FIRST_CHILD(this)->fops->unlink, loc, flags, local->xattr_req); +    return 0;  err: -        CS_STACK_UNWIND (unlink, frame, -1, errno, NULL, NULL, NULL); -        return 0; +    CS_STACK_UNWIND(unlink, frame, -1, errno, NULL, NULL, NULL); +    return 0;  } -  int32_t -cs_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -        int32_t op_ret, int32_t op_errno, fd_t *fd, -        dict_t *xdata) +cs_open_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, +            int32_t op_errno, fd_t *fd, dict_t *xdata)  { -        int              ret = 0; -        uint64_t         val = 0; - -        if (op_ret == 0) { -                ret = dict_get_uint64 (xdata, GF_CS_OBJECT_STATUS, &val); -                if (!ret) { -                        ret = __cs_inode_ctx_update (this, fd->inode, val); -                        if (ret) { -                                gf_msg (this->name, GF_LOG_ERROR, 0, 0, -                                        "ctx update failed"); -                        } -                } -        } else { -                cs_inode_ctx_reset (this, fd->inode); +    int ret = 0; +    uint64_t val = 0; + +    if (op_ret == 0) { +        ret = dict_get_uint64(xdata, GF_CS_OBJECT_STATUS, &val); +        if (!ret) { +            ret = __cs_inode_ctx_update(this, fd->inode, val); +            if (ret) { +                gf_msg(this->name, GF_LOG_ERROR, 0, 0, "ctx update failed"); +            }          } +    } else { +        cs_inode_ctx_reset(this, fd->inode); +    } -        CS_STACK_UNWIND (open, frame, op_ret, op_errno, fd, xdata); -        return 0; +    CS_STACK_UNWIND(open, frame, op_ret, op_errno, fd, xdata); +    return 0;  } -  int32_t -cs_open (call_frame_t *frame, xlator_t *this, -        loc_t *loc, -        int32_t flags, -        fd_t *fd, -        dict_t *xattr_req) +cs_open(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags, +        fd_t *fd, dict_t *xattr_req)  { -        cs_local_t      *local = NULL; -        int              ret   = 0; - -        local = cs_local_init (this, frame, NULL, fd, GF_FOP_OPEN); -        if (!local) -                goto err; - -        local->xattr_req = xattr_req ? dict_ref (xattr_req) : dict_new (); - -        ret = dict_set_uint32 (local->xattr_req, GF_CS_OBJECT_STATUS, 1); -        if (ret) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "dict_set failed key:" -                        " %s", GF_CS_OBJECT_STATUS); -                goto err; -        } - -        STACK_WIND (frame, cs_open_cbk, -                    FIRST_CHILD(this), FIRST_CHILD(this)->fops->open, -                    loc, flags, fd, local->xattr_req); -        return 0; +    cs_local_t *local = NULL; +    int ret = 0; + +    local = cs_local_init(this, frame, NULL, fd, GF_FOP_OPEN); +    if (!local) +        goto err; + +    local->xattr_req = xattr_req ? dict_ref(xattr_req) : dict_new(); + +    ret = dict_set_uint32(local->xattr_req, GF_CS_OBJECT_STATUS, 1); +    if (ret) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, +               "dict_set failed key:" +               " %s", +               GF_CS_OBJECT_STATUS); +        goto err; +    } + +    STACK_WIND(frame, cs_open_cbk, FIRST_CHILD(this), +               FIRST_CHILD(this)->fops->open, loc, flags, fd, local->xattr_req); +    return 0;  err: -        CS_STACK_UNWIND (open, frame, -1, errno, NULL, NULL); -        return 0; +    CS_STACK_UNWIND(open, frame, -1, errno, NULL, NULL); +    return 0;  } -  int32_t -cs_fstat_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -        int32_t op_ret, int32_t op_errno, struct iatt *buf, -        dict_t *xdata) +cs_fstat_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, +             int32_t op_errno, struct iatt *buf, dict_t *xdata)  { -        int              ret = 0; -        uint64_t         val = 0; -        fd_t            *fd  = NULL; -        cs_local_t      *local = NULL; - -        local = frame->local; - -        fd = local->fd; - -        if (op_ret == 0) { -                ret = dict_get_uint64 (xdata, GF_CS_OBJECT_STATUS, &val); -                if (!ret) { -                        gf_msg_debug (this->name, 0, "state %ld", val); -                        ret = __cs_inode_ctx_update (this, fd->inode, val); -                        if (ret) { -                                gf_msg (this->name, GF_LOG_ERROR, 0, 0, -                                        "ctx update failed"); -                        } -                } -        } else { -                cs_inode_ctx_reset (this, fd->inode); +    int ret = 0; +    uint64_t val = 0; +    fd_t *fd = NULL; +    cs_local_t *local = NULL; + +    local = frame->local; + +    fd = local->fd; + +    if (op_ret == 0) { +        ret = dict_get_uint64(xdata, GF_CS_OBJECT_STATUS, &val); +        if (!ret) { +            gf_msg_debug(this->name, 0, "state %ld", val); +            ret = __cs_inode_ctx_update(this, fd->inode, val); +            if (ret) { +                gf_msg(this->name, GF_LOG_ERROR, 0, 0, "ctx update failed"); +            }          } +    } else { +        cs_inode_ctx_reset(this, fd->inode); +    } -        CS_STACK_UNWIND (fstat, frame, op_ret, op_errno, buf, xdata); +    CS_STACK_UNWIND(fstat, frame, op_ret, op_errno, buf, xdata); -        return 0; +    return 0;  } -  int32_t -cs_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xattr_req) +cs_fstat(call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xattr_req)  { -        cs_local_t      *local = NULL; -        int              ret   = 0; +    cs_local_t *local = NULL; +    int ret = 0; -        local = cs_local_init (this, frame, NULL, fd, GF_FOP_FSTAT); -        if (!local) -                goto err; +    local = cs_local_init(this, frame, NULL, fd, GF_FOP_FSTAT); +    if (!local) +        goto err; -        if (fd->inode->ia_type == IA_IFDIR) -                goto wind; +    if (fd->inode->ia_type == IA_IFDIR) +        goto wind; -        local->xattr_req = xattr_req ? dict_ref (xattr_req) : dict_new (); +    local->xattr_req = xattr_req ? dict_ref(xattr_req) : dict_new(); -        ret = dict_set_uint32 (local->xattr_req, GF_CS_OBJECT_STATUS, 1); -        if (ret) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "dict_set failed key:" -                        " %s", GF_CS_OBJECT_STATUS); -                goto err; -        } +    ret = dict_set_uint32(local->xattr_req, GF_CS_OBJECT_STATUS, 1); +    if (ret) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, +               "dict_set failed key:" +               " %s", +               GF_CS_OBJECT_STATUS); +        goto err; +    }  wind: -        STACK_WIND (frame, cs_fstat_cbk, -                    FIRST_CHILD(this), FIRST_CHILD(this)->fops->fstat, -                    fd, local->xattr_req); -        return 0; +    STACK_WIND(frame, cs_fstat_cbk, FIRST_CHILD(this), +               FIRST_CHILD(this)->fops->fstat, fd, local->xattr_req); +    return 0;  err: -        CS_STACK_UNWIND (fstat, frame, -1, errno, NULL, NULL); -        return 0; +    CS_STACK_UNWIND(fstat, frame, -1, errno, NULL, NULL); +    return 0;  }  cs_local_t * -cs_local_init (xlator_t *this, call_frame_t *frame, loc_t *loc, fd_t *fd, -               glusterfs_fop_t fop) +cs_local_init(xlator_t *this, call_frame_t *frame, loc_t *loc, fd_t *fd, +              glusterfs_fop_t fop)  { -        cs_local_t      *local = NULL; -        int              ret   = 0; - -        local = mem_get0 (this->local_pool); -        if (!local) -                goto out; - -        if (loc) { -                ret = loc_copy (&local->loc, loc); -                if (ret) -                        goto out; -        } +    cs_local_t *local = NULL; +    int ret = 0; -        if (fd) { -                local->fd = fd_ref (fd); -        } +    local = mem_get0(this->local_pool); +    if (!local) +        goto out; -        local->op_ret   = -1; -        local->op_errno = EUCLEAN; -        local->fop      = fop; -        local->dloffset = 0; -        frame->local = local; -        local->locked = _gf_false; -        local->call_cnt = 0; +    if (loc) { +        ret = loc_copy(&local->loc, loc); +        if (ret) +            goto out; +    } + +    if (fd) { +        local->fd = fd_ref(fd); +    } + +    local->op_ret = -1; +    local->op_errno = EUCLEAN; +    local->fop = fop; +    local->dloffset = 0; +    frame->local = local; +    local->locked = _gf_false; +    local->call_cnt = 0;  out: -        if (ret) { -                if (local) -                        mem_put (local); -                local = NULL; -        } +    if (ret) { +        if (local) +            mem_put(local); +        local = NULL; +    } -        return local; +    return local;  }  call_frame_t * -cs_lock_frame (call_frame_t *parent_frame) +cs_lock_frame(call_frame_t *parent_frame)  { -        call_frame_t    *lock_frame = NULL; +    call_frame_t *lock_frame = NULL; -        lock_frame = copy_frame (parent_frame); +    lock_frame = copy_frame(parent_frame); -        if (lock_frame == NULL) -                goto out; +    if (lock_frame == NULL) +        goto out; -        set_lk_owner_from_ptr (&lock_frame->root->lk_owner, parent_frame->root); +    set_lk_owner_from_ptr(&lock_frame->root->lk_owner, parent_frame->root);  out: -        return lock_frame; - +    return lock_frame;  }  void -cs_lock_wipe (call_frame_t *lock_frame) +cs_lock_wipe(call_frame_t *lock_frame)  { -        CS_STACK_DESTROY (lock_frame); +    CS_STACK_DESTROY(lock_frame);  } -  int32_t -cs_inodelk_unlock_cbk (call_frame_t *frame, void *cookie,  xlator_t *this, -                       int32_t op_ret, int32_t op_errno, dict_t *xdata) +cs_inodelk_unlock_cbk(call_frame_t *frame, void *cookie, xlator_t *this, +                      int32_t op_ret, int32_t op_errno, dict_t *xdata)  { -        cs_lock_wipe (frame); +    cs_lock_wipe(frame); -        return 0; +    return 0;  }  int -cs_inodelk_unlock (call_frame_t *main_frame) +cs_inodelk_unlock(call_frame_t *main_frame)  { -        xlator_t        *this   = NULL; -        struct gf_flock  flock  = {0,}; -        call_frame_t    *lock_frame  = NULL; -        cs_local_t      *lock_local  = NULL; -        cs_local_t      *main_local  = NULL; -        int              ret    = 0; - -        this = main_frame->this; -        main_local = main_frame->local; - -        lock_frame = cs_lock_frame (main_frame); -        if (!lock_frame) -                goto out; +    xlator_t *this = NULL; +    struct gf_flock flock = { +        0, +    }; +    call_frame_t *lock_frame = NULL; +    cs_local_t *lock_local = NULL; +    cs_local_t *main_local = NULL; +    int ret = 0; -        lock_local = cs_local_init (this, lock_frame, NULL, NULL, 0); -        if (!lock_local) -                goto out; +    this = main_frame->this; +    main_local = main_frame->local; -        ret = cs_build_loc (&lock_local->loc, main_frame); -        if (ret) { -                goto out; -        } +    lock_frame = cs_lock_frame(main_frame); +    if (!lock_frame) +        goto out; -        flock.l_type = F_UNLCK; +    lock_local = cs_local_init(this, lock_frame, NULL, NULL, 0); +    if (!lock_local) +        goto out; -        main_local->locked = _gf_false; +    ret = cs_build_loc(&lock_local->loc, main_frame); +    if (ret) { +        goto out; +    } -        STACK_WIND (lock_frame, cs_inodelk_unlock_cbk, FIRST_CHILD (this), -                    FIRST_CHILD (this)->fops->inodelk, CS_LOCK_DOMAIN, -                    &lock_local->loc, F_SETLKW, &flock, NULL); +    flock.l_type = F_UNLCK; -        return 0; +    main_local->locked = _gf_false; + +    STACK_WIND(lock_frame, cs_inodelk_unlock_cbk, FIRST_CHILD(this), +               FIRST_CHILD(this)->fops->inodelk, CS_LOCK_DOMAIN, +               &lock_local->loc, F_SETLKW, &flock, NULL); + +    return 0;  out: -        gf_msg (this->name, GF_LOG_ERROR, 0, 0, "Stale lock would be found on" -                " server"); +    gf_msg(this->name, GF_LOG_ERROR, 0, 0, +           "Stale lock would be found on" +           " server"); -        if (lock_frame) -                cs_lock_wipe (lock_frame); +    if (lock_frame) +        cs_lock_wipe(lock_frame); -        return 0; +    return 0;  }  void * -cs_download_task (void *arg) +cs_download_task(void *arg)  { -        call_frame_t    *frame          = NULL; -        xlator_t        *this           = NULL; -        cs_private_t    *priv           = NULL; -        int              ret            = -1; -        char            *sign_req       = NULL; -        fd_t            *fd             = NULL; -        cs_local_t      *local          = NULL; -        dict_t          *dict           = NULL; -        int             *retval         = NULL; - -        frame = (call_frame_t *)arg; - -        this = frame->this; - -        priv = this->private; - -        retval = GF_CALLOC (1, sizeof(int), gf_common_mt_int); -        if (!retval) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "insufficient memory"); -                ret = -1; -                goto out; -        } - -        if (!priv->stores) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "No remote store " -                        "plugins found"); -                ret = -1; -                goto out; -        } - -        local = frame->local; - - -        if (local->fd) -                fd = fd_anonymous (local->fd->inode); -        else -                fd = fd_anonymous (local->loc.inode); - -        if (!fd) { -                gf_msg ("CS", GF_LOG_ERROR, 0, 0, "fd creation failed"); -                ret = -1; -                goto out; +    call_frame_t *frame = NULL; +    xlator_t *this = NULL; +    cs_private_t *priv = NULL; +    int ret = -1; +    char *sign_req = NULL; +    fd_t *fd = NULL; +    cs_local_t *local = NULL; +    dict_t *dict = NULL; +    int *retval = NULL; + +    frame = (call_frame_t *)arg; + +    this = frame->this; + +    priv = this->private; + +    retval = GF_CALLOC(1, sizeof(int), gf_common_mt_int); +    if (!retval) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, "insufficient memory"); +        ret = -1; +        goto out; +    } + +    if (!priv->stores) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, +               "No remote store " +               "plugins found"); +        ret = -1; +        goto out; +    } + +    local = frame->local; + +    if (local->fd) +        fd = fd_anonymous(local->fd->inode); +    else +        fd = fd_anonymous(local->loc.inode); + +    if (!fd) { +        gf_msg("CS", GF_LOG_ERROR, 0, 0, "fd creation failed"); +        ret = -1; +        goto out; +    } + +    local->dlfd = fd; +    local->dloffset = 0; + +    dict = dict_new(); +    if (!dict) { +        gf_msg(this->name, GF_LOG_ERROR, 0, ENOMEM, +               "failed to create " +               "dict"); +        ret = -1; +        goto out; +    } + +    ret = dict_set_uint32(dict, GF_CS_OBJECT_DOWNLOADING, 1); +    if (ret) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, "dict_set failed"); +        ret = -1; +        goto out; +    } + +    ret = syncop_fsetxattr(this, local->fd, dict, 0, NULL, NULL); +    if (ret) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, +               "fsetxattr failed " +               "key %s", +               GF_CS_OBJECT_DOWNLOADING); +        ret = -1; +        goto out; +    } +    /*this calling method is for per volume setting */ +    ret = priv->stores->dlfop(frame, priv->stores->config); +    if (ret) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, +               "download failed" +               ", remotepath: %s", +               local->remotepath); + +        /*using dlfd as it is anonymous and have RDWR flag*/ +        ret = syncop_ftruncate(FIRST_CHILD(this), local->dlfd, 0, NULL, NULL, +                               NULL, NULL); +        if (ret) { +            gf_msg(this->name, GF_LOG_ERROR, 0, -ret, "ftruncate failed"); +        } else { +            gf_msg_debug(this->name, 0, "ftruncate succeed");          } -        local->dlfd = fd; -        local->dloffset = 0; - -        dict = dict_new (); -        if (!dict) { -                gf_msg (this->name, GF_LOG_ERROR, 0, ENOMEM, "failed to create " -                        "dict"); -                ret = -1; -                goto out; -        } +        ret = -1; +        goto out; +    } else { +        gf_msg(this->name, GF_LOG_INFO, 0, 0, +               "download success, path" +               " : %s", +               local->remotepath); -        ret = dict_set_uint32 (dict, GF_CS_OBJECT_DOWNLOADING, 1); +        ret = syncop_fremovexattr(this, local->fd, GF_CS_OBJECT_REMOTE, NULL, +                                  NULL);          if (ret) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "dict_set failed"); -                ret = -1; -                goto out; +            gf_msg(this->name, GF_LOG_ERROR, 0, -ret, +                   "removexattr failed, remotexattr"); +            ret = -1; +            goto out; +        } else { +            gf_msg_debug(this->name, 0, +                         "fremovexattr success, " +                         "path : %s", +                         local->remotepath);          } -        ret = syncop_fsetxattr (this, local->fd, dict, 0, NULL, NULL); -        if (ret) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "fsetxattr failed " -                        "key %s", GF_CS_OBJECT_DOWNLOADING); -                ret = -1; -                goto out; -        } -        /*this calling method is for per volume setting */ -        ret = priv->stores->dlfop (frame, priv->stores->config); +        ret = syncop_fremovexattr(this, local->fd, GF_CS_OBJECT_DOWNLOADING, +                                  NULL, NULL);          if (ret) { -                 gf_msg (this->name, GF_LOG_ERROR, 0, 0, "download failed" -                         ", remotepath: %s", local->remotepath); - -                 /*using dlfd as it is anonymous and have RDWR flag*/ -                 ret = syncop_ftruncate (FIRST_CHILD (this), local->dlfd, 0, -                                         NULL, NULL, NULL, NULL); -                 if (ret) { -                         gf_msg (this->name, GF_LOG_ERROR, 0, -ret, -                                 "ftruncate failed"); -                 } else { -                         gf_msg_debug (this->name, 0, "ftruncate succeed"); -                 } - -                 ret = -1; -                 goto out; +            gf_msg(this->name, GF_LOG_ERROR, 0, -ret, +                   "removexattr failed, downloading xattr, path %s", +                   local->remotepath); +            ret = -1; +            goto out;          } else { -                gf_msg (this->name, GF_LOG_INFO, 0, 0, "download success, path" -                        " : %s", local->remotepath); - -                ret = syncop_fremovexattr (this, local->fd, -                                           GF_CS_OBJECT_REMOTE, NULL, NULL); -                if (ret) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, -ret, -                                "removexattr failed, remotexattr"); -                        ret = -1; -                        goto out; -                } else { -                        gf_msg_debug (this->name, 0, "fremovexattr success, " -                                      "path : %s", local->remotepath); -                } - -                ret = syncop_fremovexattr (this, local->fd, -                                           GF_CS_OBJECT_DOWNLOADING, NULL, -                                           NULL); -                if (ret) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, -ret, -                                "removexattr failed, downloading xattr, path %s" -                                , local->remotepath); -                        ret = -1; -                        goto out; -                } else { -                        gf_msg_debug (this->name, 0, "fremovexattr success" -                                      " path  %s", local->remotepath); -                } +            gf_msg_debug(this->name, 0, +                         "fremovexattr success" +                         " path  %s", +                         local->remotepath);          } +    }  out: -        GF_FREE (sign_req); - -        if (dict) -                dict_unref (dict); - -        if (fd) { -                fd_unref (fd); -                local->dlfd = NULL; -        } - -        if (retval) { -                *retval = ret; -                pthread_exit (retval); -        } else { -                pthread_exit (&ret); -        } +    GF_FREE(sign_req); + +    if (dict) +        dict_unref(dict); + +    if (fd) { +        fd_unref(fd); +        local->dlfd = NULL; +    } + +    if (retval) { +        *retval = ret; +        pthread_exit(retval); +    } else { +        pthread_exit(&ret); +    }  }  int -cs_download (call_frame_t *frame) +cs_download(call_frame_t *frame)  { -        int             *retval = NULL; -        int             ret = 0; -        pthread_t       dthread; -        cs_local_t      *local = NULL; -        xlator_t        *this = NULL; +    int *retval = NULL; +    int ret = 0; +    pthread_t dthread; +    cs_local_t *local = NULL; +    xlator_t *this = NULL; -        local = frame->local; -        this = frame->this; +    local = frame->local; +    this = frame->this; -        if (!local->remotepath) { -                ret = -1; -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "remote path not" -                        " available. Check posix logs to resolve"); -                goto out; -        } +    if (!local->remotepath) { +        ret = -1; +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, +               "remote path not" +               " available. Check posix logs to resolve"); +        goto out; +    } -        ret = gf_thread_create (&dthread, NULL, &cs_download_task, -                                (void *)frame, "downloadthread"); +    ret = gf_thread_create(&dthread, NULL, &cs_download_task, (void *)frame, +                           "downloadthread"); -        pthread_join (dthread, (void **)&retval); +    pthread_join(dthread, (void **)&retval); -        ret = *retval; +    ret = *retval;  out: -        if (retval) -                GF_FREE (retval); +    if (retval) +        GF_FREE(retval); -        return ret; +    return ret;  }  int -cs_stat_check_cbk (call_frame_t *frame, void *cookie, xlator_t *this, -                   int op_ret, int op_errno, struct iatt *stbuf, dict_t *xdata) +cs_stat_check_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, +                  int op_errno, struct iatt *stbuf, dict_t *xdata)  { -        cs_local_t      *local = NULL; -        call_stub_t     *stub  = NULL; -        char            *filepath = NULL; -        int              ret = 0; -        inode_t         *inode = NULL; -        uint64_t         val = 0; - -        local = frame->local; - -        if (op_ret == -1) { -                local->op_ret = op_ret; -                local->op_errno = op_errno; -                gf_msg (this->name, GF_LOG_ERROR, 0, op_errno, -                        "stat check failed"); -                goto err; -        } else { -                if (local->fd) -                        inode = local->fd->inode; -                else -                        inode = local->loc.inode; - -                if (!inode) { -                        local->op_ret = -1; -                        local->op_errno = EINVAL; -                        gf_msg (this->name, GF_LOG_ERROR, 0, 0, "null inode " -                                "returned"); -                        goto err; -                } - -                ret = dict_get_uint64 (xdata, GF_CS_OBJECT_STATUS, &val); -                if (ret == 0) { -                        if (val == GF_CS_ERROR) { -                                cs_inode_ctx_reset (this, inode); -                                local->op_ret = -1; -                                local->op_errno = EIO; -                                gf_msg (this->name, GF_LOG_ERROR, 0, 0, -                                        "status = GF_CS_ERROR. failed to get " -                                        " file state"); -                                goto err; -                        } else { -                                ret = __cs_inode_ctx_update (this, inode, val); -                                gf_msg_debug (this->name, 0, "status : %lu", -                                              val); -                                if (ret) { -                                        gf_msg (this->name, GF_LOG_ERROR, 0, 0, -                                                "ctx update failed"); -                                        local->op_ret = -1; -                                        local->op_errno = ENOMEM; -                                        goto err; -                                } -                        } -                } else { -                        gf_msg_debug (this->name, 0, -                                      "status not found in dict"); -                        local->op_ret = -1; -                        local->op_errno = ENOMEM; -                        goto err; -                } +    cs_local_t *local = NULL; +    call_stub_t *stub = NULL; +    char *filepath = NULL; +    int ret = 0; +    inode_t *inode = NULL; +    uint64_t val = 0; + +    local = frame->local; + +    if (op_ret == -1) { +        local->op_ret = op_ret; +        local->op_errno = op_errno; +        gf_msg(this->name, GF_LOG_ERROR, 0, op_errno, "stat check failed"); +        goto err; +    } else { +        if (local->fd) +            inode = local->fd->inode; +        else +            inode = local->loc.inode; + +        if (!inode) { +            local->op_ret = -1; +            local->op_errno = EINVAL; +            gf_msg(this->name, GF_LOG_ERROR, 0, 0, +                   "null inode " +                   "returned"); +            goto err; +        } -                ret = dict_get_str (xdata, GF_CS_OBJECT_REMOTE, &filepath); -                if (filepath) { -                        gf_msg_debug (this->name, 0, "filepath returned %s", -                                      filepath); -                        local->remotepath = gf_strdup (filepath); -                        if (!local->remotepath) { -                                local->op_ret = -1; -                                local->op_errno = ENOMEM; -                                goto err; -                        } -                } else { -                        gf_msg_debug (this->name, 0, "NULL filepath"); +        ret = dict_get_uint64(xdata, GF_CS_OBJECT_STATUS, &val); +        if (ret == 0) { +            if (val == GF_CS_ERROR) { +                cs_inode_ctx_reset(this, inode); +                local->op_ret = -1; +                local->op_errno = EIO; +                gf_msg(this->name, GF_LOG_ERROR, 0, 0, +                       "status = GF_CS_ERROR. failed to get " +                       " file state"); +                goto err; +            } else { +                ret = __cs_inode_ctx_update(this, inode, val); +                gf_msg_debug(this->name, 0, "status : %lu", val); +                if (ret) { +                    gf_msg(this->name, GF_LOG_ERROR, 0, 0, "ctx update failed"); +                    local->op_ret = -1; +                    local->op_errno = ENOMEM; +                    goto err;                  } +            } +        } else { +            gf_msg_debug(this->name, 0, "status not found in dict"); +            local->op_ret = -1; +            local->op_errno = ENOMEM; +            goto err; +        } -                local->op_ret = 0; -                local->xattr_rsp = dict_ref (xdata); -                memcpy (&local->stbuf, stbuf, sizeof (struct iatt)); +        ret = dict_get_str(xdata, GF_CS_OBJECT_REMOTE, &filepath); +        if (filepath) { +            gf_msg_debug(this->name, 0, "filepath returned %s", filepath); +            local->remotepath = gf_strdup(filepath); +            if (!local->remotepath) { +                local->op_ret = -1; +                local->op_errno = ENOMEM; +                goto err; +            } +        } else { +            gf_msg_debug(this->name, 0, "NULL filepath");          } -        stub = local->stub; -        local->stub = NULL; -        call_resume (stub); +        local->op_ret = 0; +        local->xattr_rsp = dict_ref(xdata); +        memcpy(&local->stbuf, stbuf, sizeof(struct iatt)); +    } -        return 0; +    stub = local->stub; +    local->stub = NULL; +    call_resume(stub); + +    return 0;  err: -        cs_inodelk_unlock (frame); +    cs_inodelk_unlock(frame); -        cs_common_cbk (frame); +    cs_common_cbk(frame); -        return 0; +    return 0;  }  int -cs_do_stat_check (call_frame_t *main_frame) +cs_do_stat_check(call_frame_t *main_frame)  { -        cs_local_t       *local  = NULL; -        xlator_t         *this   = NULL; -        int               ret   = 0; - -        local = main_frame->local; -        this = main_frame->this; - -        ret = dict_set_uint32 (local->xattr_req, GF_CS_OBJECT_REPAIR, 256); -        if (ret) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "dict_set failed"); -                goto err; -        } - -        if (local->fd) { -                STACK_WIND (main_frame, cs_stat_check_cbk, FIRST_CHILD (this), -                            FIRST_CHILD (this)->fops->fstat, local->fd, -                            local->xattr_req); -        } else { -                STACK_WIND (main_frame, cs_stat_check_cbk, FIRST_CHILD (this), -                            FIRST_CHILD (this)->fops->stat, &local->loc, -                            local->xattr_req); -        } - -        return 0; +    cs_local_t *local = NULL; +    xlator_t *this = NULL; +    int ret = 0; + +    local = main_frame->local; +    this = main_frame->this; + +    ret = dict_set_uint32(local->xattr_req, GF_CS_OBJECT_REPAIR, 256); +    if (ret) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, "dict_set failed"); +        goto err; +    } + +    if (local->fd) { +        STACK_WIND(main_frame, cs_stat_check_cbk, FIRST_CHILD(this), +                   FIRST_CHILD(this)->fops->fstat, local->fd, local->xattr_req); +    } else { +        STACK_WIND(main_frame, cs_stat_check_cbk, FIRST_CHILD(this), +                   FIRST_CHILD(this)->fops->stat, &local->loc, +                   local->xattr_req); +    } + +    return 0;  err: -        cs_inodelk_unlock (main_frame); +    cs_inodelk_unlock(main_frame); -        cs_common_cbk (main_frame); +    cs_common_cbk(main_frame); -        return 0; +    return 0;  }  void -cs_common_cbk (call_frame_t *frame) +cs_common_cbk(call_frame_t *frame)  { -        glusterfs_fop_t fop = -1; -        cs_local_t      *local = NULL; +    glusterfs_fop_t fop = -1; +    cs_local_t *local = NULL; -        local = frame->local; +    local = frame->local; -        fop = local->fop; +    fop = local->fop; -        /*Note: Only the failure case needs to be handled here. Since for -         * successful stat check the fop will resume anyway. The unwind can -         * happen from the fop_cbk and each cbk can unlock the inodelk in case -         * a lock was taken before. The lock status can be stored in frame */ +    /*Note: Only the failure case needs to be handled here. Since for +     * successful stat check the fop will resume anyway. The unwind can +     * happen from the fop_cbk and each cbk can unlock the inodelk in case +     * a lock was taken before. The lock status can be stored in frame */ -        /* for failure case  */ +    /* for failure case  */ -        /*TODO: add other fops*/ -        switch (fop) { +    /*TODO: add other fops*/ +    switch (fop) {          case GF_FOP_WRITE: -                CS_STACK_UNWIND (writev, frame, local->op_ret, -                                 local->op_errno, NULL, NULL, NULL); -                break; +            CS_STACK_UNWIND(writev, frame, local->op_ret, local->op_errno, NULL, +                            NULL, NULL); +            break;          case GF_FOP_SETXATTR: -                CS_STACK_UNWIND (setxattr, frame, local->op_ret, -                                 local->op_errno, NULL); -                break; +            CS_STACK_UNWIND(setxattr, frame, local->op_ret, local->op_errno, +                            NULL); +            break;          case GF_FOP_READ: -                CS_STACK_UNWIND (readv, frame, local->op_ret, -                                 local->op_errno, NULL, 0, NULL, NULL, -                                 NULL); -                break; +            CS_STACK_UNWIND(readv, frame, local->op_ret, local->op_errno, NULL, +                            0, NULL, NULL, NULL); +            break;          case GF_FOP_FTRUNCATE: -                CS_STACK_UNWIND (ftruncate, frame, local->op_ret, -                                 local->op_errno, NULL, NULL, NULL); -                break; - +            CS_STACK_UNWIND(ftruncate, frame, local->op_ret, local->op_errno, +                            NULL, NULL, NULL); +            break;          default: -                break; -        } +            break; +    } -        return; +    return;  }  int -cs_blocking_inodelk_cbk (call_frame_t *lock_frame, void *cookie, xlator_t *this, -                         int32_t op_ret, int32_t op_errno, dict_t *xdata) +cs_blocking_inodelk_cbk(call_frame_t *lock_frame, void *cookie, xlator_t *this, +                        int32_t op_ret, int32_t op_errno, dict_t *xdata)  { -        cs_local_t      *main_local = NULL; -        call_frame_t    *main_frame = NULL; -        cs_local_t      *lock_local = NULL; +    cs_local_t *main_local = NULL; +    call_frame_t *main_frame = NULL; +    cs_local_t *lock_local = NULL; -        lock_local = lock_frame->local; +    lock_local = lock_frame->local; -        main_frame = lock_local->main_frame; -        main_local = main_frame->local; +    main_frame = lock_local->main_frame; +    main_local = main_frame->local; -        if (op_ret) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "inodelk failed"); -                main_local->op_errno = op_errno; -                main_local->op_ret = op_ret; -                goto err; -        } +    if (op_ret) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, "inodelk failed"); +        main_local->op_errno = op_errno; +        main_local->op_ret = op_ret; +        goto err; +    } -        main_local->locked = _gf_true; +    main_local->locked = _gf_true; -        cs_lock_wipe (lock_frame); +    cs_lock_wipe(lock_frame); -        cs_do_stat_check (main_frame); +    cs_do_stat_check(main_frame); -        return 0; +    return 0;  err: -        cs_common_cbk (main_frame); +    cs_common_cbk(main_frame); -        cs_lock_wipe (lock_frame); +    cs_lock_wipe(lock_frame); -        return 0; +    return 0;  }  int -cs_build_loc (loc_t *loc, call_frame_t *frame) +cs_build_loc(loc_t *loc, call_frame_t *frame)  { -        cs_local_t      *local  = NULL; -        int              ret    = -1; +    cs_local_t *local = NULL; +    int ret = -1; -        local = frame->local; +    local = frame->local; -        if (local->fd) { -                loc->inode = inode_ref (local->fd->inode); -                if (loc->inode) { -                        gf_uuid_copy (loc->gfid, loc->inode->gfid); -                        ret = 0; -                        goto out; -                } else { -                        ret = -1; -                        goto out; -                } +    if (local->fd) { +        loc->inode = inode_ref(local->fd->inode); +        if (loc->inode) { +            gf_uuid_copy(loc->gfid, loc->inode->gfid); +            ret = 0; +            goto out;          } else { -                loc->inode = inode_ref (local->loc.inode); -                if (loc->inode) { -                        gf_uuid_copy (loc->gfid, loc->inode->gfid); -                        ret = 0; -                        goto out; -                } else { -                        ret = -1; -                        goto out; -                } +            ret = -1; +            goto out; +        } +    } else { +        loc->inode = inode_ref(local->loc.inode); +        if (loc->inode) { +            gf_uuid_copy(loc->gfid, loc->inode->gfid); +            ret = 0; +            goto out; +        } else { +            ret = -1; +            goto out;          } +    }  out: -        return ret; +    return ret;  }  int -cs_blocking_inodelk (call_frame_t *parent_frame) +cs_blocking_inodelk(call_frame_t *parent_frame)  { -        call_frame_t    *lock_frame = NULL; -        cs_local_t      *lock_local = NULL; -        xlator_t        *this       = NULL; -        struct gf_flock  flock      = {0,}; -        int              ret        = 0; - -        lock_frame = cs_lock_frame (parent_frame); -        if (!lock_frame) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "insuffcient memory"); -                goto err; -        } - -        this = parent_frame->this; - -        lock_local = cs_local_init (this, lock_frame, NULL, NULL, 0); -        if (!lock_local) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "local init failed"); -                goto err; -        } - -        lock_local->main_frame = parent_frame; - -        flock.l_type = F_WRLCK; - -        ret = cs_build_loc (&lock_local->loc, parent_frame); -        if (ret) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "build_loc failed"); -                goto err; -        } - -        STACK_WIND (lock_frame, cs_blocking_inodelk_cbk, FIRST_CHILD (this), -                    FIRST_CHILD (this)->fops->inodelk, CS_LOCK_DOMAIN, -                    &lock_local->loc, F_SETLKW, &flock, NULL); - -        return 0; +    call_frame_t *lock_frame = NULL; +    cs_local_t *lock_local = NULL; +    xlator_t *this = NULL; +    struct gf_flock flock = { +        0, +    }; +    int ret = 0; + +    lock_frame = cs_lock_frame(parent_frame); +    if (!lock_frame) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, "insuffcient memory"); +        goto err; +    } + +    this = parent_frame->this; + +    lock_local = cs_local_init(this, lock_frame, NULL, NULL, 0); +    if (!lock_local) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, "local init failed"); +        goto err; +    } + +    lock_local->main_frame = parent_frame; + +    flock.l_type = F_WRLCK; + +    ret = cs_build_loc(&lock_local->loc, parent_frame); +    if (ret) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, "build_loc failed"); +        goto err; +    } + +    STACK_WIND(lock_frame, cs_blocking_inodelk_cbk, FIRST_CHILD(this), +               FIRST_CHILD(this)->fops->inodelk, CS_LOCK_DOMAIN, +               &lock_local->loc, F_SETLKW, &flock, NULL); + +    return 0;  err: -        if (lock_frame) -                cs_lock_wipe (lock_frame); +    if (lock_frame) +        cs_lock_wipe(lock_frame); -        return -1; +    return -1;  }  int -locate_and_execute (call_frame_t *frame) +locate_and_execute(call_frame_t *frame)  { -        int     ret = 0; +    int ret = 0; -        ret = cs_blocking_inodelk (frame); +    ret = cs_blocking_inodelk(frame); -        if (ret) -                return -1; -        else -                return 0; +    if (ret) +        return -1; +    else +        return 0;  }  int32_t -cs_resume_truncate (call_frame_t *frame, xlator_t *this, loc_t *loc, -                    off_t offset, dict_t *xattr_req) +cs_resume_truncate(call_frame_t *frame, xlator_t *this, loc_t *loc, +                   off_t offset, dict_t *xattr_req)  { -        cs_local_t      *local  = NULL; -        int              ret    = 0; +    cs_local_t *local = NULL; +    int ret = 0; -        local = frame->local; +    local = frame->local; -        ret = cs_resume_postprocess (this, frame, loc->inode); -        if (ret) { -                goto unwind; -        } +    ret = cs_resume_postprocess(this, frame, loc->inode); +    if (ret) { +        goto unwind; +    } -        cs_inodelk_unlock (frame); +    cs_inodelk_unlock(frame); -        STACK_WIND (frame, cs_truncate_cbk, -                    FIRST_CHILD(this), FIRST_CHILD(this)->fops->truncate, -                    loc, offset, local->xattr_req); +    STACK_WIND(frame, cs_truncate_cbk, FIRST_CHILD(this), +               FIRST_CHILD(this)->fops->truncate, loc, offset, +               local->xattr_req); -        return 0; +    return 0;  unwind: -        cs_inodelk_unlock (frame); +    cs_inodelk_unlock(frame); -        cs_common_cbk (frame); +    cs_common_cbk(frame); -        return 0; +    return 0;  } -  int32_t -cs_resume_setxattr (call_frame_t *frame, xlator_t *this, loc_t *loc, -                    dict_t *dict, int32_t flags, dict_t *xdata) +cs_resume_setxattr(call_frame_t *frame, xlator_t *this, loc_t *loc, +                   dict_t *dict, int32_t flags, dict_t *xdata)  { -        cs_local_t      *local = NULL; -        cs_inode_ctx_t  *ctx   = NULL; -        gf_cs_obj_state  state = GF_CS_ERROR; - -        local = frame->local; - -        __cs_inode_ctx_get (this, loc->inode, &ctx); - -        state = __cs_get_file_state (this, loc->inode, ctx); - -        if (state == GF_CS_ERROR) { -                /* file is already remote */ -                local->op_ret = -1; -                local->op_errno = EINVAL; -                gf_msg (this->name, GF_LOG_WARNING, 0, 0, -                        "file %s , could not figure file state", loc->path); -                goto unwind; -        } - - -        if (state == GF_CS_REMOTE) { -                /* file is already remote */ -                local->op_ret = -1; -                local->op_errno = EINVAL; -                gf_msg (this->name, GF_LOG_WARNING, 0, EINVAL, -                        "file %s is already remote", loc->path); -                goto unwind; -        } - -        if (state == GF_CS_DOWNLOADING) { -                gf_msg (this->name, GF_LOG_WARNING, 0, 0, -                        " file is in downloading state."); -                local->op_ret = -1; -                local->op_errno = EINVAL; -                goto unwind; -        } - -        STACK_WIND (frame, cs_setxattr_cbk, FIRST_CHILD(this), -                    FIRST_CHILD(this)->fops->setxattr, loc, dict, flags, -                    local->xattr_req); - -        return 0; +    cs_local_t *local = NULL; +    cs_inode_ctx_t *ctx = NULL; +    gf_cs_obj_state state = GF_CS_ERROR; + +    local = frame->local; + +    __cs_inode_ctx_get(this, loc->inode, &ctx); + +    state = __cs_get_file_state(this, loc->inode, ctx); + +    if (state == GF_CS_ERROR) { +        /* file is already remote */ +        local->op_ret = -1; +        local->op_errno = EINVAL; +        gf_msg(this->name, GF_LOG_WARNING, 0, 0, +               "file %s , could not figure file state", loc->path); +        goto unwind; +    } + +    if (state == GF_CS_REMOTE) { +        /* file is already remote */ +        local->op_ret = -1; +        local->op_errno = EINVAL; +        gf_msg(this->name, GF_LOG_WARNING, 0, EINVAL, +               "file %s is already remote", loc->path); +        goto unwind; +    } + +    if (state == GF_CS_DOWNLOADING) { +        gf_msg(this->name, GF_LOG_WARNING, 0, 0, +               " file is in downloading state."); +        local->op_ret = -1; +        local->op_errno = EINVAL; +        goto unwind; +    } + +    STACK_WIND(frame, cs_setxattr_cbk, FIRST_CHILD(this), +               FIRST_CHILD(this)->fops->setxattr, loc, dict, flags, +               local->xattr_req); + +    return 0;  unwind: -        cs_inodelk_unlock (frame); +    cs_inodelk_unlock(frame); -        cs_common_cbk (frame); +    cs_common_cbk(frame); -        return 0; +    return 0;  } - - -  gf_cs_obj_state -__cs_get_file_state (xlator_t *this, inode_t *inode, cs_inode_ctx_t *ctx) +__cs_get_file_state(xlator_t *this, inode_t *inode, cs_inode_ctx_t *ctx)  { -        gf_cs_obj_state    state = -1; +    gf_cs_obj_state state = -1; -        if (!ctx) -                return GF_CS_ERROR; +    if (!ctx) +        return GF_CS_ERROR; -        LOCK (&inode->lock); -        { -                state = ctx->state; -        } -        UNLOCK (&inode->lock); +    LOCK(&inode->lock); +    { +        state = ctx->state; +    } +    UNLOCK(&inode->lock); -        return state; +    return state;  }  void -__cs_inode_ctx_get (xlator_t *this, inode_t *inode, cs_inode_ctx_t **ctx) +__cs_inode_ctx_get(xlator_t *this, inode_t *inode, cs_inode_ctx_t **ctx)  { -        uint64_t        ctxint = 0; -        int             ret = 0; +    uint64_t ctxint = 0; +    int ret = 0; -        LOCK (&inode->lock); -        { -        ret = __inode_ctx_get (inode, this, &ctxint); -        } -        UNLOCK (&inode->lock); +    LOCK(&inode->lock); +    { +        ret = __inode_ctx_get(inode, this, &ctxint); +    } +    UNLOCK(&inode->lock); -        if (ret) -                *ctx = NULL; -        else -                *ctx = (cs_inode_ctx_t *)ctxint; +    if (ret) +        *ctx = NULL; +    else +        *ctx = (cs_inode_ctx_t *)ctxint; -        return; +    return;  }  int -__cs_inode_ctx_update (xlator_t *this, inode_t *inode, uint64_t val) +__cs_inode_ctx_update(xlator_t *this, inode_t *inode, uint64_t val)  { -        cs_inode_ctx_t  *ctx = NULL; -        uint64_t         ctxint = 0; -        int              ret = 0; +    cs_inode_ctx_t *ctx = NULL; +    uint64_t ctxint = 0; +    int ret = 0; -        LOCK (&inode->lock); -        { -        ret = __inode_ctx_get (inode, this, &ctxint); +    LOCK(&inode->lock); +    { +        ret = __inode_ctx_get(inode, this, &ctxint);          if (ret) { -                ctx = GF_CALLOC (1, sizeof (*ctx), gf_cs_mt_cs_inode_ctx_t); -                if (!ctx) { -                        gf_msg (this->name, GF_LOG_ERROR, 0, 0, -                                "ctx allocation failed"); -                        ret = -1; -                        goto out; -                } +            ctx = GF_CALLOC(1, sizeof(*ctx), gf_cs_mt_cs_inode_ctx_t); +            if (!ctx) { +                gf_msg(this->name, GF_LOG_ERROR, 0, 0, "ctx allocation failed"); +                ret = -1; +                goto out; +            } -                ctx->state = val; +            ctx->state = val; -                ctxint = (uint64_t) ctx; +            ctxint = (uint64_t)ctx; -                ret = __inode_ctx_set (inode, this, &ctxint); -                if (ret) { -                        GF_FREE (ctx); -                        goto out; -                } +            ret = __inode_ctx_set(inode, this, &ctxint); +            if (ret) { +                GF_FREE(ctx); +                goto out; +            }          } else { -                ctx = (cs_inode_ctx_t *) ctxint; - -                ctx->state = val; -        } +            ctx = (cs_inode_ctx_t *)ctxint; +            ctx->state = val;          } +    }  out: -        UNLOCK (&inode->lock); +    UNLOCK(&inode->lock); -        return ret; +    return ret;  }  int -cs_inode_ctx_reset (xlator_t *this, inode_t *inode) +cs_inode_ctx_reset(xlator_t *this, inode_t *inode)  { -        cs_inode_ctx_t  *ctx = NULL; -        uint64_t         ctxint = 0; +    cs_inode_ctx_t *ctx = NULL; +    uint64_t ctxint = 0; -        inode_ctx_del (inode, this, &ctxint); -        if (!ctxint) { -                return 0; -        } +    inode_ctx_del(inode, this, &ctxint); +    if (!ctxint) { +        return 0; +    } -        ctx = (cs_inode_ctx_t *)ctxint; +    ctx = (cs_inode_ctx_t *)ctxint; -        GF_FREE (ctx); -        return 0; +    GF_FREE(ctx); +    return 0;  }  int -cs_resume_postprocess (xlator_t *this, call_frame_t *frame, inode_t *inode) +cs_resume_postprocess(xlator_t *this, call_frame_t *frame, inode_t *inode)  { -        cs_local_t      *local = NULL; -        gf_cs_obj_state  state = -1; -        cs_inode_ctx_t  *ctx   = NULL; -        int              ret   = 0; - -        local = frame->local; -        if (!local) { -                ret = -1; -                goto out; -        } - -        __cs_inode_ctx_get (this, inode, &ctx); - -        state = __cs_get_file_state (this, inode, ctx); -        if (state == GF_CS_ERROR) { -                gf_msg (this->name, GF_LOG_ERROR, 0, 0, "status is GF_CS_ERROR." -                        " Aborting write"); -                local->op_ret = -1; -                local->op_errno = EREMOTE; -                ret = -1; -                goto out; -        } - -        if (state == GF_CS_REMOTE || state == GF_CS_DOWNLOADING) { -                gf_msg_debug (this->name, 0, "status is %d", state); -                ret = cs_download (frame); -                if (ret == 0) { -                        gf_msg_debug (this->name, 0, "Winding for Final Write"); -                } else { -                        gf_msg (this->name, GF_LOG_ERROR, 0, 0, -                                " download failed, unwinding writev"); -                        local->op_ret = -1; -                        local->op_errno = EREMOTE; -                        ret = -1; -                } +    cs_local_t *local = NULL; +    gf_cs_obj_state state = -1; +    cs_inode_ctx_t *ctx = NULL; +    int ret = 0; + +    local = frame->local; +    if (!local) { +        ret = -1; +        goto out; +    } + +    __cs_inode_ctx_get(this, inode, &ctx); + +    state = __cs_get_file_state(this, inode, ctx); +    if (state == GF_CS_ERROR) { +        gf_msg(this->name, GF_LOG_ERROR, 0, 0, +               "status is GF_CS_ERROR." +               " Aborting write"); +        local->op_ret = -1; +        local->op_errno = EREMOTE; +        ret = -1; +        goto out; +    } + +    if (state == GF_CS_REMOTE || state == GF_CS_DOWNLOADING) { +        gf_msg_debug(this->name, 0, "status is %d", state); +        ret = cs_download(frame); +        if (ret == 0) { +            gf_msg_debug(this->name, 0, "Winding for Final Write"); +        } else { +            gf_msg(this->name, GF_LOG_ERROR, 0, 0, +                   " download failed, unwinding writev"); +            local->op_ret = -1; +            local->op_errno = EREMOTE; +            ret = -1;          } +    }  out: -        return ret; +    return ret;  }  int32_t -cs_fdctx_to_dict (xlator_t *this, -        fd_t *fd, -        dict_t *dict) +cs_fdctx_to_dict(xlator_t *this, fd_t *fd, dict_t *dict)  { -        return 0; +    return 0;  } -  int32_t -cs_inode (xlator_t *this) +cs_inode(xlator_t *this)  { -        return 0; +    return 0;  } -  int32_t -cs_inode_to_dict (xlator_t *this, -        dict_t *dict) +cs_inode_to_dict(xlator_t *this, dict_t *dict)  { -        return 0; +    return 0;  } -  int32_t -cs_history (xlator_t *this) +cs_history(xlator_t *this)  { -        return 0; +    return 0;  } -  int32_t -cs_fd (xlator_t *this) +cs_fd(xlator_t *this)  { -        return 0; +    return 0;  } -  int32_t -cs_fd_to_dict (xlator_t *this, -        dict_t *dict) +cs_fd_to_dict(xlator_t *this, dict_t *dict)  { -        return 0; +    return 0;  } -  int32_t -cs_fdctx (xlator_t *this, -        fd_t *fd) +cs_fdctx(xlator_t *this, fd_t *fd)  { -        return 0; +    return 0;  } -  int32_t -cs_inodectx (xlator_t *this, -        inode_t *ino) +cs_inodectx(xlator_t *this, inode_t *ino)  { -        return 0; +    return 0;  } -  int32_t -cs_inodectx_to_dict (xlator_t *this, -        inode_t *ino, -        dict_t *dict) +cs_inodectx_to_dict(xlator_t *this, inode_t *ino, dict_t *dict)  { -        return 0; +    return 0;  } -  int32_t -cs_priv_to_dict (xlator_t *this, -        dict_t *dict, char *brickname) +cs_priv_to_dict(xlator_t *this, dict_t *dict, char *brickname)  { -        return 0; +    return 0;  } -  int32_t -cs_priv (xlator_t *this) +cs_priv(xlator_t *this)  { -        return 0; +    return 0;  }  int -cs_notify (xlator_t *this, int event, void *data, ...) +cs_notify(xlator_t *this, int event, void *data, ...)  { -        return default_notify (this, event, data); +    return default_notify(this, event, data);  } -  struct xlator_fops cs_fops = { -        .stat                 = cs_stat, -        .readdirp             = cs_readdirp, -        .truncate             = cs_truncate, -        .seek                 = cs_seek, -        .statfs               = cs_statfs, -        .fallocate            = cs_fallocate, -        .discard              = cs_discard, -        .getxattr             = cs_getxattr, -        .writev               = cs_writev, -        .setxattr             = cs_setxattr, -        .fgetxattr            = cs_fgetxattr, -        .lookup               = cs_lookup, -        .fsetxattr            = cs_fsetxattr, -        .readv                = cs_readv, -        .ftruncate            = cs_ftruncate, -        .rchecksum            = cs_rchecksum, -        .unlink               = cs_unlink, -        .open                 = cs_open, -        .fstat                = cs_fstat, -        .zerofill             = cs_zerofill, +    .stat = cs_stat, +    .readdirp = cs_readdirp, +    .truncate = cs_truncate, +    .seek = cs_seek, +    .statfs = cs_statfs, +    .fallocate = cs_fallocate, +    .discard = cs_discard, +    .getxattr = cs_getxattr, +    .writev = cs_writev, +    .setxattr = cs_setxattr, +    .fgetxattr = cs_fgetxattr, +    .lookup = cs_lookup, +    .fsetxattr = cs_fsetxattr, +    .readv = cs_readv, +    .ftruncate = cs_ftruncate, +    .rchecksum = cs_rchecksum, +    .unlink = cs_unlink, +    .open = cs_open, +    .fstat = cs_fstat, +    .zerofill = cs_zerofill,  }; -struct xlator_cbks cs_cbks = { -}; +struct xlator_cbks cs_cbks = {};  struct xlator_dumpops cs_dumpops = { -        .fdctx_to_dict        = cs_fdctx_to_dict, -        .inode                = cs_inode, -        .inode_to_dict        = cs_inode_to_dict, -        .history              = cs_history, -        .fd                   = cs_fd, -        .fd_to_dict           = cs_fd_to_dict, -        .fdctx                = cs_fdctx, -        .inodectx             = cs_inodectx, -        .inodectx_to_dict     = cs_inodectx_to_dict, -        .priv_to_dict         = cs_priv_to_dict, -        .priv                 = cs_priv, +    .fdctx_to_dict = cs_fdctx_to_dict, +    .inode = cs_inode, +    .inode_to_dict = cs_inode_to_dict, +    .history = cs_history, +    .fd = cs_fd, +    .fd_to_dict = cs_fd_to_dict, +    .fdctx = cs_fdctx, +    .inodectx = cs_inodectx, +    .inodectx_to_dict = cs_inodectx_to_dict, +    .priv_to_dict = cs_priv_to_dict, +    .priv = cs_priv,  };  struct volume_options cs_options[] = { -        { .key = {"cloudsync-storetype"}, -          .type = GF_OPTION_TYPE_STR, -          .description = "Defines which remote store is enabled" -        }, -        { .key  = {NULL} }, +    {.key = {"cloudsync-storetype"}, +     .type = GF_OPTION_TYPE_STR, +     .description = "Defines which remote store is enabled"}, +    {.key = {NULL}},  };  xlator_api_t xlator_api = { -        .init           = cs_init, -        .fini           = cs_fini, -        .notify         = cs_notify, -        .reconfigure    = cs_reconfigure, -        .mem_acct_init  = cs_mem_acct_init, -        .dumpops        = &cs_dumpops, -        .fops           = &cs_fops, -        .cbks           = &cs_cbks, -        .options        = cs_options, -        .identifier     = "cloudsync", -        .category       = GF_TECH_PREVIEW, +    .init = cs_init, +    .fini = cs_fini, +    .notify = cs_notify, +    .reconfigure = cs_reconfigure, +    .mem_acct_init = cs_mem_acct_init, +    .dumpops = &cs_dumpops, +    .fops = &cs_fops, +    .cbks = &cs_cbks, +    .options = cs_options, +    .identifier = "cloudsync", +    .category = GF_TECH_PREVIEW,  };  | 
