Multiple LRU lists

Signed-off-by: Adam Rutkowski <adam.j.rutkowski@intel.com>
This commit is contained in:
Adam Rutkowski
2020-05-21 12:36:16 +02:00
parent ac83c4ecd6
commit 41a767de97
9 changed files with 276 additions and 111 deletions

View File

@@ -9,19 +9,23 @@
int ocf_metadata_concurrency_init(struct ocf_metadata_lock *metadata_lock)
{
int err = 0;
unsigned i;
unsigned evp_iter;
unsigned part_iter;
err = env_spinlock_init(&metadata_lock->eviction);
if (err)
return err;
for (evp_iter = 0; evp_iter < OCF_NUM_EVICTION_LISTS; evp_iter++) {
err = env_spinlock_init(&metadata_lock->eviction[evp_iter]);
if (err)
goto eviction_err;
}
env_rwlock_init(&metadata_lock->status);
err = env_rwsem_init(&metadata_lock->global);
if (err)
goto rwsem_err;
for (i = 0; i < OCF_IO_CLASS_MAX; i++) {
err = env_spinlock_init(&metadata_lock->partition[i]);
for (part_iter = 0; part_iter < OCF_IO_CLASS_MAX; part_iter++) {
err = env_spinlock_init(&metadata_lock->partition[part_iter]);
if (err)
goto spinlocks_err;
}
@@ -29,11 +33,15 @@ int ocf_metadata_concurrency_init(struct ocf_metadata_lock *metadata_lock)
return err;
spinlocks_err:
while (i--)
env_spinlock_destroy(&metadata_lock->partition[i]);
while (part_iter--)
env_spinlock_destroy(&metadata_lock->partition[part_iter]);
rwsem_err:
env_rwlock_destroy(&metadata_lock->status);
env_spinlock_destroy(&metadata_lock->eviction);
eviction_err:
while (evp_iter--)
env_spinlock_destroy(&metadata_lock->eviction[evp_iter]);
return err;
}
@@ -41,11 +49,12 @@ void ocf_metadata_concurrency_deinit(struct ocf_metadata_lock *metadata_lock)
{
unsigned i;
for (i = 0; i < OCF_IO_CLASS_MAX; i++) {
for (i = 0; i < OCF_IO_CLASS_MAX; i++)
env_spinlock_destroy(&metadata_lock->partition[i]);
}
env_spinlock_destroy(&metadata_lock->eviction);
for (i = 0; i < OCF_NUM_EVICTION_LISTS; i++)
env_spinlock_destroy(&metadata_lock->eviction[i]);
env_rwlock_destroy(&metadata_lock->status);
env_rwsem_destroy(&metadata_lock->global);
}