From a959abb342eba3a48be08fdeed1d3d90aa77dfce Mon Sep 17 00:00:00 2001 From: Raghavendra G Date: Fri, 18 Sep 2009 05:59:29 +0000 Subject: performance/quick-read: refine logic of qr_readv. - An extra vector was being allocated when the number of bytes being read from cache were equal to the iobuf size. Signed-off-by: Anand V. Avati BUG: 274 (Memory corruption in Apache running on booster) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=274 --- xlators/performance/quick-read/src/quick-read.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/xlators/performance/quick-read/src/quick-read.c b/xlators/performance/quick-read/src/quick-read.c index 57f30948f..c7d282aff 100644 --- a/xlators/performance/quick-read/src/quick-read.c +++ b/xlators/performance/quick-read/src/quick-read.c @@ -794,7 +794,10 @@ qr_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, content = dict_get (file->xattr, GLUSTERFS_CONTENT_KEY); + + stbuf = file->stbuf; content_cached = 1; + if (offset > content->len) { op_ret = 0; end = content->len; @@ -810,7 +813,17 @@ qr_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, } ctx = this->ctx; - count = (op_ret / iobuf_pool->page_size) + 1; + count = (op_ret / iobuf_pool->page_size); + if ((op_ret % iobuf_pool->page_size) + != 0) { + count++; + } + + if (count == 0) { + op_ret = 0; + goto unlock; + } + vector = CALLOC (count, sizeof (*vector)); if (vector == NULL) { @@ -857,8 +870,6 @@ qr_readv (call_frame_t *frame, xlator_t *this, fd_t *fd, size_t size, vector[i].iov_base = iobuf->ptr; vector[i].iov_len = len; } - - stbuf = file->stbuf; } } unlock: -- cgit