Merge pull request #16 from mmichal10/cleaner-kick
Added possibility to disable cleaner thread.
This commit is contained in:
commit
80f8e617e3
@ -271,6 +271,11 @@ static int _cas_ctx_cleaner_init(ocf_cleaner_t c)
|
|||||||
return cas_create_cleaner_thread(c);
|
return cas_create_cleaner_thread(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _cas_ctx_cleaner_kick(ocf_cleaner_t c)
|
||||||
|
{
|
||||||
|
return cas_kick_cleaner_thread(c);
|
||||||
|
}
|
||||||
|
|
||||||
static void _cas_ctx_cleaner_stop(ocf_cleaner_t c)
|
static void _cas_ctx_cleaner_stop(ocf_cleaner_t c)
|
||||||
{
|
{
|
||||||
return cas_stop_cleaner_thread(c);
|
return cas_stop_cleaner_thread(c);
|
||||||
@ -364,6 +369,7 @@ static const struct ocf_ctx_config ctx_cfg = {
|
|||||||
|
|
||||||
.cleaner = {
|
.cleaner = {
|
||||||
.init = _cas_ctx_cleaner_init,
|
.init = _cas_ctx_cleaner_init,
|
||||||
|
.kick = _cas_ctx_cleaner_kick,
|
||||||
.stop = _cas_ctx_cleaner_stop,
|
.stop = _cas_ctx_cleaner_stop,
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -426,8 +432,6 @@ int cas_initialize_context(void)
|
|||||||
goto err_block_dev;
|
goto err_block_dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
ocf_mngt_core_pool_init(cas_ctx);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_block_dev:
|
err_block_dev:
|
||||||
@ -444,7 +448,6 @@ err_ctx:
|
|||||||
|
|
||||||
int cas_cleanup_context(void)
|
int cas_cleanup_context(void)
|
||||||
{
|
{
|
||||||
ocf_mngt_core_pool_deinit(cas_ctx);
|
|
||||||
block_dev_deinit();
|
block_dev_deinit();
|
||||||
atomic_dev_deinit();
|
atomic_dev_deinit();
|
||||||
cas_garbage_collector_deinit();
|
cas_garbage_collector_deinit();
|
||||||
|
@ -89,11 +89,27 @@ static int _cas_cleaner_thread(void *data)
|
|||||||
ocf_cleaner_set_cmpl(c, _cas_cleaner_complete);
|
ocf_cleaner_set_cmpl(c, _cas_cleaner_complete);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
if (atomic_read(&info->stop))
|
||||||
|
break;
|
||||||
|
|
||||||
|
atomic_set(&info->kicked, 0);
|
||||||
init_completion(&info->sync_compl);
|
init_completion(&info->sync_compl);
|
||||||
ocf_cleaner_run(c, cache_priv->io_queues[smp_processor_id()]);
|
ocf_cleaner_run(c, cache_priv->io_queues[smp_processor_id()]);
|
||||||
wait_for_completion(&info->sync_compl);
|
wait_for_completion(&info->sync_compl);
|
||||||
} while (0 == wait_event_interruptible_timeout(info->wq,
|
|
||||||
atomic_read(&info->stop), msecs_to_jiffies(ms)));
|
/*
|
||||||
|
* In case of nop cleaning policy we don't want to perform cleaning
|
||||||
|
* until cleaner_kick() is called.
|
||||||
|
*/
|
||||||
|
if (ms == OCF_CLEANER_DISABLE) {
|
||||||
|
wait_event_interruptible(info->wq, atomic_read(&info->kicked) ||
|
||||||
|
atomic_read(&info->stop));
|
||||||
|
} else {
|
||||||
|
wait_event_interruptible_timeout(info->wq,
|
||||||
|
atomic_read(&info->kicked) || atomic_read(&info->stop),
|
||||||
|
msecs_to_jiffies(ms));
|
||||||
|
}
|
||||||
|
} while (true);
|
||||||
|
|
||||||
complete_and_exit(&info->compl, 0);
|
complete_and_exit(&info->compl, 0);
|
||||||
|
|
||||||
@ -241,6 +257,13 @@ int cas_create_cleaner_thread(ocf_cleaner_t c)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cas_kick_cleaner_thread(ocf_cleaner_t c)
|
||||||
|
{
|
||||||
|
struct cas_thread_info *info = ocf_cleaner_get_priv(c);
|
||||||
|
atomic_set(&info->kicked, 1);
|
||||||
|
wake_up(&info->wq);
|
||||||
|
}
|
||||||
|
|
||||||
void cas_stop_cleaner_thread(ocf_cleaner_t c)
|
void cas_stop_cleaner_thread(ocf_cleaner_t c)
|
||||||
{
|
{
|
||||||
struct cas_thread_info *info = ocf_cleaner_get_priv(c);
|
struct cas_thread_info *info = ocf_cleaner_get_priv(c);
|
||||||
|
@ -17,6 +17,7 @@ void cas_kick_queue_thread(ocf_queue_t q);
|
|||||||
void cas_stop_queue_thread(ocf_queue_t q);
|
void cas_stop_queue_thread(ocf_queue_t q);
|
||||||
|
|
||||||
int cas_create_cleaner_thread(ocf_cleaner_t c);
|
int cas_create_cleaner_thread(ocf_cleaner_t c);
|
||||||
|
void cas_kick_cleaner_thread(ocf_cleaner_t c);
|
||||||
void cas_stop_cleaner_thread(ocf_cleaner_t c);
|
void cas_stop_cleaner_thread(ocf_cleaner_t c);
|
||||||
|
|
||||||
int cas_create_metadata_updater_thread(ocf_metadata_updater_t mu);
|
int cas_create_metadata_updater_thread(ocf_metadata_updater_t mu);
|
||||||
|
2
ocf
2
ocf
@ -1 +1 @@
|
|||||||
Subproject commit 8d09d7ae47b7ef5377d70cd22de488905c1e2877
|
Subproject commit 7165bc16c3f9c3c6efbd41138fbdf4cf8aaf6262
|
Loading…
Reference in New Issue
Block a user