Merge pull request #826 from mmichal10/errors-in-engines

Errors in engines
This commit is contained in:
Robert Baldyga 2024-09-18 15:26:21 +02:00 committed by GitHub
commit 5531b9cc79
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 23 additions and 25 deletions

View File

@ -21,10 +21,8 @@ static void _ocf_d2c_completion(struct ocf_request *req, int error)
OCF_DEBUG_RQ(req, "Completion");
if (req->error) {
req->info.core_error = 1;
if (req->error)
ocf_core_stats_core_error_update(req->core, req->rw);
}
/* Complete request */
req->complete(req, req->error);

View File

@ -28,10 +28,8 @@ static void _ocf_read_pt_complete(struct ocf_request *req, int error)
OCF_DEBUG_RQ(req, "Completion");
if (req->error) {
req->info.core_error = 1;
if (req->error)
ocf_core_stats_core_error_update(req->core, OCF_READ);
}
/* Complete request */
req->complete(req, req->error);

View File

@ -78,7 +78,6 @@ static void _ocf_read_generic_miss_complete(struct ocf_request *req, int error)
*/
req->complete(req, req->error);
req->info.core_error = 1;
ocf_core_stats_core_error_update(req->core, OCF_READ);
ctx_data_free(cache->owner, req->cp_data);

View File

@ -107,7 +107,6 @@ static void _ocf_write_wi_core_complete(struct ocf_request *req, int error)
{
if (error) {
req->error = error;
req->info.core_error = 1;
ocf_core_stats_core_error_update(req->core, OCF_WRITE);
}

View File

@ -156,7 +156,6 @@ static void _ocf_read_wo_core_complete(struct ocf_request *req, int error)
{
if (error) {
req->error |= error;
req->info.core_error = 1;
ocf_core_stats_core_error_update(req->core, OCF_READ);
}

View File

@ -68,7 +68,7 @@ static void _ocf_write_wt_do_flush_metadata_compl(struct ocf_request *req,
ocf_req_unlock_wr(ocf_cache_line_concurrency(req->cache), req);
req->complete(req, req->info.core_error ? req->error : 0);
req->complete(req, error);
ocf_req_put(req);
}
@ -100,14 +100,9 @@ static void _ocf_write_wt_req_complete(struct ocf_request *req)
OCF_DEBUG_RQ(req, "Completion");
if (req->error) {
/* An error occured */
/* Complete request */
req->complete(req, req->info.core_error ? req->error : 0);
if (req->info.cache_error || req->info.core_error) {
req->complete(req, req->error);
ocf_engine_invalidate(req);
return;
}
@ -117,9 +112,7 @@ static void _ocf_write_wt_req_complete(struct ocf_request *req)
OCF_QUEUE_ALLOW_SYNC | OCF_QUEUE_PRIO_HIGH);
} else {
ocf_req_unlock_wr(ocf_cache_line_concurrency(req->cache), req);
req->complete(req, req->info.core_error ? req->error : 0);
req->complete(req, 0);
ocf_req_put(req);
}
}
@ -127,11 +120,14 @@ static void _ocf_write_wt_req_complete(struct ocf_request *req)
static void _ocf_write_wt_cache_complete(struct ocf_request *req, int error)
{
if (error) {
req->error = req->error ?: error;
/* Cache error code is not propagated further to the user here
* because data could be successfully written to the core device
* despite the cache IO error.
* Error flag is set though to indicate that the error occurred
* and to invalidate the request in completion. */
req->info.cache_error = 1;
ocf_core_stats_cache_error_update(req->core, OCF_WRITE);
if (req->error)
inc_fallback_pt_error_counter(req->cache);
inc_fallback_pt_error_counter(req->cache);
}
_ocf_write_wt_req_complete(req);

View File

@ -55,8 +55,11 @@ struct ocf_req_info {
uint32_t cleaning_required : 1;
/*!< Eviction failed, need to request cleaning */
uint32_t cache_error : 1;
/*!< Error occurred during I/O on cache device */
uint32_t core_error : 1;
/*!< Error occured during I/O on core device */
/*!< Error occurred during I/O on core device */
uint32_t cleaner_cache_line_lock : 1;
/*!< Cleaner flag - acquire cache line lock */
@ -192,6 +195,12 @@ struct ocf_request {
int error;
/*!< This filed indicates an error for OCF request */
int cache_error;
/*!< Indicator of forward IO cache device error */
int core_error;
/*!< Indicator of forward IO core device error */
ocf_part_id_t part_id;
/*!< Targeted partition of requests */