Consolidate modules

Signed-off-by: Robert Baldyga <robert.baldyga@intel.com>
This commit is contained in:
Robert Baldyga 2022-09-02 21:22:29 +02:00
parent a03c577f59
commit 13d3decfa9
18 changed files with 48 additions and 225 deletions

View File

@ -2508,34 +2508,6 @@ int cas_module_version(char *buff, int size)
}
}
int disk_module_version(char *buff, int size)
{
FILE *fd;
int n_read;
if (size <= 0 || size > MAX_STR_LEN) {
return FAILURE;
}
fd = fopen("/sys/module/cas_disk/version", "r");
if (!fd) {
return FAILURE;
}
n_read = fread(buff, 1, size, fd);
if (ferror(fd)) {
n_read = 0;
}
fclose(fd);
if (n_read > 0) {
buff[n_read - 1] = '\0';
return SUCCESS;
} else {
return FAILURE;
}
}
float calculate_flush_progress(unsigned dirty, unsigned flushed)
{
unsigned total_dirty;

View File

@ -1,5 +1,5 @@
/*
* Copyright(c) 2012-2021 Intel Corporation
* Copyright(c) 2012-2022 Intel Corporation
* SPDX-License-Identifier: BSD-3-Clause
*/
@ -279,7 +279,6 @@ int partition_setup(unsigned int cache_id, const char *file);
int partition_is_name_valid(const char *name);
int cas_module_version(char *buff, int size);
int disk_module_version(char *buff, int size);
int list_caches(unsigned int list_format, bool by_id_path);
int cache_status(unsigned int cache_id, unsigned int core_id, int io_class_id,
unsigned int stats_filters, unsigned int stats_format, bool by_id_path);

View File

@ -1849,13 +1849,6 @@ static int handle_version(void)
fprintf(intermediate_file[1], "%s\n", buff);
}
fprintf(intermediate_file[1], TAG(TABLE_ROW) OCF_LOGO " Disk Kernel Module,");
if (disk_module_version(buff, MAX_STR_LEN)) {
fprintf(intermediate_file[1], "Not Loaded\n");
} else {
fprintf(intermediate_file[1], "%s\n", buff);
}
fprintf(intermediate_file[1], TAG(TABLE_ROW) OCF_LOGO " CLI Utility,");
fprintf(intermediate_file[1], "%s\n", CAS_VERSION);

View File

@ -9,7 +9,6 @@ ifneq ($(M),)
include $(M)/config.mk
obj-y += cas_cache/
obj-y += cas_disk/
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
@ -28,7 +27,6 @@ KERNEL_VERSION ?= "$(shell uname -r)"
KERNEL_DIR ?= "/lib/modules/$(KERNEL_VERSION)/build"
MODULES_DIR=/lib/modules/$(KERNEL_VERSION)/extra/block/opencas
DISK_MODULE = cas_disk
CACHE_MODULE = cas_cache
DEPMOD:=$(shell which depmod)
@ -58,16 +56,13 @@ install: install_files
install_files:
@echo "Installing Open-CAS modules"
@install -m 644 -D cas_disk/$(DISK_MODULE).ko $(DESTDIR)$(MODULES_DIR)/$(DISK_MODULE).ko
@install -m 644 -D cas_cache/$(CACHE_MODULE).ko $(DESTDIR)$(MODULES_DIR)/$(CACHE_MODULE).ko
uninstall:
@echo "Uninstalling Open-CAS modules"
$(call remove-module,$(CACHE_MODULE))
$(call remove-module,$(DISK_MODULE))
$(call remove-file,$(DESTDIR)$(MODULES_DIR)/$(CACHE_MODULE).ko)
$(call remove-file,$(DESTDIR)$(MODULES_DIR)/$(DISK_MODULE).ko)
$(call remove-directory,$(DESTDIR)$(MODULES_DIR))
@$(DEPMOD)

View File

