Move exported object specific properties to struct cas_exp_obj

Signed-off-by: Robert Baldyga <robert.baldyga@intel.com>
This commit is contained in:
Robert Baldyga 2022-09-16 22:18:57 +02:00
parent 72cf855355
commit dc390adf49
3 changed files with 17 additions and 13 deletions

View File

@ -18,10 +18,6 @@ struct cas_disk {
struct block_device *bd;
int gd_flags;
int gd_minors;
struct blk_mq_tag_set tag_set;
struct cas_exp_obj *exp_obj;
void *private;

View File

@ -156,6 +156,7 @@ static int _cas_flags = GENHD_FL_EXT_DEVT;
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 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 */
dsk->gd_flags = gdsk->flags & _cas_flags;
dsk->gd_minors = gdsk->minors;
exp_obj->gd_flags = gdsk->flags & _cas_flags;
exp_obj->gd_minors = gdsk->minors;
/* Setup disk of bottom device as not partitioned device */
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)
{
struct cas_exp_obj *exp_obj = dsk->exp_obj;
int flags;
int minors = disk_max_parts(cas_disk_get_gendisk(dsk));
struct block_device *bdev;
@ -202,7 +204,7 @@ static int _cas_exp_obj_set_dev_t(struct cas_disk *dsk, struct gendisk *gd)
} else {
if (_cas_exp_obj_hide_parts(dsk))
return -EINVAL;
flags = dsk->gd_flags;
flags = exp_obj->gd_flags;
}
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)
{
struct cas_exp_obj *exp_obj = dsk->exp_obj;
struct block_device *bdev = cas_disk_get_blkdev(dsk);
struct gendisk *gdsk = cas_disk_get_gendisk(dsk);
if (cas_bdev_whole(bdev) == bdev) {
/* Restore previous configuration of bottom disk */
gdsk->minors = dsk->gd_minors;
gdsk->flags |= dsk->gd_flags;
gdsk->minors = exp_obj->gd_minors;
gdsk->flags |= exp_obj->gd_flags;
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->ops = ops;
result = _cas_init_tag_set(dsk, &dsk->tag_set);
result = _cas_init_tag_set(dsk, &exp_obj->tag_set);
if (result) {
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) {
goto error_alloc_mq_disk;
}
@ -432,7 +435,7 @@ error_exp_obj_set_dev_t:
cas_cleanup_mq_disk(exp_obj);
dsk->exp_obj->gd = NULL;
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:
module_put(owner);
dsk->exp_obj->owner = NULL;
@ -526,7 +529,7 @@ int cas_exp_obj_destroy(struct cas_disk *dsk)
if (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);

View File

@ -43,6 +43,11 @@ struct cas_exp_obj {
unsigned int openers;
bool claimed;
int gd_flags;
int gd_minors;
struct blk_mq_tag_set tag_set;
atomic_t pt_ios;
atomic_t *pending_rqs;
};