From 7674584fa53944a4e982e217798f31a3d1ef313b Mon Sep 17 00:00:00 2001 From: Poornima G Date: Fri, 26 May 2017 15:45:57 +0530 Subject: nl-cache: Fix a possible crash and stale cache Issue1: Consider the followinf sequence of operations: ... nlc_ctx = nlc_ctx_get (inode i1) ....... -> nlc_clear_cache (i1) gets called as a part of nlc_invalidate or any other callers ... GF_FREE (ii nlc_ctx) LOCK (nlc_ctx->lock); -> This will result in crash as the ctx got freed in nlc_clear_cache. Issue2: lookup on dir1/file1 result in ENOENT add cache to dir1 at time T1 .... CHILD_DOWN at T2 lookup on dir1/file2 result in ENOENT add cache to dir1, but the cache time is still T1 lookup on dir1/file2 - should have been served from cache but the cache time is T1 < T2, hence cache is considered as invalid. So, after CHILD_DOWN the right thing would be to clear the cache and restart caching on that inode. Solution: Do not free nlc_ctx in nlc_clear_cache, but only in inode_forget() The fix for both issue1 and 2 is interleaved hence sending it as single patch. Change-Id: I83d8ed36c049a93567c6d7e63d045dc14ccbb397 BUG: 1458539 Signed-off-by: Poornima G Reviewed-on: https://review.gluster.org/17453 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System Reviewed-by: Pranith Kumar Karampuri CentOS-regression: Gluster Build System --- xlators/performance/nl-cache/src/nl-cache.h | 1 - 1 file changed, 1 deletion(-) (limited to 'xlators/performance/nl-cache/src/nl-cache.h') diff --git a/xlators/performance/nl-cache/src/nl-cache.h b/xlators/performance/nl-cache/src/nl-cache.h index 10ec022d05c..3bd7c83237a 100644 --- a/xlators/performance/nl-cache/src/nl-cache.h +++ b/xlators/performance/nl-cache/src/nl-cache.h @@ -44,7 +44,6 @@ enum nlc_cache_clear_reason { NLC_NONE = 0, - NLC_TIMER_EXPIRED, NLC_LRU_PRUNE, }; -- cgit