Remove cas_disk_claim()
Signed-off-by: Robert Baldyga <robert.baldyga@intel.com>
This commit is contained in:
parent
70cc908b39
commit
6d2266f7ee
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user