From 13d3decfa9104c0a08089908de8b90009f2b117b Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Fri, 2 Sep 2022 21:22:29 +0200 Subject: [PATCH] Consolidate modules Signed-off-by: Robert Baldyga --- casadm/cas_lib.c | 28 ------- casadm/cas_lib.h | 3 +- casadm/cas_main.c | 7 -- modules/Makefile | 5 -- modules/cas_cache/cas_cache.h | 16 +++- modules/{cas_disk => cas_cache}/cas_disk.h | 13 +--- modules/{cas_disk => cas_cache}/debug.h | 0 modules/{cas_disk => cas_cache}/disk.c | 23 +----- modules/{cas_disk => cas_cache}/disk.h | 5 +- modules/{cas_disk => cas_cache}/exp_obj.c | 11 +-- modules/{cas_disk => cas_cache}/exp_obj.h | 0 modules/cas_cache/linux_kernel_version.h | 2 +- modules/cas_cache/main.c | 30 +++++--- modules/cas_disk/Makefile | 11 --- modules/cas_disk/cas_disk_defs.h | 33 -------- modules/cas_disk/main.c | 77 ------------------- .../pckgen.d/deb/debian/CAS_NAME-modules.dkms | 7 +- utils/etc/dracut.conf.d/opencas.conf | 2 +- 18 files changed, 48 insertions(+), 225 deletions(-) rename modules/{cas_disk => cas_cache}/cas_disk.h (95%) rename modules/{cas_disk => cas_cache}/debug.h (100%) rename modules/{cas_disk => cas_cache}/disk.c (88%) rename modules/{cas_disk => cas_cache}/disk.h (95%) rename modules/{cas_disk => cas_cache}/exp_obj.c (97%) rename modules/{cas_disk => cas_cache}/exp_obj.h (100%) delete mode 100644 modules/cas_disk/Makefile delete mode 100644 modules/cas_disk/cas_disk_defs.h delete mode 100644 modules/cas_disk/main.c diff --git a/casadm/cas_lib.c b/casadm/cas_lib.c index e411fa8..33123c4 100644 --- a/casadm/cas_lib.c +++ b/casadm/cas_lib.c @@ -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; diff --git a/casadm/cas_lib.h b/casadm/cas_lib.h index a82f503..8144376 100644 --- a/casadm/cas_lib.h +++ b/casadm/cas_lib.h @@ -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); diff --git a/casadm/cas_main.c b/casadm/cas_main.c index b1410a5..6d8f8b1 100644 --- a/casadm/cas_main.c +++ b/casadm/cas_main.c @@ -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); diff --git a/modules/Makefile b/modules/Makefile index e3d42d8..5c376fb 100644 --- a/modules/Makefile +++ b/modules/Makefile @@ -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) diff --git a/modules/cas_cache/cas_cache.h b/modules/cas_cache/cas_cache.h index cb58c8e..000407d 100644 --- a/modules/cas_cache/cas_cache.h +++ b/modules/cas_cache/cas_cache.h @@ -19,7 +19,7 @@ #include "classifier.h" #include "context.h" #include -#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 { diff --git a/modules/cas_disk/cas_disk.h b/modules/cas_cache/cas_disk.h similarity index 95% rename from modules/cas_disk/cas_disk.h rename to modules/cas_cache/cas_disk.h index 3d17804..ef734a1 100644 --- a/modules/cas_disk/cas_disk.h +++ b/modules/cas_cache/cas_disk.h @@ -7,11 +7,8 @@ #include #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 diff --git a/modules/cas_disk/debug.h b/modules/cas_cache/debug.h similarity index 100% rename from modules/cas_disk/debug.h rename to modules/cas_cache/debug.h diff --git a/modules/cas_disk/disk.c b/modules/cas_cache/disk.c similarity index 88% rename from modules/cas_disk/disk.c rename to modules/cas_cache/disk.c index 12c8986..59f22a2 100644 --- a/modules/cas_disk/disk.c +++ b/modules/cas_cache/disk.c @@ -6,10 +6,10 @@ #include #include #include -#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; } diff --git a/modules/cas_disk/disk.h b/modules/cas_cache/disk.h similarity index 95% rename from modules/cas_disk/disk.h rename to modules/cas_cache/disk.h index 395bf26..3b9f384 100644 --- a/modules/cas_disk/disk.h +++ b/modules/cas_cache/disk.h @@ -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 @@ -10,6 +10,7 @@ #include #include #include +#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; diff --git a/modules/cas_disk/exp_obj.c b/modules/cas_cache/exp_obj.c similarity index 97% rename from modules/cas_disk/exp_obj.c rename to modules/cas_cache/exp_obj.c index 5113656..d681dc4 100644 --- a/modules/cas_disk/exp_obj.c +++ b/modules/cas_cache/exp_obj.c @@ -10,11 +10,12 @@ #include #include -#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); diff --git a/modules/cas_disk/exp_obj.h b/modules/cas_cache/exp_obj.h similarity index 100% rename from modules/cas_disk/exp_obj.h rename to modules/cas_cache/exp_obj.h diff --git a/modules/cas_cache/linux_kernel_version.h b/modules/cas_cache/linux_kernel_version.h index 147421b..6d6dc63 100644 --- a/modules/cas_cache/linux_kernel_version.h +++ b/modules/cas_cache/linux_kernel_version.h @@ -40,7 +40,7 @@ #include #include #include -#include "../cas_disk/exp_obj.h" +#include "exp_obj.h" #include "generated_defines.h" diff --git a/modules/cas_cache/main.c b/modules/cas_cache/main.c index bb0bfa5..a84f757 100644 --- a/modules/cas_cache/main.c +++ b/modules/cas_cache/main.c @@ -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); diff --git a/modules/cas_disk/Makefile b/modules/cas_disk/Makefile deleted file mode 100644 index 41e6d5c..0000000 --- a/modules/cas_disk/Makefile +++ /dev/null @@ -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 diff --git a/modules/cas_disk/cas_disk_defs.h b/modules/cas_disk/cas_disk_defs.h deleted file mode 100644 index e851348..0000000 --- a/modules/cas_disk/cas_disk_defs.h +++ /dev/null @@ -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 -#include -#include -#include -#include -#include - -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 diff --git a/modules/cas_disk/main.c b/modules/cas_disk/main.c deleted file mode 100644 index 7d5e964..0000000 --- a/modules/cas_disk/main.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright(c) 2012-2022 Intel Corporation - * SPDX-License-Identifier: BSD-3-Clause - */ - -#include -#include -#include -#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); diff --git a/tools/pckgen.d/deb/debian/CAS_NAME-modules.dkms b/tools/pckgen.d/deb/debian/CAS_NAME-modules.dkms index efdddfd..e962d6e 100644 --- a/tools/pckgen.d/deb/debian/CAS_NAME-modules.dkms +++ b/tools/pckgen.d/deb/debian/CAS_NAME-modules.dkms @@ -1,11 +1,8 @@ PACKAGE_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]="/" -DEST_MODULE_LOCATION[1]="/" PRE_BUILD="./configure" MAKE[0]="make -j -C modules/ KERNEL_VERSION=$kernelver" AUTOINSTALL=yes diff --git a/utils/etc/dracut.conf.d/opencas.conf b/utils/etc/dracut.conf.d/opencas.conf index 23955bf..87c38dc 100644 --- a/utils/etc/dracut.conf.d/opencas.conf +++ b/utils/etc/dracut.conf.d/opencas.conf @@ -1 +1 @@ -omit_drivers+=" cas_disk cas_cache" +omit_drivers+=" cas_cache"