Avoid stack overflow when pending read misses list is blocked
Signed-off-by: Robert Baldyga <robert.baldyga@intel.com>
This commit is contained in:
		| @@ -120,7 +120,8 @@ int ocf_read_pt(struct ocf_request *req) | |||||||
| 	/* Traverse request to check if there are mapped cache lines */ | 	/* Traverse request to check if there are mapped cache lines */ | ||||||
| 	ocf_engine_traverse(req); | 	ocf_engine_traverse(req); | ||||||
|  |  | ||||||
| 	if (req->seq_cutoff && ocf_engine_is_dirty_all(req)) { | 	if (req->seq_cutoff && ocf_engine_is_dirty_all(req) && | ||||||
|  | 			!req->bf_blocked) { | ||||||
| 		use_cache = true; | 		use_cache = true; | ||||||
| 	} else { | 	} else { | ||||||
| 		if (ocf_engine_mapped_count(req)) { | 		if (ocf_engine_mapped_count(req)) { | ||||||
|   | |||||||
| @@ -224,6 +224,7 @@ int ocf_read_generic(struct ocf_request *req) | |||||||
|  |  | ||||||
| 	if (env_atomic_read(&cache->pending_read_misses_list_blocked)) { | 	if (env_atomic_read(&cache->pending_read_misses_list_blocked)) { | ||||||
| 		/* There are conditions to bypass IO */ | 		/* There are conditions to bypass IO */ | ||||||
|  | 		req->bf_blocked = true; | ||||||
| 		ocf_get_io_if(ocf_cache_mode_pt)->read(req); | 		ocf_get_io_if(ocf_cache_mode_pt)->read(req); | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -185,6 +185,9 @@ struct ocf_request { | |||||||
| 	uint8_t seq_cutoff : 1; | 	uint8_t seq_cutoff : 1; | ||||||
| 	/*!< Sequential cut off set for this request */ | 	/*!< Sequential cut off set for this request */ | ||||||
|  |  | ||||||
|  | 	uint8_t bf_blocked : 1; | ||||||
|  | 	/*!< Backfill pending read misses list blocked */ | ||||||
|  |  | ||||||
| 	uint8_t wi_second_pass : 1; | 	uint8_t wi_second_pass : 1; | ||||||
| 	/*!< Set after first pass of WI write is completed */ | 	/*!< Set after first pass of WI write is completed */ | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Robert Baldyga
					Robert Baldyga