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; 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;

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) 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);

View File

@ -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;
}; };