From 13b4437770fadf3089e37bdedd0fe689e79c87f9 Mon Sep 17 00:00:00 2001 From: Raghavendra G Date: Thu, 24 Sep 2009 00:57:39 +0000 Subject: performance/write-behind: Add a NULL check for request->stub before checking request->stub->fop. - for non-write wind requests, the request structure outlives the stub. The call stub is destroyed when stack is wound but request is destroyed only when the reply has come. (for writes, both stub and request are destroyed when refcount becomes 0, which happens only when the write operation is stack unwound and a reply for the write operation has come from underlying translators, for non-write unwind requests the request is first destroyed before resuming the stub). Signed-off-by: Anand V. Avati BUG: 280 (simple stripe, with write-behind set up, when dbench is run client crashes.) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=280 --- xlators/performance/write-behind/src/write-behind.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'xlators/performance/write-behind') diff --git a/xlators/performance/write-behind/src/write-behind.c b/xlators/performance/write-behind/src/write-behind.c index 693457bfd..7ea46dae8 100644 --- a/xlators/performance/write-behind/src/write-behind.c +++ b/xlators/performance/write-behind/src/write-behind.c @@ -1351,7 +1351,8 @@ __wb_collapse_write_bufs (list_head_t *requests, size_t page_size) wb_request_t *request = NULL, *tmp = NULL; list_for_each_entry_safe (request, tmp, requests, list) { - if ((request->stub->fop != GF_FOP_WRITE) + if ((request->stub == NULL) + || (request->stub->fop != GF_FOP_WRITE) || (request->flags.write_request.stack_wound)) { space_left = 0; ptr = NULL; -- cgit