diff --git a/lib/bdev/ocf/ctx.c b/lib/bdev/ocf/ctx.c index 6a1661e97..9a1f39837 100644 --- a/lib/bdev/ocf/ctx.c +++ b/lib/bdev/ocf/ctx.c @@ -427,18 +427,41 @@ vbdev_ocf_ctx_cleaner_stop(ocf_cleaner_t c) vbdev_ocf_queue_put(priv->queue); } -static int vbdev_ocf_volume_updater_init(ocf_metadata_updater_t mu) +static void +vbdev_ocf_md_kick(void *ctx) { - /* TODO [metadata]: implement with persistent metadata support */ + ocf_metadata_updater_t mu = ctx; + ocf_cache_t cache = ocf_metadata_updater_get_cache(mu); + + if (ocf_cache_is_running(cache)) { + ocf_metadata_updater_run(mu); + } +} + +static int +vbdev_ocf_volume_updater_init(ocf_metadata_updater_t mu) +{ + struct spdk_thread *md_thread = spdk_get_thread(); + + ocf_metadata_updater_set_priv(mu, md_thread); + return 0; } -static void vbdev_ocf_volume_updater_stop(ocf_metadata_updater_t mu) + +static void +vbdev_ocf_volume_updater_stop(ocf_metadata_updater_t mu) { - /* TODO [metadata]: implement with persistent metadata support */ + } -static void vbdev_ocf_volume_updater_kick(ocf_metadata_updater_t mu) + +static void +vbdev_ocf_volume_updater_kick(ocf_metadata_updater_t mu) { - /* TODO [metadata]: implement with persistent metadata support */ + struct spdk_thread *md_thread = ocf_metadata_updater_get_priv(mu); + + /* We need to send message to updater thread because + * kick can happen from any thread */ + spdk_thread_send_msg(md_thread, vbdev_ocf_md_kick, mu); } /* This function is main way by which OCF communicates with user