From eae8a469e7172380dd9c820405e7528a0ec33bad Mon Sep 17 00:00:00 2001 From: Raghavendra G Date: Wed, 14 Mar 2012 10:14:18 +0530 Subject: performance/io-cache: store op_errno in page. This will enable us to pass appropriate op_errno indicating EOF even during cache-hits. Signed-off-by: Raghavendra G Change-Id: Ib239b5de9b8fca2bd8eb5ec87c93f2cb1c11a99c BUG: 795789 Signed-off-by: Raghavendra G Reviewed-on: http://review.gluster.com/2939 Tested-by: Gluster Build System Reviewed-by: Amar Tumballi Reviewed-by: Vijay Bellur --- xlators/performance/io-cache/src/io-cache.c | 8 +++++--- xlators/performance/io-cache/src/io-cache.h | 1 + xlators/performance/io-cache/src/ioc-inode.c | 2 +- xlators/performance/io-cache/src/page.c | 1 + 4 files changed, 8 insertions(+), 4 deletions(-) (limited to 'xlators/performance') diff --git a/xlators/performance/io-cache/src/io-cache.c b/xlators/performance/io-cache/src/io-cache.c index 78c8b14bf..5b909091e 100644 --- a/xlators/performance/io-cache/src/io-cache.c +++ b/xlators/performance/io-cache/src/io-cache.c @@ -999,7 +999,8 @@ ioc_dispatch_requests (call_frame_t *frame, ioc_inode_t *ioc_inode, fd_t *fd, "cache hit for trav_offset=%" PRId64"/local_offset=%"PRId64"", trav_offset, local_offset); - waitq = __ioc_page_wakeup (trav, 0); + waitq = __ioc_page_wakeup (trav, + trav->op_errno); } else { /* if waitq already exists, fstat * revalidate is @@ -1017,7 +1018,7 @@ ioc_dispatch_requests (call_frame_t *frame, ioc_inode_t *ioc_inode, fd_t *fd, need_validate = 0; waitq = __ioc_page_wakeup (trav, - 0); + trav->op_errno); ioc_inode_unlock (ioc_inode); ioc_waitq_return (waitq); @@ -1049,7 +1050,8 @@ ioc_dispatch_requests (call_frame_t *frame, ioc_inode_t *ioc_inode, fd_t *fd, if (ret == -1) { ioc_inode_lock (ioc_inode); { - waitq = __ioc_page_wakeup (trav, 0); + waitq = __ioc_page_wakeup (trav, + trav->op_errno); } ioc_inode_unlock (ioc_inode); diff --git a/xlators/performance/io-cache/src/io-cache.h b/xlators/performance/io-cache/src/io-cache.h index bd60aa4f4..1ce4e9032 100644 --- a/xlators/performance/io-cache/src/io-cache.h +++ b/xlators/performance/io-cache/src/io-cache.h @@ -126,6 +126,7 @@ struct ioc_page { struct ioc_waitq *waitq; struct iobref *iobref; pthread_mutex_t page_lock; + int32_t op_errno; }; struct ioc_cache { diff --git a/xlators/performance/io-cache/src/ioc-inode.c b/xlators/performance/io-cache/src/ioc-inode.c index a99d5ea99..e7155b35d 100644 --- a/xlators/performance/io-cache/src/ioc-inode.c +++ b/xlators/performance/io-cache/src/ioc-inode.c @@ -124,7 +124,7 @@ ioc_inode_wakeup (call_frame_t *frame, ioc_inode_t *ioc_inode, { page_waitq = __ioc_page_wakeup (waiter_page, - 0); + waiter_page->op_errno); } ioc_inode_unlock (ioc_inode); if (page_waitq) diff --git a/xlators/performance/io-cache/src/page.c b/xlators/performance/io-cache/src/page.c index d3d74653a..a809a80fd 100644 --- a/xlators/performance/io-cache/src/page.c +++ b/xlators/performance/io-cache/src/page.c @@ -517,6 +517,7 @@ ioc_fault_cbk (call_frame_t *frame, void *cookie, xlator_t *this, * byte replies */ page_size = iov_length(vector, count); page->size = page_size; + page->op_errno = op_errno; iobref_page_size = iobref_size (page->iobref); -- cgit