diff options
| author | Amar Tumballi <amar@gluster.com> | 2010-06-23 02:55:21 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2010-06-24 10:32:11 -0700 | 
| commit | e82ca8fc5164f4ba2ff396da86b4a490d9a47370 (patch) | |
| tree | 1c92b4d4c0a4ad42b2213f17c92ededc45ae89a2 /xlators/protocol/server/src/server-helpers.c | |
| parent | 487e9f1d59bbf7b37a30ceef5dbfd8ca77b94988 (diff) | |
minor improvements in protocol
* rpc_clnt_submit() now takes 'cbkfn' as an argument.
* readdir xdr now uses dirent structure directly instead of
  using 'opaque' buffer through which it was serializing /
  unserializing the dirent structure.
* 'gfs_id' field (currently used for debugging) is properly updated
Signed-off-by: Amar Tumballi <amar@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 875 (Implement a new protocol to provide proper backward/forward compatibility)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=875
Diffstat (limited to 'xlators/protocol/server/src/server-helpers.c')
| -rw-r--r-- | xlators/protocol/server/src/server-helpers.c | 100 | 
1 files changed, 100 insertions, 0 deletions
diff --git a/xlators/protocol/server/src/server-helpers.c b/xlators/protocol/server/src/server-helpers.c index 5cae205d76f..44496a1592b 100644 --- a/xlators/protocol/server/src/server-helpers.c +++ b/xlators/protocol/server/src/server-helpers.c @@ -1390,3 +1390,103 @@ server_print_request (call_frame_t *frame)                  op, caller,                  resolve_vars, loc_vars, resolve2_vars, loc2_vars, other_vars);  } + +int +serialize_rsp_direntp (gf_dirent_t *entries, gfs3_readdirp_rsp *rsp) +{ +	gf_dirent_t         *entry = NULL; +        gfs3_dirplist       *trav = NULL; +        gfs3_dirplist       *prev = NULL; +	int                  ret = -1; + +	list_for_each_entry (entry, &entries->list, list) { +                trav = GF_CALLOC (1, sizeof (*trav), 0); +                if (!trav) +                        goto out; + +                trav->d_ino  = entry->d_ino; +                trav->d_off  = entry->d_off; +                trav->d_len  = entry->d_len; +                trav->d_type = entry->d_type; +                //trav->name   = memdup (entry->d_name, entry->d_len + 1); +                trav->name   = entry->d_name; + +                gf_stat_from_iatt (&trav->stat, &entry->d_stat); + +                if (prev) +                        prev->nextentry = trav; +                else +                        rsp->reply = trav; + +                prev = trav; +	} + +        ret = 0; +out: +        return ret; +} + + +int +serialize_rsp_dirent (gf_dirent_t *entries, gfs3_readdir_rsp *rsp) +{ +	gf_dirent_t         *entry = NULL; +        gfs3_dirlist        *trav = NULL; +        gfs3_dirlist        *prev = NULL; +	int                  ret = -1; + +	list_for_each_entry (entry, &entries->list, list) { +                trav = GF_CALLOC (1, sizeof (*trav), 0); +                if (!trav) +                        goto out; +                trav->d_ino  = entry->d_ino; +                trav->d_off  = entry->d_off; +                trav->d_len  = entry->d_len; +                trav->d_type = entry->d_type; +                trav->name   = entry->d_name; +                if (prev) +                        prev->nextentry = trav; +                else +                        rsp->reply = trav; + +                prev = trav; +	} + +        ret = 0; +out: +        return ret; +} + +int +readdir_rsp_cleanup (gfs3_readdir_rsp *rsp) +{ +        gfs3_dirlist *prev = NULL; +        gfs3_dirlist *trav = NULL; + +        trav = rsp->reply; +        prev = trav; +        while (trav) { +                trav = trav->nextentry; +                GF_FREE (prev); +                prev = trav; +        } + +        return 0; +} + +int +readdirp_rsp_cleanup (gfs3_readdirp_rsp *rsp) +{ +        gfs3_dirplist *prev = NULL; +        gfs3_dirplist *trav = NULL; + +        trav = rsp->reply; +        prev = trav; +        while (trav) { +                trav = trav->nextentry; +                GF_FREE (prev); +                prev = trav; +        } + +        return 0; +}  | 
