Multiple LRU lists
Signed-off-by: Adam Rutkowski <adam.j.rutkowski@intel.com>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user