Remove disk kobj

Simplify disk life cycle.

Signed-off-by: Robert Baldyga <robert.baldyga@intel.com>
This commit is contained in:
Robert Baldyga 2022-09-16 21:58:57 +02:00
parent 2f54aea87d
commit 67ed36ae0e
3 changed files with 4 additions and 65 deletions

View File

@ -51,14 +51,11 @@ enum {
};
struct cas_module {
uint32_t next_disk_id;
int disk_major;
int next_minor;
struct kmem_cache *disk_cache;
struct kmem_cache *exp_obj_cache;
struct kobject kobj;
};
extern struct cas_module cas_module;

View File

@ -13,11 +13,6 @@
#define CAS_DISK_OPEN_FMODE (FMODE_READ | FMODE_WRITE)
static inline struct cas_disk *cas_kobj_to_disk(struct kobject *kobj)
{
return container_of(kobj, struct cas_disk, kobj);
}
static inline struct block_device *open_bdev_exclusive(const char *path,
fmode_t mode,
void *holder)
@ -30,32 +25,10 @@ static inline void close_bdev_exclusive(struct block_device *bdev, fmode_t mode)
blkdev_put(bdev, mode | FMODE_EXCL);
}
static void _cas_disk_release(struct kobject *kobj)
{
struct cas_disk *dsk;
BUG_ON(!kobj);
dsk = cas_kobj_to_disk(kobj);
BUG_ON(!dsk);
CAS_DEBUG_DISK_TRACE(dsk);
kfree(dsk->path);
kmem_cache_free(cas_module.disk_cache, dsk);
}
static struct kobj_type cas_disk_ktype = {
.release = _cas_disk_release,
};
int __init cas_init_disks(void)
{
CAS_DEBUG_TRACE();
cas_module.next_disk_id = 1;
cas_module.disk_major = register_blkdev(cas_module.disk_major,
"cas");
if (cas_module.disk_major <= 0) {
@ -83,19 +56,6 @@ void cas_deinit_disks(void)
unregister_blkdev(cas_module.disk_major, "cas");
}
static int _cas_disk_init_kobject(struct cas_disk *dsk)
{
int result = 0;
kobject_init(&dsk->kobj, &cas_disk_ktype);
result = kobject_add(&dsk->kobj, &disk_to_dev(dsk->bd->bd_disk)->kobj,
"cas%d", dsk->id);
if (result)
CAS_DEBUG_DISK_ERROR(dsk, "Cannot register kobject");
return result;
}
struct cas_disk *cas_disk_open(const char *path)
{
struct cas_disk *dsk;
@ -127,18 +87,10 @@ struct cas_disk *cas_disk_open(const char *path)
goto error_open_bdev;
}
dsk->id = cas_module.next_disk_id++;
result = _cas_disk_init_kobject(dsk);
if (result)
goto error_kobject;
CAS_DEBUG_DISK(dsk, "Created (%p)", dsk);
return dsk;
error_kobject:
close_bdev_exclusive(dsk->bd, CAS_DISK_OPEN_FMODE);
error_open_bdev:
kfree(dsk->path);
error_kstrdup:
@ -147,15 +99,6 @@ error_kmem:
return ERR_PTR(result);
}
static void __cas_disk_close(struct cas_disk *dsk)
{
BUG_ON(dsk->exp_obj);
close_bdev_exclusive(dsk->bd, CAS_DISK_OPEN_FMODE);
kobject_put(&dsk->kobj);
}
void cas_disk_close(struct cas_disk *dsk)
{
BUG_ON(!dsk);
@ -163,7 +106,10 @@ void cas_disk_close(struct cas_disk *dsk)
CAS_DEBUG_DISK(dsk, "Destroying (%p)", dsk);
__cas_disk_close(dsk);
close_bdev_exclusive(dsk->bd, CAS_DISK_OPEN_FMODE);
kfree(dsk->path);
kmem_cache_free(cas_module.disk_cache, dsk);
}
struct block_device *cas_disk_get_blkdev(struct cas_disk *dsk)

View File

@ -5,7 +5,6 @@
#ifndef __CASDISK_DISK_H__
#define __CASDISK_DISK_H__
#include <linux/kobject.h>
#include <linux/fs.h>
#include <linux/blkdev.h>
#include <linux/mutex.h>
@ -15,7 +14,6 @@
struct cas_exp_obj;
struct cas_disk {
uint32_t id;
char *path;
struct mutex openers_lock;
@ -30,8 +28,6 @@ struct cas_disk {
struct blk_mq_tag_set tag_set;
struct cas_exp_obj *exp_obj;
struct kobject kobj;
void *private;
};