From 6cd8070af4c83cca9f3f7685a2a04bcb95059dd1 Mon Sep 17 00:00:00 2001 From: Raghavendra G Date: Mon, 31 Aug 2009 22:53:33 +0000 Subject: performance/quick-read: if open fails during cache validation, don't continue validation process. Signed-off-by: Anand V. Avati BUG: 232 (Quick-read: if open fails during cache validation, don't continue validation process.) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=232 --- xlators/performance/quick-read/src/quick-read.c | 24 ++++++++++++++++++++++-- xlators/performance/quick-read/src/quick-read.h | 2 ++ 2 files changed, 24 insertions(+), 2 deletions(-) (limited to 'xlators/performance') diff --git a/xlators/performance/quick-read/src/quick-read.c b/xlators/performance/quick-read/src/quick-read.c index c63c920a014..9e09422bb79 100644 --- a/xlators/performance/quick-read/src/quick-read.c +++ b/xlators/performance/quick-read/src/quick-read.c @@ -300,6 +300,8 @@ qr_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int32_t op_ret, op_ret = -1; op_errno = EINVAL; } else { + local->op_ret = op_ret; + local->op_errno = op_errno; is_open = local->is_open; } @@ -557,8 +559,26 @@ unwind: int32_t qr_validate_cache_helper (call_frame_t *frame, xlator_t *this, fd_t *fd) { - STACK_WIND (frame, qr_validate_cache_cbk, FIRST_CHILD (this), - FIRST_CHILD (this)->fops->fstat, fd); + qr_local_t *local = NULL; + int32_t op_ret = -1, op_errno = -1; + + local = frame->local; + if (local == NULL) { + op_ret = -1; + op_errno = EINVAL; + } else { + op_ret = local->op_ret; + op_errno = local->op_errno; + } + + if (op_ret == -1) { + qr_validate_cache_cbk (frame, NULL, this, op_ret, op_errno, + NULL); + } else { + STACK_WIND (frame, qr_validate_cache_cbk, FIRST_CHILD (this), + FIRST_CHILD (this)->fops->fstat, fd); + } + return 0; } diff --git a/xlators/performance/quick-read/src/quick-read.h b/xlators/performance/quick-read/src/quick-read.h index 32bebac4866..c49ab167b92 100644 --- a/xlators/performance/quick-read/src/quick-read.h +++ b/xlators/performance/quick-read/src/quick-read.h @@ -57,6 +57,8 @@ struct qr_local { char is_open; fd_t *fd; int open_flags; + int32_t op_ret; + int32_t op_errno; call_stub_t *stub; }; typedef struct qr_local qr_local_t; -- cgit