Remove cas_disk_claim()

Signed-off-by: Robert Baldyga <robert.baldyga@intel.com>
This commit is contained in:
Robert Baldyga 2022-09-16 17:03:31 +02:00
parent 70cc908b39
commit 6d2266f7ee
6 changed files with 8 additions and 50 deletions

View File

@ -51,7 +51,6 @@ enum {
}; };
struct cas_module { struct cas_module {
struct list_head disk_list;
uint32_t next_disk_id; uint32_t next_disk_id;
int disk_major; int disk_major;
int next_minor; int next_minor;

View File

@ -55,7 +55,6 @@ int __init cas_init_disks(void)
CAS_DEBUG_TRACE(); CAS_DEBUG_TRACE();
cas_module.next_disk_id = 1; cas_module.next_disk_id = 1;
INIT_LIST_HEAD(&cas_module.disk_list);
cas_module.disk_major = register_blkdev(cas_module.disk_major, cas_module.disk_major = register_blkdev(cas_module.disk_major,
"cas"); "cas");
@ -131,7 +130,6 @@ struct cas_disk *cas_disk_open(const char *path, void *private)
dsk->private = private; dsk->private = private;
dsk->id = cas_module.next_disk_id++; dsk->id = cas_module.next_disk_id++;
list_add(&dsk->list, &cas_module.disk_list);
result = _cas_disk_init_kobject(dsk); result = _cas_disk_init_kobject(dsk);
if (result) if (result)
@ -142,7 +140,6 @@ struct cas_disk *cas_disk_open(const char *path, void *private)
return dsk; return dsk;
error_kobject: error_kobject:
list_del(&dsk->list);
close_bdev_exclusive(dsk->bd, CAS_DISK_OPEN_FMODE); close_bdev_exclusive(dsk->bd, CAS_DISK_OPEN_FMODE);
error_open_bdev: error_open_bdev:
kfree(dsk->path); kfree(dsk->path);
@ -152,28 +149,6 @@ error_kmem:
return ERR_PTR(result); 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) static void __cas_disk_close(struct cas_disk *dsk)
{ {
close_bdev_exclusive(dsk->bd, CAS_DISK_OPEN_FMODE); 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); CAS_DEBUG_DISK(dsk, "Destroying (%p)", dsk);
list_del(&dsk->list);
__cas_disk_close(dsk); __cas_disk_close(dsk);
} }

View File

@ -31,7 +31,6 @@ struct cas_disk {
struct cas_exp_obj *exp_obj; struct cas_exp_obj *exp_obj;
struct kobject kobj; struct kobject kobj;
struct list_head list;
void *private; void *private;
}; };
@ -49,15 +48,6 @@ int cas_disk_allocate_minors(int count);
*/ */
struct cas_disk *cas_disk_open(const char *path, void *private); 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 * @brief Close block device and remove from cas
* @param dsk Pointer to cas_disk structure related to block device * @param dsk Pointer to cas_disk structure related to block device

View File

@ -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, 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 cas_exp_obj *exp_obj;
struct request_queue *queue; struct request_queue *queue;
@ -469,6 +469,8 @@ int cas_exp_obj_create(struct cas_disk *dsk, const char *dev_name,
queue->queuedata = dsk; queue->queuedata = dsk;
exp_obj->queue = queue; exp_obj->queue = queue;
dsk->private = priv;
_cas_init_queues(dsk); _cas_init_queues(dsk);
gd->fops = &_cas_exp_obj_ops; 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; return 0;
error_set_geometry: error_set_geometry:
dsk->private = NULL;
_cas_exp_obj_clear_dev_t(dsk); _cas_exp_obj_clear_dev_t(dsk);
error_exp_obj_set_dev_t: error_exp_obj_set_dev_t:
cas_cleanup_mq_disk(exp_obj); cas_cleanup_mq_disk(exp_obj);

View File

@ -56,10 +56,11 @@ void cas_exp_obj_free(struct cas_disk *dsk);
* @param dev_name Name of exported object (top device) * @param dev_name Name of exported object (top device)
* @param owner Pointer to cas module * @param owner Pointer to cas module
* @param ops Pointer to structure with callback functions * @param ops Pointer to structure with callback functions
* @param priv Private data
* @return 0 if success, errno if failure * @return 0 if success, errno if failure
*/ */
int cas_exp_obj_create(struct cas_disk *dsk, const char *dev_name, 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 * @brief Get request queue of exported object (top) block device

View File

@ -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) const char *name, void *priv, struct cas_exp_obj_ops *ops)
{ {
struct bd_object *bvol = bd_object(volume); struct bd_object *bvol = bd_object(volume);
const struct ocf_volume_uuid *uuid = ocf_volume_get_uuid(volume);
char dev_name[DISK_NAME_LEN]; char dev_name[DISK_NAME_LEN];
struct cas_disk *dsk;
int result; 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", bvol->expobj_wq = alloc_workqueue("expobj_wq_%s",
WQ_MEM_RECLAIM | WQ_HIGHPRI, 0, WQ_MEM_RECLAIM | WQ_HIGHPRI, 0,
name); name);
@ -552,8 +544,8 @@ static int kcas_volume_create_exported_object(ocf_volume_t volume,
goto end; goto end;
} }
result = cas_exp_obj_create(dsk, name, result = cas_exp_obj_create(bvol->dsk, name,
THIS_MODULE, ops); THIS_MODULE, ops, priv);
if (result) { if (result) {
destroy_workqueue(bvol->expobj_wq); destroy_workqueue(bvol->expobj_wq);
goto end; goto end;