Move flush containers sort & submit outside metadata lock

Moving _ocf_mngt_flush_containers outside global metadata
critical section. All this function does is sort core lines
and add queue request.

This fixes stalls reported by Linux scheduler due to
IO threads waiting on global metadata RW semaprhore for
several minutes.

Signed-off-by: Adam Rutkowski <adam.j.rutkowski@intel.com>
This commit is contained in:
Adam Rutkowski 2020-03-19 19:10:09 -04:00
parent 22bdb8b004
commit 61983c946c

View File

@ -517,9 +517,9 @@ static void _ocf_mngt_flush_core(
fc->core_id = core_id; fc->core_id = core_id;
fc->iter = 0; fc->iter = 0;
_ocf_mngt_flush_containers(context, fc, 1, complete);
ocf_metadata_end_exclusive_access(&cache->metadata.lock); ocf_metadata_end_exclusive_access(&cache->metadata.lock);
_ocf_mngt_flush_containers(context, fc, 1, complete);
} }
static void _ocf_mngt_flush_all_cores( static void _ocf_mngt_flush_all_cores(
@ -550,9 +550,9 @@ static void _ocf_mngt_flush_all_cores(
return; return;
} }
_ocf_mngt_flush_containers(context, fctbl, fcnum, complete);
ocf_metadata_end_exclusive_access(&cache->metadata.lock); ocf_metadata_end_exclusive_access(&cache->metadata.lock);
_ocf_mngt_flush_containers(context, fctbl, fcnum, complete);
} }
static void _ocf_mngt_flush_all_cores_complete( static void _ocf_mngt_flush_all_cores_complete(