Move major/minor management to exported object code
Signed-off-by: Robert Baldyga <robert.baldyga@intel.com>
This commit is contained in:
parent
61dff1f6fd
commit
d0d17545eb
@ -29,21 +29,11 @@ int __init cas_init_disks(void)
|
|||||||
{
|
{
|
||||||
CAS_DEBUG_TRACE();
|
CAS_DEBUG_TRACE();
|
||||||
|
|
||||||
cas_module.disk_major = register_blkdev(cas_module.disk_major,
|
|
||||||
"cas");
|
|
||||||
if (cas_module.disk_major <= 0) {
|
|
||||||
CAS_DEBUG_ERROR("Cannot allocate major number");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
CAS_DEBUG_PARAM("Allocated major number: %d", cas_module.disk_major);
|
|
||||||
|
|
||||||
cas_module.disk_cache =
|
cas_module.disk_cache =
|
||||||
kmem_cache_create("cas_disk", sizeof(struct cas_disk),
|
kmem_cache_create("cas_disk", sizeof(struct cas_disk),
|
||||||
0, 0, NULL);
|
0, 0, NULL);
|
||||||
if (!cas_module.disk_cache) {
|
if (!cas_module.disk_cache)
|
||||||
unregister_blkdev(cas_module.disk_major, "cas");
|
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -53,7 +43,6 @@ void cas_deinit_disks(void)
|
|||||||
CAS_DEBUG_TRACE();
|
CAS_DEBUG_TRACE();
|
||||||
|
|
||||||
kmem_cache_destroy(cas_module.disk_cache);
|
kmem_cache_destroy(cas_module.disk_cache);
|
||||||
unregister_blkdev(cas_module.disk_major, "cas");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct cas_disk *cas_disk_open(const char *path)
|
struct cas_disk *cas_disk_open(const char *path)
|
||||||
@ -129,15 +118,3 @@ struct request_queue *cas_disk_get_queue(struct cas_disk *dsk)
|
|||||||
BUG_ON(!dsk->bd);
|
BUG_ON(!dsk->bd);
|
||||||
return cas_bdev_whole(dsk->bd)->bd_disk->queue;
|
return cas_bdev_whole(dsk->bd)->bd_disk->queue;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cas_disk_allocate_minors(int count)
|
|
||||||
{
|
|
||||||
int minor = -1;
|
|
||||||
|
|
||||||
if (cas_module.next_minor + count <= (1 << MINORBITS)) {
|
|
||||||
minor = cas_module.next_minor;
|
|
||||||
cas_module.next_minor += count;
|
|
||||||
}
|
|
||||||
|
|
||||||
return minor;
|
|
||||||
}
|
|
||||||
|
@ -24,8 +24,6 @@ struct cas_disk {
|
|||||||
int __init cas_init_disks(void);
|
int __init cas_init_disks(void);
|
||||||
void cas_deinit_disks(void);
|
void cas_deinit_disks(void);
|
||||||
|
|
||||||
int cas_disk_allocate_minors(int count);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Open block device
|
* @brief Open block device
|
||||||
* @param path Path to block device
|
* @param path Path to block device
|
||||||
|
@ -46,10 +46,20 @@ int __init cas_init_exp_objs(void)
|
|||||||
{
|
{
|
||||||
CAS_DEBUG_TRACE();
|
CAS_DEBUG_TRACE();
|
||||||
|
|
||||||
|
cas_module.disk_major = register_blkdev(cas_module.disk_major,
|
||||||
|
"cas");
|
||||||
|
if (cas_module.disk_major <= 0) {
|
||||||
|
CAS_DEBUG_ERROR("Cannot allocate major number");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
CAS_DEBUG_PARAM("Allocated major number: %d", cas_module.disk_major);
|
||||||
|
|
||||||
cas_module.exp_obj_cache = kmem_cache_create("cas_exp_obj",
|
cas_module.exp_obj_cache = kmem_cache_create("cas_exp_obj",
|
||||||
sizeof(struct cas_exp_obj), 0, 0, NULL);
|
sizeof(struct cas_exp_obj), 0, 0, NULL);
|
||||||
if (!cas_module.exp_obj_cache)
|
if (!cas_module.exp_obj_cache) {
|
||||||
|
unregister_blkdev(cas_module.disk_major, "cas");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -59,6 +69,7 @@ void cas_deinit_exp_objs(void)
|
|||||||
CAS_DEBUG_TRACE();
|
CAS_DEBUG_TRACE();
|
||||||
|
|
||||||
kmem_cache_destroy(cas_module.exp_obj_cache);
|
kmem_cache_destroy(cas_module.exp_obj_cache);
|
||||||
|
unregister_blkdev(cas_module.disk_major, "cas");
|
||||||
}
|
}
|
||||||
|
|
||||||
static MAKE_RQ_RET_TYPE _cas_exp_obj_submit_bio(struct bio *bio)
|
static MAKE_RQ_RET_TYPE _cas_exp_obj_submit_bio(struct bio *bio)
|
||||||
@ -190,6 +201,18 @@ static int _cas_exp_obj_hide_parts(struct cas_disk *dsk)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _cas_exp_obj_allocate_minors(int count)
|
||||||
|
{
|
||||||
|
int minor = -1;
|
||||||
|
|
||||||
|
if (cas_module.next_minor + count <= (1 << MINORBITS)) {
|
||||||
|
minor = cas_module.next_minor;
|
||||||
|
cas_module.next_minor += count;
|
||||||
|
}
|
||||||
|
|
||||||
|
return minor;
|
||||||
|
}
|
||||||
|
|
||||||
static int _cas_exp_obj_set_dev_t(struct cas_disk *dsk, struct gendisk *gd)
|
static int _cas_exp_obj_set_dev_t(struct cas_disk *dsk, struct gendisk *gd)
|
||||||
{
|
{
|
||||||
struct cas_exp_obj *exp_obj = dsk->exp_obj;
|
struct cas_exp_obj *exp_obj = dsk->exp_obj;
|
||||||
@ -209,7 +232,7 @@ static int _cas_exp_obj_set_dev_t(struct cas_disk *dsk, struct gendisk *gd)
|
|||||||
flags = exp_obj->gd_flags;
|
flags = exp_obj->gd_flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
gd->first_minor = cas_disk_allocate_minors(minors);
|
gd->first_minor = _cas_exp_obj_allocate_minors(minors);
|
||||||
if (gd->first_minor < 0) {
|
if (gd->first_minor < 0) {
|
||||||
CAS_DEBUG_DISK_ERROR(dsk, "Cannot allocate %d minors", minors);
|
CAS_DEBUG_DISK_ERROR(dsk, "Cannot allocate %d minors", minors);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
Loading…
Reference in New Issue
Block a user