From 2a18e2426419cbab2f98368b3306fd37958394d2 Mon Sep 17 00:00:00 2001 From: Anand Avati Date: Mon, 25 Nov 2013 03:16:49 -0800 Subject: read-ahead: handle iobref_merge() error gracefully .. by UNWINDing ENOMEM rather than leaving pointers in vector which points to unref'ed (or even worse, re-used) iobufs. Change-Id: I849d8cbe5fc02ee992d4e28b7212c49aad4925c7 BUG: 1034398 Signed-off-by: Anand Avati Reviewed-on: http://review.gluster.org/6350 Tested-by: Gluster Build System Reviewed-by: Amar Tumballi --- xlators/performance/read-ahead/src/page.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'xlators/performance') diff --git a/xlators/performance/read-ahead/src/page.c b/xlators/performance/read-ahead/src/page.c index e79e7ae78..6e5b52c5e 100644 --- a/xlators/performance/read-ahead/src/page.c +++ b/xlators/performance/read-ahead/src/page.c @@ -421,7 +421,12 @@ ra_frame_unwind (call_frame_t *frame) fill->count * sizeof (*vector)); copied += (fill->count * sizeof (*vector)); - iobref_merge (iobref, fill->iobref); + if (iobref_merge (iobref, fill->iobref)) { + local->op_ret = -1; + local->op_errno = ENOMEM; + iobref_unref (iobref); + iobref = NULL; + } } fill->next->prev = fill->prev; -- cgit