Remove disk kobj
Simplify disk life cycle. Signed-off-by: Robert Baldyga <robert.baldyga@intel.com>
This commit is contained in:
parent
2f54aea87d
commit
67ed36ae0e
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user