From 0d737c2563e379ab0720e5006373f6218a6219f8 Mon Sep 17 00:00:00 2001 From: Krzysztof Majzerowicz-Jaszcz Date: Tue, 23 Nov 2021 15:39:57 +0100 Subject: [PATCH] Fix for issues #988 and #997 This patch fixes the issue 988 (and 997) causing a kernel stack overflow. Signed-off-by: Krzysztof Majzerowicz-Jaszcz --- src/engine/engine_pt.c | 2 +- src/engine/engine_rd.c | 3 ++- src/ocf_request.h | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/engine/engine_pt.c b/src/engine/engine_pt.c index 422010a0..c8a86ee9 100644 --- a/src/engine/engine_pt.c +++ b/src/engine/engine_pt.c @@ -121,7 +121,7 @@ int ocf_read_pt(struct ocf_request *req) ocf_engine_traverse(req); if (req->seq_cutoff && ocf_engine_is_dirty_all(req) && - !req->bf_blocked) { + !req->force_pt) { use_cache = true; } else { if (ocf_engine_mapped_count(req)) { diff --git a/src/engine/engine_rd.c b/src/engine/engine_rd.c index 3e04b1a3..3623e990 100644 --- a/src/engine/engine_rd.c +++ b/src/engine/engine_rd.c @@ -224,7 +224,7 @@ int ocf_read_generic(struct ocf_request *req) if (env_atomic_read(&cache->pending_read_misses_list_blocked)) { /* There are conditions to bypass IO */ - req->bf_blocked = true; + req->force_pt = true; ocf_get_io_if(ocf_cache_mode_pt)->read(req); return 0; } @@ -254,6 +254,7 @@ int ocf_read_generic(struct ocf_request *req) } } else { ocf_req_clear(req); + req->force_pt = true; ocf_get_io_if(ocf_cache_mode_pt)->read(req); } diff --git a/src/ocf_request.h b/src/ocf_request.h index a624487f..e2126918 100644 --- a/src/ocf_request.h +++ b/src/ocf_request.h @@ -185,8 +185,8 @@ struct ocf_request { uint8_t seq_cutoff : 1; /*!< Sequential cut off set for this request */ - uint8_t bf_blocked : 1; - /*!< Backfill pending read misses list blocked */ + uint8_t force_pt : 1; + /*!< Force pass-thru cache mode */ uint8_t wi_second_pass : 1; /*!< Set after first pass of WI write is completed */