diff --git a/modules/cas_cache/cas_cache.h b/modules/cas_cache/cas_cache.h index d51d4eb..cb58c8e 100644 --- a/modules/cas_cache/cas_cache.h +++ b/modules/cas_cache/cas_cache.h @@ -64,26 +64,6 @@ struct cache_priv { extern ocf_ctx_t cas_ctx; -extern struct casdsk_functions_mapper casdisk_functions; - -struct casdsk_functions_mapper { - int (*casdsk_exp_obj_destroy)(struct casdsk_disk *dsk); - int (*casdsk_exp_obj_create)(struct casdsk_disk *dsk, const char *dev_name, - struct module *owner, struct casdsk_exp_obj_ops *ops); - void(*casdsk_exp_obj_free)(struct casdsk_disk *dsk); - struct request_queue *(*casdsk_disk_get_queue)(struct casdsk_disk *dsk); - struct block_device *(*casdsk_disk_get_blkdev)(struct casdsk_disk *dsk); - struct request_queue *(*casdsk_exp_obj_get_queue)(struct casdsk_disk *dsk); - uint32_t (*casdsk_get_version)(void); - void (*casdsk_disk_close)(struct casdsk_disk *dsk); - struct casdsk_disk *(*casdsk_disk_claim)(const char *path, void *private); - int (*casdsk_exp_obj_unlock)(struct casdsk_disk *dsk); - int (*casdsk_exp_obj_activate)(struct casdsk_disk *dsk); - int (*casdsk_exp_obj_lock)(struct casdsk_disk *dsk); - struct casdsk_disk *(*casdsk_disk_open)(const char *path, void *private); - struct gendisk *(*casdsk_exp_obj_get_gendisk)(struct casdsk_disk *dsk); -}; - static inline void cache_name_from_id(char *name, uint16_t id) { int result; diff --git a/modules/cas_cache/main.c b/modules/cas_cache/main.c index 229662f..bb0bfa5 100644 --- a/modules/cas_cache/main.c +++ b/modules/cas_cache/main.c @@ -40,79 +40,12 @@ MODULE_PARM_DESC(seq_cut_off_mb, /* globals */ ocf_ctx_t cas_ctx; -struct casdsk_functions_mapper casdisk_functions; - -#if defined(SYMBOL_LOOKUP_SUPPORTED) && defined(MODULE_MUTEX_SUPPORTED) - -struct exported_symbol { - char *name; - unsigned long addr; -}; - -int static cas_find_symbol(void *data, const char *namebuf, - struct module *module, unsigned long kallsyms_addresses) -{ - struct exported_symbol *sym = data; - - if (strcmp(namebuf, sym->name) == 0) - sym->addr = kallsyms_addresses; - return 0; -} - -#define cas_lookup_symbol(f) ({ \ - struct exported_symbol sym = {#f, 0}; \ - kallsyms_on_each_symbol(&cas_find_symbol, &sym); \ - casdisk_functions.f = (void *)sym.addr; \ - if (!casdisk_functions.f) \ - return -EINVAL; \ -}) - -#else - -#include "../cas_disk/cas_disk.h" -#include "../cas_disk/exp_obj.h" -#define cas_lookup_symbol(f) ({ \ - casdisk_functions.f = (void *)f; \ -}) - -#endif - -int static cas_casdisk_lookup_funtions(void) -{ -#ifdef MODULE_MUTEX_SUPPORTED - mutex_lock(&module_mutex); -#endif - cas_lookup_symbol(casdsk_exp_obj_destroy); - cas_lookup_symbol(casdsk_exp_obj_create); - cas_lookup_symbol(casdsk_exp_obj_free); - cas_lookup_symbol(casdsk_disk_get_queue); - cas_lookup_symbol(casdsk_disk_get_blkdev); - cas_lookup_symbol(casdsk_exp_obj_get_queue); - cas_lookup_symbol(casdsk_get_version); - cas_lookup_symbol(casdsk_disk_close); - cas_lookup_symbol(casdsk_disk_claim); - cas_lookup_symbol(casdsk_exp_obj_unlock); - cas_lookup_symbol(casdsk_exp_obj_activate); - cas_lookup_symbol(casdsk_exp_obj_lock); - cas_lookup_symbol(casdsk_disk_open); - cas_lookup_symbol(casdsk_exp_obj_get_gendisk); -#ifdef MODULE_MUTEX_SUPPORTED - mutex_unlock(&module_mutex); -#endif - return 0; -} static int __init cas_init_module(void) { int result = 0; - result = cas_casdisk_lookup_funtions(); - if (result) { - printk(KERN_ERR OCF_PREFIX_SHORT - "Could not find cas_disk functions.\n"); - return result; - } - if (casdisk_functions.casdsk_get_version() != CASDSK_IFACE_VERSION) { + if (casdsk_get_version() != CASDSK_IFACE_VERSION) { printk(KERN_ERR OCF_PREFIX_SHORT "Incompatible cas_disk module\n"); return -EINVAL; diff --git a/modules/cas_cache/volume/vol_block_dev_bottom.c b/modules/cas_cache/volume/vol_block_dev_bottom.c index d032c82..ead32dc 100644 --- a/modules/cas_cache/volume/vol_block_dev_bottom.c +++ b/modules/cas_cache/volume/vol_block_dev_bottom.c @@ -1,5 +1,5 @@ /* -* Copyright(c) 2012-2021 Intel Corporation +* Copyright(c) 2012-2022 Intel Corporation * SPDX-License-Identifier: BSD-3-Clause */ @@ -35,7 +35,7 @@ int block_dev_open_object(ocf_volume_t vol, void *volume_params) return 0; } - dsk = casdisk_functions.casdsk_disk_open(uuid->data, NULL); + dsk = casdsk_disk_open(uuid->data, NULL); if (IS_ERR_OR_NULL(dsk)) { int error = PTR_ERR(dsk) ?: -EINVAL; @@ -46,7 +46,7 @@ int block_dev_open_object(ocf_volume_t vol, void *volume_params) } bdobj->dsk = dsk; - bdobj->btm_bd = casdisk_functions.casdsk_disk_get_blkdev(dsk); + bdobj->btm_bd = casdsk_disk_get_blkdev(dsk); return 0; } @@ -58,7 +58,7 @@ void block_dev_close_object(ocf_volume_t vol) if (bdobj->opened_by_bdev) return; - casdisk_functions.casdsk_disk_close(bdobj->dsk); + casdsk_disk_close(bdobj->dsk); } unsigned int block_dev_get_max_io_size(ocf_volume_t vol) diff --git a/modules/cas_cache/volume/vol_block_dev_top.c b/modules/cas_cache/volume/vol_block_dev_top.c index a9bd862..8534652 100644 --- a/modules/cas_cache/volume/vol_block_dev_top.c +++ b/modules/cas_cache/volume/vol_block_dev_top.c @@ -55,9 +55,9 @@ void blkdev_set_exported_object_flush_fua(ocf_core_t core) bd_core_vol = bd_object(core_vol); bd_cache_vol = bd_object(cache_vol); - core_q = casdisk_functions.casdsk_disk_get_queue(bd_core_vol->dsk); - exp_q = casdisk_functions.casdsk_exp_obj_get_queue(bd_core_vol->dsk); - cache_q = casdisk_functions.casdsk_disk_get_queue(bd_cache_vol->dsk); + core_q = casdsk_disk_get_queue(bd_core_vol->dsk); + exp_q = casdsk_exp_obj_get_queue(bd_core_vol->dsk); + cache_q = casdsk_disk_get_queue(bd_cache_vol->dsk); flush = (CAS_CHECK_QUEUE_FLUSH(core_q) || CAS_CHECK_QUEUE_FLUSH(cache_q)); fua = (CAS_CHECK_QUEUE_FUA(core_q) || CAS_CHECK_QUEUE_FUA(cache_q)); @@ -118,19 +118,19 @@ static int blkdev_core_set_geometry(struct casdsk_disk *dsk, void *private) bd_cache_vol = bd_object(cache_vol); path = ocf_volume_get_uuid(core_vol)->data; - core_bd = casdisk_functions.casdsk_disk_get_blkdev(dsk); + core_bd = casdsk_disk_get_blkdev(dsk); BUG_ON(!core_bd); - cache_bd = casdisk_functions.casdsk_disk_get_blkdev(bd_cache_vol->dsk); + cache_bd = casdsk_disk_get_blkdev(bd_cache_vol->dsk); BUG_ON(!cache_bd); core_q = cas_bdev_whole(core_bd)->bd_disk->queue; cache_q = cache_bd->bd_disk->queue; - exp_q = casdisk_functions.casdsk_exp_obj_get_queue(dsk); + exp_q = casdsk_exp_obj_get_queue(dsk); sectors = ocf_volume_get_length(core_vol) >> SECTOR_SHIFT; - set_capacity(casdisk_functions.casdsk_exp_obj_get_gendisk(dsk), sectors); + set_capacity(casdsk_exp_obj_get_gendisk(dsk), sectors); cas_copy_queue_limits(exp_q, cache_q, core_q); @@ -473,15 +473,15 @@ static int blkdev_cache_set_geometry(struct casdsk_disk *dsk, void *private) bvol = bd_object(volume); - bd = casdisk_functions.casdsk_disk_get_blkdev(bvol->dsk); + bd = casdsk_disk_get_blkdev(bvol->dsk); BUG_ON(!bd); cache_q = bd->bd_disk->queue; - exp_q = casdisk_functions.casdsk_exp_obj_get_queue(dsk); + exp_q = casdsk_exp_obj_get_queue(dsk); sectors = ocf_volume_get_length(volume) >> SECTOR_SHIFT; - set_capacity(casdisk_functions.casdsk_exp_obj_get_gendisk(dsk), sectors); + set_capacity(casdsk_exp_obj_get_gendisk(dsk), sectors); cas_copy_queue_limits(exp_q, cache_q, cache_q); @@ -538,7 +538,7 @@ static int kcas_volume_create_exported_object(ocf_volume_t volume, struct casdsk_disk *dsk; int result; - dsk = casdisk_functions.casdsk_disk_claim(uuid->data, priv); + dsk = casdsk_disk_claim(uuid->data, priv); if (dsk != bvol->dsk) { result = -KCAS_ERR_SYSTEM; goto end; @@ -552,7 +552,7 @@ static int kcas_volume_create_exported_object(ocf_volume_t volume, goto end; } - result = casdisk_functions.casdsk_exp_obj_create(dsk, name, + result = casdsk_exp_obj_create(dsk, name, THIS_MODULE, ops); if (result) { destroy_workqueue(bvol->expobj_wq); @@ -582,13 +582,13 @@ static int kcas_volume_destroy_exported_object(ocf_volume_t volume) if (!bvol->expobj_valid) return 0; - result = casdisk_functions.casdsk_exp_obj_lock(bvol->dsk); + result = casdsk_exp_obj_lock(bvol->dsk); if (result == -EBUSY) return -KCAS_ERR_DEV_PENDING; else if (result) return result; - result = casdisk_functions.casdsk_exp_obj_destroy(bvol->dsk); + result = casdsk_exp_obj_destroy(bvol->dsk); if (result) goto out; @@ -596,7 +596,7 @@ static int kcas_volume_destroy_exported_object(ocf_volume_t volume) destroy_workqueue(bvol->expobj_wq); out: - casdisk_functions.casdsk_exp_obj_unlock(bvol->dsk); + casdsk_exp_obj_unlock(bvol->dsk); return result; } @@ -610,7 +610,7 @@ static int kcas_volume_activate_exported_object(ocf_volume_t volume, struct bd_object *bvol = bd_object(volume); int result; - result = casdisk_functions.casdsk_exp_obj_activate(bvol->dsk); + result = casdsk_exp_obj_activate(bvol->dsk); if (result == -EEXIST) result = -KCAS_ERR_FILE_EXISTS; @@ -705,15 +705,15 @@ static int kcas_core_lock_exported_object(ocf_core_t core, void *cntx) if (!bvol->expobj_valid) return 0; - result = casdisk_functions.casdsk_exp_obj_lock(bvol->dsk); + result = casdsk_exp_obj_lock(bvol->dsk); if (-EBUSY == result) { printk(KERN_WARNING "Stopping %s failed - device in use\n", - casdisk_functions.casdsk_exp_obj_get_gendisk(bvol->dsk)->disk_name); + casdsk_exp_obj_get_gendisk(bvol->dsk)->disk_name); return -KCAS_ERR_DEV_PENDING; } else if (result) { printk(KERN_WARNING "Stopping %s failed - device unavailable\n", - casdisk_functions.casdsk_exp_obj_get_gendisk(bvol->dsk)->disk_name); + casdsk_exp_obj_get_gendisk(bvol->dsk)->disk_name); return -OCF_ERR_CORE_NOT_AVAIL; } @@ -728,7 +728,7 @@ static int kcas_core_unlock_exported_object(ocf_core_t core, void *cntx) struct bd_object *bvol = bd_object(ocf_core_get_volume(core)); if (bvol->expobj_locked) { - casdisk_functions.casdsk_exp_obj_unlock(bvol->dsk); + casdsk_exp_obj_unlock(bvol->dsk); bvol->expobj_locked = false; } @@ -745,9 +745,9 @@ static int kcas_core_stop_exported_object(ocf_core_t core, void *cntx) BUG_ON(!bvol->expobj_locked); printk(KERN_INFO "Stopping device %s\n", - casdisk_functions.casdsk_exp_obj_get_gendisk(bvol->dsk)->disk_name); + casdsk_exp_obj_get_gendisk(bvol->dsk)->disk_name); - ret = casdisk_functions.casdsk_exp_obj_destroy(bvol->dsk); + ret = casdsk_exp_obj_destroy(bvol->dsk); if (!ret) { bvol->expobj_valid = false; destroy_workqueue(bvol->expobj_wq); @@ -755,7 +755,7 @@ static int kcas_core_stop_exported_object(ocf_core_t core, void *cntx) } if (bvol->expobj_locked) { - casdisk_functions.casdsk_exp_obj_unlock(bvol->dsk); + casdsk_exp_obj_unlock(bvol->dsk); bvol->expobj_locked = false; } @@ -766,7 +766,7 @@ static int kcas_core_free_exported_object(ocf_core_t core, void *cntx) { struct bd_object *bvol = bd_object(ocf_core_get_volume(core)); - casdisk_functions.casdsk_exp_obj_free(bvol->dsk); + casdsk_exp_obj_free(bvol->dsk); return 0; }