diff options
-rwxr-xr-x | libglusterfsclient/src/libglusterfsclient-internals.h | 4 | ||||
-rwxr-xr-x | libglusterfsclient/src/libglusterfsclient.c | 40 | ||||
-rwxr-xr-x | libglusterfsclient/src/libglusterfsclient.h | 3 |
3 files changed, 25 insertions, 22 deletions
diff --git a/libglusterfsclient/src/libglusterfsclient-internals.h b/libglusterfsclient/src/libglusterfsclient-internals.h index a547da3039e..b12c08efa06 100755 --- a/libglusterfsclient/src/libglusterfsclient-internals.h +++ b/libglusterfsclient/src/libglusterfsclient-internals.h @@ -160,11 +160,9 @@ typedef struct libglusterfs_client_async_local { call_frame_t *frame = get_call_frame_for_req (ctx, 1); \ xlator_t *xl = frame->this->children ? \ frame->this->children->xlator : NULL; \ - dict_t *refs = frame->root->req_refs; \ frame->root->state = ctx; \ frame->local = local; \ STACK_WIND (frame, ret_fn, xl, xl->fops->op, args); \ - dict_unref (refs); \ } while (0) #define LIBGF_CLIENT_FOP(ctx, stub, op, local, args ...) \ @@ -172,7 +170,6 @@ typedef struct libglusterfs_client_async_local { call_frame_t *frame = get_call_frame_for_req (ctx, 1); \ xlator_t *xl = frame->this->children ? \ frame->this->children->xlator : NULL; \ - dict_t *refs = frame->root->req_refs; \ if (!local) { \ local = CALLOC (1, sizeof (*local)); \ } \ @@ -183,7 +180,6 @@ typedef struct libglusterfs_client_async_local { pthread_mutex_init (&local->lock, NULL); \ LIBGF_STACK_WIND_AND_WAIT (frame, libgf_client_##op##_cbk, xl, \ xl->fops->op, args); \ - dict_unref (refs); \ stub = local->reply_stub; \ FREE (frame->local); \ frame->local = NULL; \ diff --git a/libglusterfsclient/src/libglusterfsclient.c b/libglusterfsclient/src/libglusterfsclient.c index ae0b055ff7b..174eb7a27e0 100755 --- a/libglusterfsclient/src/libglusterfsclient.c +++ b/libglusterfsclient/src/libglusterfsclient.c @@ -297,14 +297,6 @@ get_call_frame_for_req (libglusterfs_client_ctx_t *ctx, char d) frame->root->pid = getpid (); frame->root->unique = ctx->counter++; - if (d) { - frame->root->req_refs = dict_ref (get_new_dict ()); - /* - TODO - dict_set (frame->root->req_refs, NULL, priv->buf); - */ - } - return frame; } @@ -392,6 +384,7 @@ glusterfs_init (glusterfs_init_params_t *init_ctx) /* FIXME: why is count hardcoded to 16384 */ ctx->gf_ctx.event_pool = event_pool_new (16384); + ctx->gf_ctx.iobuf_pool = iobuf_pool_new (64 * 1048576, 128 * 1024); lim.rlim_cur = RLIM_INFINITY; lim.rlim_max = RLIM_INFINITY; @@ -1093,7 +1086,7 @@ out: iobuf->vector = vector; iobuf->count = 1; - iobuf->ref = dict_ref (dict); + iobuf->dictref = dict_ref (dict); } } @@ -2098,12 +2091,13 @@ libgf_client_readv_cbk (call_frame_t *frame, int32_t op_errno, struct iovec *vector, int32_t count, - struct stat *stbuf) + struct stat *stbuf, + struct iobref *iobref) { libgf_client_local_t *local = frame->local; local->reply_stub = fop_readv_cbk_stub (frame, NULL, op_ret, op_errno, - vector, count, stbuf); + vector, count, stbuf, iobref); pthread_mutex_lock (&local->lock); { @@ -2374,12 +2368,16 @@ libgf_client_writev (libglusterfs_client_ctx_t *ctx, call_stub_t *stub = NULL; int op_ret = -1; libgf_client_local_t *local = NULL; + struct iobref *iobref = NULL; - LIBGF_CLIENT_FOP (ctx, stub, writev, local, fd, vector, count, offset); + iobref = iobref_new (); + LIBGF_CLIENT_FOP (ctx, stub, writev, local, fd, vector, count, offset, + iobref); op_ret = stub->args.writev_cbk.op_ret; errno = stub->args.writev_cbk.op_errno; + iobref_unref (iobref); call_stub_destroy (stub); return op_ret; } @@ -2707,7 +2705,8 @@ libglusterfs_readv_async_cbk (call_frame_t *frame, int32_t op_errno, struct iovec *vector, int32_t count, - struct stat *stbuf) + struct stat *stbuf, + struct iobref *iobref) { glusterfs_iobuf_t *buf; libglusterfs_client_async_local_t *local = frame->local; @@ -2723,8 +2722,8 @@ libglusterfs_readv_async_cbk (call_frame_t *frame, buf->count = count; - if (frame->root->rsp_refs) { - buf->ref = dict_ref (frame->root->rsp_refs); + if (iobref) { + buf->iobref = iobref_ref (iobref); } if (op_ret > 0) { @@ -2755,7 +2754,10 @@ glusterfs_free (glusterfs_iobuf_t *buf) { //iov_free (buf->vector, buf->count); FREE (buf->vector); - dict_unref ((dict_t *) buf->ref); + if (buf->iobref) + iobref_unref ((struct iobref *) buf->iobref); + if (buf->dictref) + dict_unref ((dict_t *) buf->dictref); FREE (buf); } @@ -2862,6 +2864,7 @@ glusterfs_write_async (glusterfs_file_t fd, libglusterfs_client_fd_ctx_t *fd_ctx = NULL; data_t *fd_ctx_data = NULL; int32_t op_ret = 0; + struct iobref *iobref = NULL; local = CALLOC (1, sizeof (*local)); ERR_ABORT (local); @@ -2890,6 +2893,7 @@ glusterfs_write_async (glusterfs_file_t fd, pthread_mutex_unlock (&fd_ctx->lock); } + iobref = iobref_new (); LIBGF_CLIENT_FOP_ASYNC (ctx, local, libglusterfs_writev_async_cbk, @@ -2897,7 +2901,9 @@ glusterfs_write_async (glusterfs_file_t fd, __fd, &vector, 1, - __offset); + __offset, + iobref); + iobref_unref (iobref); out: return op_ret; diff --git a/libglusterfsclient/src/libglusterfsclient.h b/libglusterfsclient/src/libglusterfsclient.h index 40d08eced26..516a03a0891 100755 --- a/libglusterfsclient/src/libglusterfsclient.h +++ b/libglusterfsclient/src/libglusterfsclient.h @@ -32,7 +32,8 @@ __BEGIN_DECLS typedef struct { struct iovec *vector; int count; - void *ref; + void *iobref; + void *dictref; } glusterfs_iobuf_t; typedef struct { |