@ -19,7 +19,7 @@
#include "classifier.h"
#include "context.h"
#include <linux/kallsyms.h>
#include "../cas_disk/cas_disk.h"
#include "cas_disk.h"
#define CAS_KERN_EMERG KERN_EMERG OCF_PREFIX_SHORT
#define CAS_KERN_ALERT KERN_ALERT OCF_PREFIX_SHORT
@ -49,6 +49,20 @@ enum {
/** \endcond */
};
struct casdsk_module {
struct list_head disk_list;
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 casdsk_module *casdsk_module;
struct cas_classifier;
struct cache_priv {

View File

@ -7,11 +7,8 @@
#include <linux/blkdev.h>
#include "linux_kernel_version.h"
/**
* Version of cas_disk interface
*/
#define CASDSK_IFACE_VERSION 3
#include "disk.h"
#include "exp_obj.h"
struct casdsk_disk;
@ -31,12 +28,6 @@ struct casdsk_exp_obj_ops {
struct bio *bio, void *private);
};
/**
* @brief Get version of cas_disk interface
* @return cas_disk interface version
*/
uint32_t casdsk_get_version(void);
/**
* @brief Open block device
* @param path Path to block device

View File

@ -6,10 +6,10 @@
#include <linux/slab.h>
#include <linux/fs.h>
#include <linux/delay.h>
#include "cas_disk_defs.h"
#include "cas_cache.h"
#include "disk.h"
#include "exp_obj.h"
#include "debug.h"
#define CASDSK_DISK_OPEN_FMODE (FMODE_READ | FMODE_WRITE)
@ -107,7 +107,6 @@ struct casdsk_disk *casdsk_disk_open(const char *path, void *private)
result = -ENOMEM;
goto error_kmem;
}
mutex_init(&dsk->lock);
mutex_init(&dsk->openers_lock);
@ -126,13 +125,9 @@ struct casdsk_disk *casdsk_disk_open(const char *path, void *private)
dsk->private = private;
mutex_lock(&casdsk_module->lock);
dsk->id = casdsk_module->next_disk_id++;
list_add(&dsk->list, &casdsk_module->disk_list);
mutex_unlock(&casdsk_module->lock);
result = _casdsk_disk_init_kobject(dsk);
if (result)
goto error_kobject;
@ -142,9 +137,7 @@ struct casdsk_disk *casdsk_disk_open(const char *path, void *private)
return dsk;
error_kobject:
mutex_lock(&casdsk_module->lock);
list_del(&dsk->list);
mutex_unlock(&casdsk_module->lock);
close_bdev_exclusive(dsk->bd, CASDSK_DISK_OPEN_FMODE);
error_open_bdev:
kfree(dsk->path);
@ -153,7 +146,6 @@ error_kstrdup:
error_kmem:
return ERR_PTR(result);
}
EXPORT_SYMBOL(casdsk_disk_open);
static void _casdsk_disk_claim(struct casdsk_disk *dsk, void *private)
{
@ -167,19 +159,15 @@ struct casdsk_disk *casdsk_disk_claim(const char *path, void *private)
BUG_ON(!path);
mutex_lock(&casdsk_module->lock);
list_for_each(item, &casdsk_module->disk_list) {
dsk = list_entry(item, struct casdsk_disk, list);
if (strncmp(path, dsk->path, PATH_MAX) == 0) {
_casdsk_disk_claim(dsk, private);
mutex_unlock(&casdsk_module->lock);
return dsk;
}
}
mutex_unlock(&casdsk_module->lock);
return NULL;
}
EXPORT_SYMBOL(casdsk_disk_claim);
static void __casdsk_disk_close(struct casdsk_disk *dsk)
{
@ -196,22 +184,16 @@ void casdsk_disk_close(struct casdsk_disk *dsk)
CASDSK_DEBUG_DISK(dsk, "Destroying (%p)", dsk);
mutex_lock(&casdsk_module->lock);
list_del(&dsk->list);
mutex_unlock(&casdsk_module->lock);
__casdsk_disk_close(dsk);
}
EXPORT_SYMBOL(casdsk_disk_close);
struct block_device *casdsk_disk_get_blkdev(struct casdsk_disk *dsk)
{
BUG_ON(!dsk);
return dsk->bd;
}
EXPORT_SYMBOL(casdsk_disk_get_blkdev);
struct gendisk *casdsk_disk_get_gendisk(struct casdsk_disk *dsk)
{
@ -226,18 +208,15 @@ struct request_queue *casdsk_disk_get_queue(struct casdsk_disk *dsk)
BUG_ON(!dsk->bd);
return cas_bdev_whole(dsk->bd)->bd_disk->queue;
}
EXPORT_SYMBOL(casdsk_disk_get_queue);
int casdsk_disk_allocate_minors(int count)
{
int minor = -1;
mutex_lock(&casdsk_module->lock);
if (casdsk_module->next_minor + count <= (1 << MINORBITS)) {
minor = casdsk_module->next_minor;
casdsk_module->next_minor += count;
}
mutex_unlock(&casdsk_module->lock);
return minor;
}

View File

@ -2,7 +2,7 @@
* Copyright(c) 2012-2022 Intel Corporation
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __
#ifndef __CASDISK_DISK_H__
#define __CASDISK_DISK_H__
#include <linux/kobject.h>
@ -10,6 +10,7 @@
#include <linux/blkdev.h>
#include <linux/mutex.h>
#include <linux/blk-mq.h>
#include "cas_cache.h"
struct casdsk_exp_obj;
@ -17,8 +18,6 @@ struct casdsk_disk {
uint32_t id;
char *path;
struct mutex lock;
struct mutex openers_lock;
unsigned int openers;
bool claimed;

View File

@ -10,11 +10,12 @@
#include <linux/elevator.h>
#include <linux/blk-mq.h>
#include "cas_disk_defs.h"
#include "cas_disk.h"
#include "disk.h"
#include "exp_obj.h"
#include "linux_kernel_version.h"
#include "cas_cache.h"
#include "debug.h"
#define CASDSK_DEV_MINORS 16
#define KMEM_CACHE_MIN_SIZE sizeof(void *)
@ -310,7 +311,6 @@ void casdsk_exp_obj_free(struct casdsk_disk *dsk)
kobject_put(&exp_obj->kobj);
dsk->exp_obj = NULL;
}
EXPORT_SYMBOL(casdsk_exp_obj_free);
static void __casdsk_exp_obj_release(struct casdsk_exp_obj *exp_obj)
{
@ -504,7 +504,6 @@ error_exp_obj_alloc:
return result;
}
EXPORT_SYMBOL(casdsk_exp_obj_create);
struct request_queue *casdsk_exp_obj_get_queue(struct casdsk_disk *dsk)
{
@ -512,7 +511,6 @@ struct request_queue *casdsk_exp_obj_get_queue(struct casdsk_disk *dsk)
BUG_ON(!dsk->exp_obj);
return dsk->exp_obj->queue;
}
EXPORT_SYMBOL(casdsk_exp_obj_get_queue);
struct gendisk *casdsk_exp_obj_get_gendisk(struct casdsk_disk *dsk)
{
@ -520,7 +518,6 @@ struct gendisk *casdsk_exp_obj_get_gendisk(struct casdsk_disk *dsk)
BUG_ON(!dsk->exp_obj);
return dsk->exp_obj->gd;
}
EXPORT_SYMBOL(casdsk_exp_obj_get_gendisk);
static bool _casdsk_exp_obj_exists(const char *path)
{
@ -588,7 +585,6 @@ error_bd_claim:
dsk->exp_obj->activated = false;
return result;
}
EXPORT_SYMBOL(casdsk_exp_obj_activate);
bool casdsk_exp_obj_activated(struct casdsk_disk *dsk)
{
@ -618,7 +614,6 @@ int casdsk_exp_obj_lock(struct casdsk_disk *dsk)
mutex_unlock(&dsk->openers_lock);
return result;
}
EXPORT_SYMBOL(casdsk_exp_obj_lock);
int casdsk_exp_obj_unlock(struct casdsk_disk *dsk)
{
@ -631,7 +626,6 @@ int casdsk_exp_obj_unlock(struct casdsk_disk *dsk)
return 0;
}
EXPORT_SYMBOL(casdsk_exp_obj_unlock);
int casdsk_exp_obj_destroy(struct casdsk_disk *dsk)
{
@ -663,4 +657,3 @@ int casdsk_exp_obj_destroy(struct casdsk_disk *dsk)
return 0;
}
EXPORT_SYMBOL(casdsk_exp_obj_destroy);

View File

@ -40,7 +40,7 @@
#include <linux/mm.h>
#include <linux/blk-mq.h>
#include <linux/ktime.h>
#include "../cas_disk/exp_obj.h"
#include "exp_obj.h"
#include "generated_defines.h"

View File

@ -40,17 +40,13 @@ MODULE_PARM_DESC(seq_cut_off_mb,
/* globals */
ocf_ctx_t cas_ctx;
struct casdsk_module cas_module;
struct casdsk_module *casdsk_module;
static int __init cas_init_module(void)
{
int result = 0;
if (casdsk_get_version() != CASDSK_IFACE_VERSION) {
printk(KERN_ERR OCF_PREFIX_SHORT
"Incompatible cas_disk module\n");
return -EINVAL;
}
if (!writeback_queue_unblock_size || !max_writeback_queue_size) {
printk(KERN_ERR OCF_PREFIX_SHORT
"Invalid module parameter.\n");
@ -76,18 +72,28 @@ static int __init cas_init_module(void)
return -EINVAL;
}
casdsk_module = &cas_module;
result = casdsk_init_exp_objs();
if (result)
return result;
result = casdsk_init_disks();
if (result)
goto error_init_disks;
result = cas_initialize_context();
if (result) {
printk(KERN_ERR OCF_PREFIX_SHORT
"Cannot initialize cache library\n");
return result;
goto error_init_context;
}
result = cas_ctrl_device_init();
if (result) {
printk(KERN_ERR OCF_PREFIX_SHORT
"Cannot initialize control device\n");
goto error_cas_ctx_init;
goto error_init_device;
}
printk(KERN_INFO "%s Version %s (%s)::Module loaded successfully\n",
@ -95,8 +101,12 @@ static int __init cas_init_module(void)
return 0;
error_cas_ctx_init:
error_init_device:
cas_cleanup_context();
error_init_context:
casdsk_deinit_disks();
error_init_disks:
casdsk_deinit_exp_objs();
return result;
}
@ -107,6 +117,8 @@ static void __exit cas_exit_module(void)
{
cas_ctrl_device_deinit();
cas_cleanup_context();
casdsk_deinit_disks();
casdsk_deinit_exp_objs();
}
module_exit(cas_exit_module);

View File

@ -1,11 +0,0 @@
#
# Copyright(c) 2012-2022 Intel Corporation
# SPDX-License-Identifier: BSD-3-Clause
#
include $(M)/config.mk
obj-m := cas_disk.o
cas_disk-objs = main.o
cas_disk-objs += disk.o
cas_disk-objs += exp_obj.o

View File

@ -1,33 +0,0 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __CASDISK_DEFS_H__
#define __CASDISK_DEFS_H__
#include <linux/version.h>
#include <linux/fs.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/kobject.h>
#include <linux/blkdev.h>
struct casdsk_module {
struct mutex lock;
struct list_head disk_list;
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 casdsk_module *casdsk_module;
#include "debug.h"
#endif

View File

@ -1,77 +0,0 @@
/*
* Copyright(c) 2012-2022 Intel Corporation
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/vmalloc.h>
#include "cas_disk_defs.h"
#include "cas_disk.h"
#include "disk.h"
#include "exp_obj.h"
#define CASDSK_LOGO "CAS Disk"
/* Layer information. */
MODULE_AUTHOR("Intel(R) Corporation");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_VERSION(CAS_VERSION);
static int iface_version = CASDSK_IFACE_VERSION;
module_param(iface_version, int, (S_IRUSR | S_IRGRP));
struct casdsk_module *casdsk_module;
uint32_t casdsk_get_version(void)
{
return CASDSK_IFACE_VERSION;
}
EXPORT_SYMBOL(casdsk_get_version);
static int __init casdsk_init_module(void)
{
int result = 0;
casdsk_module = kzalloc(sizeof(*casdsk_module), GFP_KERNEL);
if (!casdsk_module) {
result = -ENOMEM;
goto error_kmalloc;
}
mutex_init(&casdsk_module->lock);
mutex_lock(&casdsk_module->lock);
result = casdsk_init_exp_objs();
if (result)
goto error_init_exp_objs;
result = casdsk_init_disks();
if (result)
goto error_init_disks;
mutex_unlock(&casdsk_module->lock);
printk(KERN_INFO "%s Version %s (%s)::Module loaded successfully\n",
CASDSK_LOGO, CAS_VERSION, CAS_KERNEL);
return result;
error_init_disks:
casdsk_deinit_exp_objs();
error_init_exp_objs:
mutex_unlock(&casdsk_module->lock);
kfree(casdsk_module);
error_kmalloc:
return result;
}
module_init(casdsk_init_module);
static void __exit casdsk_exit_module(void)
{
casdsk_deinit_disks();
casdsk_deinit_exp_objs();
kfree(casdsk_module);
}
module_exit(casdsk_exit_module);

View File

@ -1,11 +1,8 @@
PACKAGE_NAME="<CAS_NAME>-modules"
PACKAGE_VERSION="#MODULE_VERSION#"
BUILT_MODULE_NAME[0]="cas_disk"
BUILT_MODULE_NAME[1]="cas_cache"
BUILT_MODULE_LOCATION[0]="modules/cas_disk/"
BUILT_MODULE_LOCATION[1]="modules/cas_cache/"
BUILT_MODULE_NAME[0]="cas_cache"
BUILT_MODULE_LOCATION[0]="modules/cas_cache/"
DEST_MODULE_LOCATION[0]="/<CAS_MODULES_DIR>"
DEST_MODULE_LOCATION[1]="/<CAS_MODULES_DIR>"
PRE_BUILD="./configure"
MAKE[0]="make -j -C modules/ KERNEL_VERSION=$kernelver"
AUTOINSTALL=yes

View File

@ -1 +1 @@
omit_drivers+=" cas_disk cas_cache"
omit_drivers+=" cas_cache"