diff --git a/modules/cas_cache/cas_cache.h b/modules/cas_cache/cas_cache.h index 23b3eb4..14bd124 100644 --- a/modules/cas_cache/cas_cache.h +++ b/modules/cas_cache/cas_cache.h @@ -51,7 +51,6 @@ enum { }; struct cas_module { - struct list_head disk_list; uint32_t next_disk_id; int disk_major; int next_minor; diff --git a/modules/cas_cache/disk.c b/modules/cas_cache/disk.c index 37d38db..75ca842 100644 --- a/modules/cas_cache/disk.c +++ b/modules/cas_cache/disk.c @@ -55,7 +55,6 @@ int __init cas_init_disks(void) CAS_DEBUG_TRACE(); cas_module.next_disk_id = 1; - INIT_LIST_HEAD(&cas_module.disk_list); cas_module.disk_major = register_blkdev(cas_module.disk_major, "cas"); @@ -131,7 +130,6 @@ struct cas_disk *cas_disk_open(const char *path, void *private) dsk->private = private; dsk->id = cas_module.next_disk_id++; - list_add(&dsk->list, &cas_module.disk_list); result = _cas_disk_init_kobject(dsk); if (result) @@ -142,7 +140,6 @@ struct cas_disk *cas_disk_open(const char *path, void *private) return dsk; error_kobject: - list_del(&dsk->list); close_bdev_exclusive(dsk->bd, CAS_DISK_OPEN_FMODE); error_open_bdev: kfree(dsk->path); @@ -152,28 +149,6 @@ error_kmem: return ERR_PTR(result); } -static void _cas_disk_claim(struct cas_disk *dsk, void *private) -{ - dsk->private = private; -} - -struct cas_disk *cas_disk_claim(const char *path, void *private) -{ - struct list_head *item; - struct cas_disk *dsk = NULL; - - BUG_ON(!path); - - list_for_each(item, &cas_module.disk_list) { - dsk = list_entry(item, struct cas_disk, list); - if (strncmp(path, dsk->path, PATH_MAX) == 0) { - _cas_disk_claim(dsk, private); - return dsk; - } - } - return NULL; -} - static void __cas_disk_close(struct cas_disk *dsk) { close_bdev_exclusive(dsk->bd, CAS_DISK_OPEN_FMODE); @@ -189,8 +164,6 @@ void cas_disk_close(struct cas_disk *dsk) CAS_DEBUG_DISK(dsk, "Destroying (%p)", dsk); - list_del(&dsk->list); - __cas_disk_close(dsk); } diff --git a/modules/cas_cache/disk.h b/modules/cas_cache/disk.h index a2bab73..475b11a 100644 --- a/modules/cas_cache/disk.h +++ b/modules/cas_cache/disk.h @@ -31,7 +31,6 @@ struct cas_disk { struct cas_exp_obj *exp_obj; struct kobject kobj; - struct list_head list; void *private; }; @@ -49,15 +48,6 @@ int cas_disk_allocate_minors(int count); */ struct cas_disk *cas_disk_open(const char *path, void *private); -/** - * @brief Claim previously opened block device - * @param path Path to block device - * @param private Private data - * @return Pointer to cas_disk structure related to block device, or NULL - * if device is not opened. - */ -struct cas_disk *cas_disk_claim(const char *path, void *private); - /** * @brief Close block device and remove from cas * @param dsk Pointer to cas_disk structure related to block device diff --git a/modules/cas_cache/exp_obj.c b/modules/cas_cache/exp_obj.c index 4d2895f..07954f3 100644 --- a/modules/cas_cache/exp_obj.c +++ b/modules/cas_cache/exp_obj.c @@ -407,7 +407,7 @@ static int _cas_init_tag_set(struct cas_disk *dsk, struct blk_mq_tag_set *set) } int cas_exp_obj_create(struct cas_disk *dsk, const char *dev_name, - struct module *owner, struct cas_exp_obj_ops *ops) + struct module *owner, struct cas_exp_obj_ops *ops, void *priv) { struct cas_exp_obj *exp_obj; struct request_queue *queue; @@ -469,6 +469,8 @@ int cas_exp_obj_create(struct cas_disk *dsk, const char *dev_name, queue->queuedata = dsk; exp_obj->queue = queue; + dsk->private = priv; + _cas_init_queues(dsk); gd->fops = &_cas_exp_obj_ops; @@ -486,6 +488,7 @@ int cas_exp_obj_create(struct cas_disk *dsk, const char *dev_name, return 0; error_set_geometry: + dsk->private = NULL; _cas_exp_obj_clear_dev_t(dsk); error_exp_obj_set_dev_t: cas_cleanup_mq_disk(exp_obj); diff --git a/modules/cas_cache/exp_obj.h b/modules/cas_cache/exp_obj.h index dfe4ecc..58843b0 100644 --- a/modules/cas_cache/exp_obj.h +++ b/modules/cas_cache/exp_obj.h @@ -56,10 +56,11 @@ void cas_exp_obj_free(struct cas_disk *dsk); * @param dev_name Name of exported object (top device) * @param owner Pointer to cas module * @param ops Pointer to structure with callback functions + * @param priv Private data * @return 0 if success, errno if failure */ int cas_exp_obj_create(struct cas_disk *dsk, const char *dev_name, - struct module *owner, struct cas_exp_obj_ops *ops); + struct module *owner, struct cas_exp_obj_ops *ops, void *priv); /** * @brief Get request queue of exported object (top) block device diff --git a/modules/cas_cache/volume/vol_block_dev_top.c b/modules/cas_cache/volume/vol_block_dev_top.c index c265742..679d880 100644 --- a/modules/cas_cache/volume/vol_block_dev_top.c +++ b/modules/cas_cache/volume/vol_block_dev_top.c @@ -533,17 +533,9 @@ static int kcas_volume_create_exported_object(ocf_volume_t volume, const char *name, void *priv, struct cas_exp_obj_ops *ops) { struct bd_object *bvol = bd_object(volume); - const struct ocf_volume_uuid *uuid = ocf_volume_get_uuid(volume); char dev_name[DISK_NAME_LEN]; - struct cas_disk *dsk; int result; - dsk = cas_disk_claim(uuid->data, priv); - if (dsk != bvol->dsk) { - result = -KCAS_ERR_SYSTEM; - goto end; - } - bvol->expobj_wq = alloc_workqueue("expobj_wq_%s", WQ_MEM_RECLAIM | WQ_HIGHPRI, 0, name); @@ -552,8 +544,8 @@ static int kcas_volume_create_exported_object(ocf_volume_t volume, goto end; } - result = cas_exp_obj_create(dsk, name, - THIS_MODULE, ops); + result = cas_exp_obj_create(bvol->dsk, name, + THIS_MODULE, ops, priv); if (result) { destroy_workqueue(bvol->expobj_wq); goto end;