Remove cas_disk symbol lookup
Signed-off-by: Robert Baldyga <robert.baldyga@intel.com>
This commit is contained in:
parent
16576c7a95
commit
8eb512a743
@ -64,26 +64,6 @@ struct cache_priv {
|
|||||||
|
|
||||||
extern ocf_ctx_t cas_ctx;
|
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)
|
static inline void cache_name_from_id(char *name, uint16_t id)
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
|
@ -40,79 +40,12 @@ MODULE_PARM_DESC(seq_cut_off_mb,
|
|||||||
|
|
||||||
/* globals */
|
/* globals */
|
||||||
ocf_ctx_t cas_ctx;
|
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)
|
static int __init cas_init_module(void)
|
||||||
{
|
{
|
||||||
int result = 0;
|
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
|
printk(KERN_ERR OCF_PREFIX_SHORT
|
||||||
"Incompatible cas_disk module\n");
|
"Incompatible cas_disk module\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright(c) 2012-2021 Intel Corporation
|
* Copyright(c) 2012-2022 Intel Corporation
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ int block_dev_open_object(ocf_volume_t vol, void *volume_params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dsk = casdisk_functions.casdsk_disk_open(uuid->data, NULL);
|
dsk = casdsk_disk_open(uuid->data, NULL);
|
||||||
if (IS_ERR_OR_NULL(dsk)) {
|
if (IS_ERR_OR_NULL(dsk)) {
|
||||||
int error = PTR_ERR(dsk) ?: -EINVAL;
|
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->dsk = dsk;
|
||||||
bdobj->btm_bd = casdisk_functions.casdsk_disk_get_blkdev(dsk);
|
bdobj->btm_bd = casdsk_disk_get_blkdev(dsk);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -58,7 +58,7 @@ void block_dev_close_object(ocf_volume_t vol)
|
|||||||
if (bdobj->opened_by_bdev)
|
if (bdobj->opened_by_bdev)
|
||||||
return;
|
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)
|
unsigned int block_dev_get_max_io_size(ocf_volume_t vol)
|
||||||
|
@ -55,9 +55,9 @@ void blkdev_set_exported_object_flush_fua(ocf_core_t core)
|
|||||||
bd_core_vol = bd_object(core_vol);
|
bd_core_vol = bd_object(core_vol);
|
||||||
bd_cache_vol = bd_object(cache_vol);
|
bd_cache_vol = bd_object(cache_vol);
|
||||||
|
|
||||||
core_q = casdisk_functions.casdsk_disk_get_queue(bd_core_vol->dsk);
|
core_q = casdsk_disk_get_queue(bd_core_vol->dsk);
|
||||||
exp_q = casdisk_functions.casdsk_exp_obj_get_queue(bd_core_vol->dsk);
|
exp_q = casdsk_exp_obj_get_queue(bd_core_vol->dsk);
|
||||||
cache_q = casdisk_functions.casdsk_disk_get_queue(bd_cache_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));
|
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));
|
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);
|
bd_cache_vol = bd_object(cache_vol);
|
||||||
path = ocf_volume_get_uuid(core_vol)->data;
|
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);
|
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);
|
BUG_ON(!cache_bd);
|
||||||
|
|
||||||
core_q = cas_bdev_whole(core_bd)->bd_disk->queue;
|
core_q = cas_bdev_whole(core_bd)->bd_disk->queue;
|
||||||
cache_q = cache_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;
|
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);
|
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);
|
bvol = bd_object(volume);
|
||||||
|
|
||||||
bd = casdisk_functions.casdsk_disk_get_blkdev(bvol->dsk);
|
bd = casdsk_disk_get_blkdev(bvol->dsk);
|
||||||
BUG_ON(!bd);
|
BUG_ON(!bd);
|
||||||
|
|
||||||
cache_q = bd->bd_disk->queue;
|
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;
|
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);
|
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;
|
struct casdsk_disk *dsk;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
dsk = casdisk_functions.casdsk_disk_claim(uuid->data, priv);
|
dsk = casdsk_disk_claim(uuid->data, priv);
|
||||||
if (dsk != bvol->dsk) {
|
if (dsk != bvol->dsk) {
|
||||||
result = -KCAS_ERR_SYSTEM;
|
result = -KCAS_ERR_SYSTEM;
|
||||||
goto end;
|
goto end;
|
||||||
@ -552,7 +552,7 @@ static int kcas_volume_create_exported_object(ocf_volume_t volume,
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = casdisk_functions.casdsk_exp_obj_create(dsk, name,
|
result = casdsk_exp_obj_create(dsk, name,
|
||||||
THIS_MODULE, ops);
|
THIS_MODULE, ops);
|
||||||
if (result) {
|
if (result) {
|
||||||
destroy_workqueue(bvol->expobj_wq);
|
destroy_workqueue(bvol->expobj_wq);
|
||||||
@ -582,13 +582,13 @@ static int kcas_volume_destroy_exported_object(ocf_volume_t volume)
|
|||||||
if (!bvol->expobj_valid)
|
if (!bvol->expobj_valid)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
result = casdisk_functions.casdsk_exp_obj_lock(bvol->dsk);
|
result = casdsk_exp_obj_lock(bvol->dsk);
|
||||||
if (result == -EBUSY)
|
if (result == -EBUSY)
|
||||||
return -KCAS_ERR_DEV_PENDING;
|
return -KCAS_ERR_DEV_PENDING;
|
||||||
else if (result)
|
else if (result)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
result = casdisk_functions.casdsk_exp_obj_destroy(bvol->dsk);
|
result = casdsk_exp_obj_destroy(bvol->dsk);
|
||||||
if (result)
|
if (result)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
@ -596,7 +596,7 @@ static int kcas_volume_destroy_exported_object(ocf_volume_t volume)
|
|||||||
destroy_workqueue(bvol->expobj_wq);
|
destroy_workqueue(bvol->expobj_wq);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
casdisk_functions.casdsk_exp_obj_unlock(bvol->dsk);
|
casdsk_exp_obj_unlock(bvol->dsk);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -610,7 +610,7 @@ static int kcas_volume_activate_exported_object(ocf_volume_t volume,
|
|||||||
struct bd_object *bvol = bd_object(volume);
|
struct bd_object *bvol = bd_object(volume);
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
result = casdisk_functions.casdsk_exp_obj_activate(bvol->dsk);
|
result = casdsk_exp_obj_activate(bvol->dsk);
|
||||||
if (result == -EEXIST)
|
if (result == -EEXIST)
|
||||||
result = -KCAS_ERR_FILE_EXISTS;
|
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)
|
if (!bvol->expobj_valid)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
result = casdisk_functions.casdsk_exp_obj_lock(bvol->dsk);
|
result = casdsk_exp_obj_lock(bvol->dsk);
|
||||||
|
|
||||||
if (-EBUSY == result) {
|
if (-EBUSY == result) {
|
||||||
printk(KERN_WARNING "Stopping %s failed - device in use\n",
|
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;
|
return -KCAS_ERR_DEV_PENDING;
|
||||||
} else if (result) {
|
} else if (result) {
|
||||||
printk(KERN_WARNING "Stopping %s failed - device unavailable\n",
|
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;
|
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));
|
struct bd_object *bvol = bd_object(ocf_core_get_volume(core));
|
||||||
|
|
||||||
if (bvol->expobj_locked) {
|
if (bvol->expobj_locked) {
|
||||||
casdisk_functions.casdsk_exp_obj_unlock(bvol->dsk);
|
casdsk_exp_obj_unlock(bvol->dsk);
|
||||||
bvol->expobj_locked = false;
|
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);
|
BUG_ON(!bvol->expobj_locked);
|
||||||
|
|
||||||
printk(KERN_INFO "Stopping device %s\n",
|
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) {
|
if (!ret) {
|
||||||
bvol->expobj_valid = false;
|
bvol->expobj_valid = false;
|
||||||
destroy_workqueue(bvol->expobj_wq);
|
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) {
|
if (bvol->expobj_locked) {
|
||||||
casdisk_functions.casdsk_exp_obj_unlock(bvol->dsk);
|
casdsk_exp_obj_unlock(bvol->dsk);
|
||||||
bvol->expobj_locked = false;
|
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));
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user