From 6b2ad4a77fe8022b66cde091c3ebfb828dcf93da Mon Sep 17 00:00:00 2001 From: Raghavendra G Date: Tue, 1 Dec 2009 18:05:15 +0000 Subject: stat-prefetch: fix unsafe reference to @local in sp_lookup_cbk. Signed-off-by: Raghavendra G Signed-off-by: Anand V. Avati BUG: 242 (If any of the writes fail, write-behind should not wait till the fd is closed for reporting errors) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=242 --- xlators/performance/stat-prefetch/src/stat-prefetch.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'xlators') diff --git a/xlators/performance/stat-prefetch/src/stat-prefetch.c b/xlators/performance/stat-prefetch/src/stat-prefetch.c index 9d799ef6a..6c81e8a3c 100644 --- a/xlators/performance/stat-prefetch/src/stat-prefetch.c +++ b/xlators/performance/stat-prefetch/src/stat-prefetch.c @@ -660,6 +660,7 @@ sp_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this, call_stub_t *stub = NULL, *tmp = NULL; sp_local_t *local = NULL; sp_cache_t *cache = NULL; + char need_unwind = 0; INIT_LIST_HEAD (&waiting_ops); @@ -678,9 +679,13 @@ sp_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this, } } + if (local && local->is_lookup) { + need_unwind = 1; + } + ret = inode_ctx_get (inode, this, &value); if (ret == 0) { - inode_ctx = (sp_inode_ctx_t *)(long)value; + inode_ctx = (sp_inode_ctx_t *)(long)value; if (inode_ctx == NULL) { op_ret = -1; op_errno = EINVAL; @@ -705,7 +710,7 @@ sp_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this, } out: - if ((local != NULL) && (local->is_lookup)) { + if (need_unwind) { SP_STACK_UNWIND (frame, op_ret, op_errno, inode, buf, dict); } -- cgit