Move exported object specific properties to struct cas_exp_obj
Signed-off-by: Robert Baldyga <robert.baldyga@intel.com>
This commit is contained in:
parent
72cf855355
commit
dc390adf49
@ -18,10 +18,6 @@ struct cas_disk {
|
|||||||
|
|
||||||
struct block_device *bd;
|
struct block_device *bd;
|
||||||
|
|
||||||
int gd_flags;
|
|
||||||
int gd_minors;
|
|
||||||
|
|
||||||
struct blk_mq_tag_set tag_set;
|
|
||||||
struct cas_exp_obj *exp_obj;
|
struct cas_exp_obj *exp_obj;
|
||||||
|
|
||||||
void *private;
|
void *private;
|
||||||
|
@ -156,6 +156,7 @@ static int _cas_flags = GENHD_FL_EXT_DEVT;
|
|||||||
|
|
||||||
static int _cas_exp_obj_hide_parts(struct cas_disk *dsk)
|
static int _cas_exp_obj_hide_parts(struct cas_disk *dsk)
|
||||||
{
|
{
|
||||||
|
struct cas_exp_obj *exp_obj = dsk->exp_obj;
|
||||||
struct block_device *bd = cas_disk_get_blkdev(dsk);
|
struct block_device *bd = cas_disk_get_blkdev(dsk);
|
||||||
struct gendisk *gdsk = cas_disk_get_gendisk(dsk);
|
struct gendisk *gdsk = cas_disk_get_gendisk(dsk);
|
||||||
|
|
||||||
@ -175,8 +176,8 @@ static int _cas_exp_obj_hide_parts(struct cas_disk *dsk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Save original flags and minors */
|
/* Save original flags and minors */
|
||||||
dsk->gd_flags = gdsk->flags & _cas_flags;
|
exp_obj->gd_flags = gdsk->flags & _cas_flags;
|
||||||
dsk->gd_minors = gdsk->minors;
|
exp_obj->gd_minors = gdsk->minors;
|
||||||
|
|
||||||
/* Setup disk of bottom device as not partitioned device */
|
/* Setup disk of bottom device as not partitioned device */
|
||||||
gdsk->flags &= ~_cas_flags;
|
gdsk->flags &= ~_cas_flags;
|
||||||
@ -189,6 +190,7 @@ static int _cas_exp_obj_hide_parts(struct cas_disk *dsk)
|
|||||||
|
|
||||||
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;
|
||||||
int flags;
|
int flags;
|
||||||
int minors = disk_max_parts(cas_disk_get_gendisk(dsk));
|
int minors = disk_max_parts(cas_disk_get_gendisk(dsk));
|
||||||
struct block_device *bdev;
|
struct block_device *bdev;
|
||||||
@ -202,7 +204,7 @@ static int _cas_exp_obj_set_dev_t(struct cas_disk *dsk, struct gendisk *gd)
|
|||||||
} else {
|
} else {
|
||||||
if (_cas_exp_obj_hide_parts(dsk))
|
if (_cas_exp_obj_hide_parts(dsk))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
flags = dsk->gd_flags;
|
flags = exp_obj->gd_flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
gd->first_minor = cas_disk_allocate_minors(minors);
|
gd->first_minor = cas_disk_allocate_minors(minors);
|
||||||
@ -220,13 +222,14 @@ static int _cas_exp_obj_set_dev_t(struct cas_disk *dsk, struct gendisk *gd)
|
|||||||
|
|
||||||
static void _cas_exp_obj_clear_dev_t(struct cas_disk *dsk)
|
static void _cas_exp_obj_clear_dev_t(struct cas_disk *dsk)
|
||||||
{
|
{
|
||||||
|
struct cas_exp_obj *exp_obj = dsk->exp_obj;
|
||||||
struct block_device *bdev = cas_disk_get_blkdev(dsk);
|
struct block_device *bdev = cas_disk_get_blkdev(dsk);
|
||||||
struct gendisk *gdsk = cas_disk_get_gendisk(dsk);
|
struct gendisk *gdsk = cas_disk_get_gendisk(dsk);
|
||||||
|
|
||||||
if (cas_bdev_whole(bdev) == bdev) {
|
if (cas_bdev_whole(bdev) == bdev) {
|
||||||
/* Restore previous configuration of bottom disk */
|
/* Restore previous configuration of bottom disk */
|
||||||
gdsk->minors = dsk->gd_minors;
|
gdsk->minors = exp_obj->gd_minors;
|
||||||
gdsk->flags |= dsk->gd_flags;
|
gdsk->flags |= exp_obj->gd_flags;
|
||||||
cas_reread_partitions(bdev);
|
cas_reread_partitions(bdev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -387,12 +390,12 @@ int cas_exp_obj_create(struct cas_disk *dsk, const char *dev_name,
|
|||||||
exp_obj->owner = owner;
|
exp_obj->owner = owner;
|
||||||
exp_obj->ops = ops;
|
exp_obj->ops = ops;
|
||||||
|
|
||||||
result = _cas_init_tag_set(dsk, &dsk->tag_set);
|
result = _cas_init_tag_set(dsk, &exp_obj->tag_set);
|
||||||
if (result) {
|
if (result) {
|
||||||
goto error_init_tag_set;
|
goto error_init_tag_set;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = cas_alloc_mq_disk(&gd, &queue, &dsk->tag_set);
|
result = cas_alloc_mq_disk(&gd, &queue, &exp_obj->tag_set);
|
||||||
if (result) {
|
if (result) {
|
||||||
goto error_alloc_mq_disk;
|
goto error_alloc_mq_disk;
|
||||||
}
|
}
|
||||||
@ -432,7 +435,7 @@ error_exp_obj_set_dev_t:
|
|||||||
cas_cleanup_mq_disk(exp_obj);
|
cas_cleanup_mq_disk(exp_obj);
|
||||||
dsk->exp_obj->gd = NULL;
|
dsk->exp_obj->gd = NULL;
|
||||||
error_alloc_mq_disk:
|
error_alloc_mq_disk:
|
||||||
blk_mq_free_tag_set(&dsk->tag_set);
|
blk_mq_free_tag_set(&exp_obj->tag_set);
|
||||||
error_init_tag_set:
|
error_init_tag_set:
|
||||||
module_put(owner);
|
module_put(owner);
|
||||||
dsk->exp_obj->owner = NULL;
|
dsk->exp_obj->owner = NULL;
|
||||||
@ -526,7 +529,7 @@ int cas_exp_obj_destroy(struct cas_disk *dsk)
|
|||||||
if (exp_obj->queue)
|
if (exp_obj->queue)
|
||||||
blk_cleanup_queue(exp_obj->queue);
|
blk_cleanup_queue(exp_obj->queue);
|
||||||
|
|
||||||
blk_mq_free_tag_set(&dsk->tag_set);
|
blk_mq_free_tag_set(&exp_obj->tag_set);
|
||||||
|
|
||||||
put_disk(exp_obj->gd);
|
put_disk(exp_obj->gd);
|
||||||
|
|
||||||
|
@ -43,6 +43,11 @@ struct cas_exp_obj {
|
|||||||
unsigned int openers;
|
unsigned int openers;
|
||||||
bool claimed;
|
bool claimed;
|
||||||
|
|
||||||
|
int gd_flags;
|
||||||
|
int gd_minors;
|
||||||
|
|
||||||
|
struct blk_mq_tag_set tag_set;
|
||||||
|
|
||||||
atomic_t pt_ios;
|
atomic_t pt_ios;
|
||||||
atomic_t *pending_rqs;
|
atomic_t *pending_rqs;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user