diff options
| author | Pranith Kumar K <pranithk@gluster.com> | 2012-02-14 22:40:34 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vijay@gluster.com> | 2012-02-20 21:23:21 -0800 | 
| commit | 5f117a4a1fca3ec2d163fe77615cf6859c0450e4 (patch) | |
| tree | 695913cadfb8d8fdacd240bf5e84dcb78a0cfdbc /libglusterfs/src/syncop.c | |
| parent | 8456c28af75a4083286fc6ceadc03f2703f4c9b6 (diff) | |
cluster/afr: Self-heald, Index integration
Change-Id: Ic68eb00b356a6ee3cb88fe2bde50374be7a64ba3
BUG: 763820
Signed-off-by: Pranith Kumar K <pranithk@gluster.com>
Reviewed-on: http://review.gluster.com/2749
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vijay@gluster.com>
Diffstat (limited to 'libglusterfs/src/syncop.c')
| -rw-r--r-- | libglusterfs/src/syncop.c | 59 | 
1 files changed, 59 insertions, 0 deletions
diff --git a/libglusterfs/src/syncop.c b/libglusterfs/src/syncop.c index 096c29efe0a..4acac5f8fa9 100644 --- a/libglusterfs/src/syncop.c +++ b/libglusterfs/src/syncop.c @@ -548,6 +548,65 @@ syncop_readdirp (xlator_t *subvol,  }  int32_t +syncop_readdir_cbk (call_frame_t *frame, +                    void *cookie, +                    xlator_t *this, +                    int32_t op_ret, +                    int32_t op_errno, +                    gf_dirent_t *entries) +{ +        struct syncargs *args = NULL; +        gf_dirent_t *entry = NULL; +        gf_dirent_t  *tmp = NULL; + +        int count = 0; + +        args = cookie; + +        INIT_LIST_HEAD (&args->entries.list); + +        args->op_ret   = op_ret; +        args->op_errno = op_errno; + +        if (op_ret >= 0) { +                list_for_each_entry (entry, &entries->list, list) { +                        tmp = entry_copy (entry); +                        gf_log (this->name, GF_LOG_TRACE, +                                "adding entry=%s, count=%d", +                                tmp->d_name, count); +                        list_add_tail (&tmp->list, &(args->entries.list)); +                        count++; +                } +        } + +        __wake (args); + +        return 0; + +} + +int +syncop_readdir (xlator_t *subvol, +                fd_t *fd, +                size_t size, +                off_t off, +                gf_dirent_t *entries) +{ +        struct syncargs args = {0, }; + +        SYNCOP (subvol, (&args), syncop_readdir_cbk, subvol->fops->readdir, +                fd, size, off); + +        if (entries) +                list_splice_init (&args.entries.list, &entries->list); +        /* TODO: need to free all the 'args.entries' in 'else' case */ + +        errno = args.op_errno; +        return args.op_ret; + +} + +int32_t  syncop_opendir_cbk (call_frame_t *frame,                      void *cookie,                      xlator_t *this,  | 
