From fca402b0f292903dcd2a24b630c88ab0b1033feb Mon Sep 17 00:00:00 2001 From: Piotr Pelplinski Date: Wed, 3 Apr 2019 10:40:33 +0200 Subject: [PATCH] ocf: add metadata callbacks This patch adds callback for serializing spdk metadata stored in ocf cache devices. Signed-off-by: Piotr Pelplinski Change-Id: I856bac3d63c7172dd6c67361794159fa38812a78 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/449300 Reviewed-by: Darek Stojaczyk Reviewed-by: Tomasz Zawadzki Reviewed-by: Jim Harris Tested-by: SPDK CI Jenkins --- lib/bdev/ocf/ctx.c | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) 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