From 3102856025899fb51c322af24ea940f02a16d822 Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Wed, 24 Aug 2022 14:28:00 +0200 Subject: [PATCH 1/9] Remove unused exported symbols from cas_disk Signed-off-by: Robert Baldyga --- modules/cas_cache/cas_cache.h | 14 +--- modules/cas_cache/main.c | 7 -- modules/cas_disk/cas_disk.h | 51 +----------- modules/cas_disk/disk.c | 151 ---------------------------------- modules/cas_disk/exp_obj.c | 1 - 5 files changed, 6 insertions(+), 218 deletions(-) diff --git a/modules/cas_cache/cas_cache.h b/modules/cas_cache/cas_cache.h index 77f50b4..d51d4eb 100644 --- a/modules/cas_cache/cas_cache.h +++ b/modules/cas_cache/cas_cache.h @@ -1,7 +1,7 @@ /* -* Copyright(c) 2012-2021 Intel Corporation -* SPDX-License-Identifier: BSD-3-Clause -*/ + * Copyright(c) 2012-2022 Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause + */ #ifndef __CAS_CACHE_H__ #define __CAS_CACHE_H__ @@ -67,7 +67,6 @@ extern ocf_ctx_t cas_ctx; extern struct casdsk_functions_mapper casdisk_functions; struct casdsk_functions_mapper { - int (*casdsk_disk_detach)(struct casdsk_disk *dsk); int (*casdsk_exp_obj_destroy)(struct casdsk_disk *dsk); int (*casdsk_exp_obj_create)(struct casdsk_disk *dsk, const char *dev_name, struct module *owner, struct casdsk_exp_obj_ops *ops); @@ -79,16 +78,9 @@ struct casdsk_functions_mapper { void (*casdsk_disk_close)(struct casdsk_disk *dsk); struct casdsk_disk *(*casdsk_disk_claim)(const char *path, void *private); int (*casdsk_exp_obj_unlock)(struct casdsk_disk *dsk); - int (*casdsk_disk_set_pt)(struct casdsk_disk *dsk); - struct gendisk *(*casdsk_disk_get_gendisk)(struct casdsk_disk *dsk); - int (*casdsk_disk_attach) (struct casdsk_disk *dsk, struct module *owner, - struct casdsk_exp_obj_ops *ops); - int (*casdsk_disk_set_attached)(struct casdsk_disk *dsk); int (*casdsk_exp_obj_activate)(struct casdsk_disk *dsk); - bool (*casdsk_exp_obj_activated)(struct casdsk_disk *ds); int (*casdsk_exp_obj_lock)(struct casdsk_disk *dsk); struct casdsk_disk *(*casdsk_disk_open)(const char *path, void *private); - int (*casdsk_disk_clear_pt)(struct casdsk_disk *dsk); struct gendisk *(*casdsk_exp_obj_get_gendisk)(struct casdsk_disk *dsk); }; diff --git a/modules/cas_cache/main.c b/modules/cas_cache/main.c index 900ba34..229662f 100644 --- a/modules/cas_cache/main.c +++ b/modules/cas_cache/main.c @@ -82,7 +82,6 @@ int static cas_casdisk_lookup_funtions(void) #ifdef MODULE_MUTEX_SUPPORTED mutex_lock(&module_mutex); #endif - cas_lookup_symbol(casdsk_disk_detach); cas_lookup_symbol(casdsk_exp_obj_destroy); cas_lookup_symbol(casdsk_exp_obj_create); cas_lookup_symbol(casdsk_exp_obj_free); @@ -93,15 +92,9 @@ int static cas_casdisk_lookup_funtions(void) cas_lookup_symbol(casdsk_disk_close); cas_lookup_symbol(casdsk_disk_claim); cas_lookup_symbol(casdsk_exp_obj_unlock); - cas_lookup_symbol(casdsk_disk_set_pt); - cas_lookup_symbol(casdsk_disk_get_gendisk); - cas_lookup_symbol(casdsk_disk_attach); - cas_lookup_symbol(casdsk_disk_set_attached); cas_lookup_symbol(casdsk_exp_obj_activate); - cas_lookup_symbol(casdsk_exp_obj_activated); cas_lookup_symbol(casdsk_exp_obj_lock); cas_lookup_symbol(casdsk_disk_open); - cas_lookup_symbol(casdsk_disk_clear_pt); cas_lookup_symbol(casdsk_exp_obj_get_gendisk); #ifdef MODULE_MUTEX_SUPPORTED mutex_unlock(&module_mutex); diff --git a/modules/cas_disk/cas_disk.h b/modules/cas_disk/cas_disk.h index 624bc06..3d17804 100644 --- a/modules/cas_disk/cas_disk.h +++ b/modules/cas_disk/cas_disk.h @@ -1,7 +1,7 @@ /* -* Copyright(c) 2012-2021 Intel Corporation -* SPDX-License-Identifier: BSD-3-Clause -*/ + * Copyright(c) 2012-2022 Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause + */ #ifndef __CASDISK_H__ #define __CASDISK_H__ @@ -82,44 +82,6 @@ struct request_queue *casdsk_disk_get_queue(struct casdsk_disk *dsk); */ struct gendisk *casdsk_disk_get_gendisk(struct casdsk_disk *dsk); -/** - * @brief Prepare cas_disk device to switch to pass-through mode - * @param dsk Pointer to casdsk_disk structure related to cas_disk device - * @return 0 if success, errno if failure - */ -int casdsk_disk_set_pt(struct casdsk_disk *dsk); - -/** - * @brief Prepare cas_disk device to switch to attached mode - * @param dsk Pointer to casdsk_disk structure related to cas_disk device - * @return 0 if success, errno if failure - */ -int casdsk_disk_set_attached(struct casdsk_disk *dsk); - -/** - * @brief Revert cas_disk device back to attached mode - * @param dsk Pointer to casdsk_disk structure related to cas_disk device - * @return 0 if success, errno if failure - */ -int casdsk_disk_clear_pt(struct casdsk_disk *dsk); - -/** - * @brief Detach cas from cas_disk device - * @param dsk Pointer to casdsk_disk structure related to cas_disk device - * @return 0 if success, errno if failure - */ -int casdsk_disk_detach(struct casdsk_disk *dsk); - -/** - * @brief Attach cas to cas_disk device - * @param dsk Pointer to casdsk_disk structure related to cas_disk device - * @param owner Pointer to cas module - * @param ops Pointer to structure with callback functions - * @return 0 if success, errno if failure - */ -int casdsk_disk_attach(struct casdsk_disk *dsk, struct module *owner, - struct casdsk_exp_obj_ops *ops); - /** * @brief Create exported object (top device) * @param dsk Pointer to casdsk_disk structure related to cas_disk device @@ -153,13 +115,6 @@ struct gendisk *casdsk_exp_obj_get_gendisk(struct casdsk_disk *dsk); */ int casdsk_exp_obj_activate(struct casdsk_disk *dsk); -/** - * @brief Check if exported object is active - * @param dsk Pointer to casdsk_disk structure related to cas_disk device - * @return true if exported object is active - */ -bool casdsk_exp_obj_activated(struct casdsk_disk *dsk); - /** * @brief Lock exported object * @param dsk Pointer to casdsk_disk structure related to cas_disk device diff --git a/modules/cas_disk/disk.c b/modules/cas_disk/disk.c index aef7887..810e9c4 100644 --- a/modules/cas_disk/disk.c +++ b/modules/cas_disk/disk.c @@ -277,7 +277,6 @@ struct gendisk *casdsk_disk_get_gendisk(struct casdsk_disk *dsk) BUG_ON(!dsk->bd); return dsk->bd->bd_disk; } -EXPORT_SYMBOL(casdsk_disk_get_gendisk); struct request_queue *casdsk_disk_get_queue(struct casdsk_disk *dsk) { @@ -300,153 +299,3 @@ int casdsk_disk_allocate_minors(int count) return minor; } - -static inline int __casdsk_disk_set_pt(struct casdsk_disk *dsk) -{ - BUG_ON(!dsk); - atomic_set(&dsk->mode, CASDSK_MODE_TRANS_TO_PT); - casdsk_exp_obj_prepare_pt(dsk); - return 0; -} - -int casdsk_disk_set_pt(struct casdsk_disk *dsk) -{ - int result; - - CASDSK_DEBUG_DISK_TRACE(dsk); - - if (!dsk->exp_obj) - return 0; - - casdsk_disk_lock(dsk); - result = __casdsk_disk_set_pt(dsk); - casdsk_disk_unlock(dsk); - - return result; -} -EXPORT_SYMBOL(casdsk_disk_set_pt); - -static inline int __casdsk_disk_set_attached(struct casdsk_disk *dsk) -{ - atomic_set(&dsk->mode, CASDSK_MODE_TRANS_TO_ATTACHED); - casdsk_exp_obj_prepare_attached(dsk); - - return 0; -} - -int casdsk_disk_set_attached(struct casdsk_disk *dsk) -{ - int result; - - BUG_ON(!dsk); - CASDSK_DEBUG_DISK_TRACE(dsk); - - if (!dsk->exp_obj) - return 0; - - casdsk_disk_lock(dsk); - result = __casdsk_disk_set_attached(dsk); - casdsk_disk_unlock(dsk); - - return result; -} -EXPORT_SYMBOL(casdsk_disk_set_attached); - -static inline int __casdsk_disk_clear_pt(struct casdsk_disk *dsk) -{ - BUG_ON(atomic_read(&dsk->mode) != CASDSK_MODE_TRANS_TO_PT); - atomic_set(&dsk->mode, CASDSK_MODE_ATTACHED); - return 0; -} - -int casdsk_disk_clear_pt(struct casdsk_disk *dsk) -{ - int result; - - BUG_ON(!dsk); - CASDSK_DEBUG_DISK_TRACE(dsk); - - if (!dsk->exp_obj) - return 0; - - casdsk_disk_lock(dsk); - result = __casdsk_disk_clear_pt(dsk); - casdsk_disk_unlock(dsk); - - return result; -} -EXPORT_SYMBOL(casdsk_disk_clear_pt); - -static inline int __casdsk_disk_detach(struct casdsk_disk *dsk) -{ - int result; - - BUG_ON(atomic_read(&dsk->mode) != CASDSK_MODE_TRANS_TO_PT); - - atomic_set(&dsk->mode, CASDSK_MODE_PT); - - result = casdsk_exp_obj_detach(dsk); - if (result) { - atomic_set(&dsk->mode, CASDSK_MODE_ATTACHED); - return result; - } - - return 0; -} - -int casdsk_disk_detach(struct casdsk_disk *dsk) -{ - int result; - - BUG_ON(!dsk); - CASDSK_DEBUG_DISK_TRACE(dsk); - - if (!dsk->exp_obj) - return 0; - - casdsk_disk_lock(dsk); - result = __casdsk_disk_detach(dsk); - casdsk_disk_unlock(dsk); - - return result; - -} -EXPORT_SYMBOL(casdsk_disk_detach); - -static inline int __casdsk_disk_attach(struct casdsk_disk *dsk, - struct module *owner, struct casdsk_exp_obj_ops *ops) -{ - int result; - - BUG_ON(!ops); - BUG_ON(atomic_read(&dsk->mode) != CASDSK_MODE_TRANS_TO_ATTACHED); - - result = casdsk_exp_obj_attach(dsk, owner, ops); - if (result) { - atomic_set(&dsk->mode, CASDSK_MODE_PT); - return result; - } - - atomic_set(&dsk->mode, CASDSK_MODE_ATTACHED); - - return 0; -} - -int casdsk_disk_attach(struct casdsk_disk *dsk, struct module *owner, - struct casdsk_exp_obj_ops *ops) -{ - int result; - - CASDSK_DEBUG_DISK_TRACE(dsk); - - if (!dsk->exp_obj) - return 0; - - casdsk_disk_lock(dsk); - result = __casdsk_disk_attach(dsk, owner, ops); - casdsk_disk_unlock(dsk); - - return result; - -} -EXPORT_SYMBOL(casdsk_disk_attach); diff --git a/modules/cas_disk/exp_obj.c b/modules/cas_disk/exp_obj.c index 13afd37..525a5f3 100644 --- a/modules/cas_disk/exp_obj.c +++ b/modules/cas_disk/exp_obj.c @@ -714,7 +714,6 @@ bool casdsk_exp_obj_activated(struct casdsk_disk *dsk) BUG_ON(!dsk); return dsk->exp_obj->activated; } -EXPORT_SYMBOL(casdsk_exp_obj_activated); int casdsk_exp_obj_lock(struct casdsk_disk *dsk) { From 10910d1a656861d418dc135bc89a626195a13727 Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Wed, 24 Aug 2022 20:45:43 +0200 Subject: [PATCH 2/9] Remove PT mode from cas_disk Signed-off-by: Robert Baldyga --- modules/cas_disk/cas_disk_defs.h | 8 +- modules/cas_disk/disk.c | 10 +- modules/cas_disk/disk.h | 18 --- modules/cas_disk/exp_obj.c | 199 +------------------------------ modules/cas_disk/exp_obj.h | 8 -- 5 files changed, 6 insertions(+), 237 deletions(-) diff --git a/modules/cas_disk/cas_disk_defs.h b/modules/cas_disk/cas_disk_defs.h index d4c5fd9..a9a38c9 100644 --- a/modules/cas_disk/cas_disk_defs.h +++ b/modules/cas_disk/cas_disk_defs.h @@ -1,7 +1,7 @@ /* -* Copyright(c) 2012-2021 Intel Corporation -* SPDX-License-Identifier: BSD-3-Clause -*/ + * Copyright(c) 2012-2022 Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause + */ #ifndef __CASDISK_DEFS_H__ #define __CASDISK_DEFS_H__ @@ -22,8 +22,6 @@ struct casdsk_module { struct kmem_cache *disk_cache; struct kmem_cache *exp_obj_cache; - struct kmem_cache *pt_io_ctx_cache; - struct kmem_cache *pending_rqs_cache; struct kobject kobj; }; diff --git a/modules/cas_disk/disk.c b/modules/cas_disk/disk.c index 810e9c4..abcfa9b 100644 --- a/modules/cas_disk/disk.c +++ b/modules/cas_disk/disk.c @@ -16,10 +16,7 @@ static const char * const _casdsk_disk_modes[] = { [CASDSK_MODE_UNKNOWN] = "unknown", - [CASDSK_MODE_PT] = "pass-through", [CASDSK_MODE_ATTACHED] = "attached", - [CASDSK_MODE_TRANS_TO_PT] = "attached -> pass-through", - [CASDSK_MODE_TRANS_TO_ATTACHED] = "pass-through -> attached" }; static void _casdsk_disk_release(struct kobject *kobj) @@ -241,12 +238,7 @@ void __exit casdsk_disk_shutdown_all(void) casdsk_disk_lock(dsk); - BUG_ON(!casdsk_disk_is_pt(dsk) && !casdsk_disk_is_unknown(dsk)); - - if (casdsk_disk_is_pt(dsk)) { - atomic_set(&dsk->mode, CASDSK_MODE_TRANS_TO_SHUTDOWN); - casdsk_exp_obj_prepare_shutdown(dsk); - } + BUG_ON(!casdsk_disk_is_unknown(dsk)); atomic_set(&dsk->mode, CASDSK_MODE_SHUTDOWN); diff --git a/modules/cas_disk/disk.h b/modules/cas_disk/disk.h index c0fdc8a..2937e77 100644 --- a/modules/cas_disk/disk.h +++ b/modules/cas_disk/disk.h @@ -14,15 +14,8 @@ struct casdsk_exp_obj; #define CASDSK_MODE_UNKNOWN 0 -#define CASDSK_MODE_PT (1 << 0) #define CASDSK_MODE_ATTACHED (1 << 1) #define CASDSK_MODE_SHUTDOWN (1 << 2) -#define CASDSK_MODE_TRANSITION (1 << 3) -#define CASDSK_MODE_TRANS_TO_ATTACHED (CASDSK_MODE_PT | CASDSK_MODE_TRANSITION) -#define CASDSK_MODE_TRANS_TO_PT (CASDSK_MODE_ATTACHED | \ - CASDSK_MODE_TRANSITION) -#define CASDSK_MODE_TRANS_TO_SHUTDOWN (CASDSK_MODE_SHUTDOWN | \ - CASDSK_MODE_TRANSITION) struct casdsk_disk { uint32_t id; @@ -71,23 +64,12 @@ static inline struct casdsk_disk *casdsk_kobj_to_disk(struct kobject *kobj) return container_of(kobj, struct casdsk_disk, kobj); } -static inline bool casdsk_disk_in_transition(struct casdsk_disk *dsk) -{ - return (atomic_read(&dsk->mode) & CASDSK_MODE_TRANSITION) == - CASDSK_MODE_TRANSITION; -} - static inline bool casdsk_disk_is_attached(struct casdsk_disk *dsk) { return (atomic_read(&dsk->mode) & CASDSK_MODE_ATTACHED) == CASDSK_MODE_ATTACHED; } -static inline bool casdsk_disk_is_pt(struct casdsk_disk *dsk) -{ - return (atomic_read(&dsk->mode) & CASDSK_MODE_PT) == CASDSK_MODE_PT; -} - static inline bool casdsk_disk_is_shutdown(struct casdsk_disk *dsk) { return (atomic_read(&dsk->mode) & CASDSK_MODE_SHUTDOWN) == diff --git a/modules/cas_disk/exp_obj.c b/modules/cas_disk/exp_obj.c index 525a5f3..77b2ece 100644 --- a/modules/cas_disk/exp_obj.c +++ b/modules/cas_disk/exp_obj.c @@ -21,48 +21,20 @@ int __init casdsk_init_exp_objs(void) { - int ncpus; - CASDSK_DEBUG_TRACE(); casdsk_module->exp_obj_cache = kmem_cache_create("casdsk_exp_obj", sizeof(struct casdsk_exp_obj), 0, 0, NULL); if (!casdsk_module->exp_obj_cache) - goto error_exp_obj_cache; - - ncpus = num_online_cpus(); - - casdsk_module->pending_rqs_cache = - kmem_cache_create("casdsk_exp_obj_pending_rqs", - ((sizeof(atomic_t) * ncpus) < KMEM_CACHE_MIN_SIZE) ? - KMEM_CACHE_MIN_SIZE : (sizeof(atomic_t) * ncpus), - 0, 0, NULL); - if (!casdsk_module->pending_rqs_cache) - goto error_pending_rqs_cache; - - casdsk_module->pt_io_ctx_cache = - kmem_cache_create("casdsk_exp_obj_pt_io_ctx", - sizeof(struct casdsk_exp_obj_pt_io_ctx), - 0, 0, NULL); - if (!casdsk_module->pt_io_ctx_cache) - goto error_pt_io_ctx_cache; + return -ENOMEM; return 0; - -error_pt_io_ctx_cache: - kmem_cache_destroy(casdsk_module->pending_rqs_cache); -error_pending_rqs_cache: - kmem_cache_destroy(casdsk_module->exp_obj_cache); -error_exp_obj_cache: - return -ENOMEM; } void casdsk_deinit_exp_objs(void) { CASDSK_DEBUG_TRACE(); - kmem_cache_destroy(casdsk_module->pt_io_ctx_cache); - kmem_cache_destroy(casdsk_module->pending_rqs_cache); kmem_cache_destroy(casdsk_module->exp_obj_cache); } @@ -72,114 +44,26 @@ static inline void _casdsk_exp_obj_handle_bio_att(struct casdsk_disk *dsk, dsk->exp_obj->ops->submit_bio(dsk, bio, dsk->private); } -CAS_DECLARE_BLOCK_CALLBACK(_casdsk_exp_obj_bio_pt_io, struct bio *bio, - unsigned int bytes_done, int error) -{ - struct casdsk_exp_obj_pt_io_ctx *io; - - BUG_ON(!bio); - CAS_BLOCK_CALLBACK_INIT(bio); - - io = bio->bi_private; - BUG_ON(!io); - CAS_BIO_ENDIO(io->bio, CAS_BIO_BISIZE(io->bio), - CAS_BLOCK_CALLBACK_ERROR(bio, CAS_ERRNO_TO_BLK_STS(error))); - - if (atomic_dec_return(&io->dsk->exp_obj->pt_ios) < 0) - BUG(); - - bio_put(bio); - kmem_cache_free(casdsk_module->pt_io_ctx_cache, io); - CAS_BLOCK_CALLBACK_RETURN(); -} - -static inline void _casdsk_exp_obj_handle_bio_pt(struct casdsk_disk *dsk, - struct bio *bio) -{ - struct bio *cloned_bio; - struct casdsk_exp_obj_pt_io_ctx *io; - - io = kmem_cache_zalloc(casdsk_module->pt_io_ctx_cache, GFP_NOIO); - if (!io) { - CAS_BIO_ENDIO(bio, CAS_BIO_BISIZE(bio), CAS_ERRNO_TO_BLK_STS(-ENOMEM)); - return; - } - - cloned_bio = cas_bio_clone(bio, GFP_NOIO); - if (!cloned_bio) { - kmem_cache_free(casdsk_module->pt_io_ctx_cache, io); - CAS_BIO_ENDIO(bio, CAS_BIO_BISIZE(bio), CAS_ERRNO_TO_BLK_STS(-ENOMEM)); - return; - } - - io->bio = bio; - io->dsk = dsk; - - atomic_inc(&dsk->exp_obj->pt_ios); - - CAS_BIO_SET_DEV(cloned_bio, casdsk_disk_get_blkdev(dsk)); - cloned_bio->bi_private = io; - cloned_bio->bi_end_io = CAS_REFER_BLOCK_CALLBACK(_casdsk_exp_obj_bio_pt_io); - cas_submit_bio(CAS_BIO_OP_FLAGS(cloned_bio), cloned_bio); -} - static inline void _casdsk_exp_obj_handle_bio(struct casdsk_disk *dsk, struct bio *bio) { if (likely(casdsk_disk_is_attached(dsk))) _casdsk_exp_obj_handle_bio_att(dsk, bio); - else if (casdsk_disk_is_pt(dsk)) - _casdsk_exp_obj_handle_bio_pt(dsk, bio); else if (casdsk_disk_is_shutdown(dsk)) CAS_BIO_ENDIO(bio, CAS_BIO_BISIZE(bio), CAS_ERRNO_TO_BLK_STS(-EIO)); else BUG(); } -static inline void _casdsk_exp_obj_end_rq(struct casdsk_disk *dsk, unsigned int cpu) -{ - return atomic_dec(&dsk->exp_obj->pending_rqs[cpu]); -} - -static inline unsigned int _casdsk_exp_obj_begin_rq(struct casdsk_disk *dsk) -{ - unsigned int cpu; - - BUG_ON(!dsk); - -retry: - while (unlikely(casdsk_disk_in_transition(dsk))) - io_schedule(); - - cpu = smp_processor_id(); - atomic_inc(&dsk->exp_obj->pending_rqs[cpu]); - - if (unlikely(casdsk_disk_in_transition(dsk))) { - /* - * If we are in transition state, decrement pending rqs counter - * and retry bio processing - */ - _casdsk_exp_obj_end_rq(dsk, cpu); - goto retry; - } - - return cpu; -} - static MAKE_RQ_RET_TYPE _casdsk_exp_obj_submit_bio(struct bio *bio) { struct casdsk_disk *dsk; - unsigned int cpu; BUG_ON(!bio); dsk = CAS_BIO_GET_GENDISK(bio)->private_data; - cpu = _casdsk_exp_obj_begin_rq(dsk); - _casdsk_exp_obj_handle_bio(dsk, bio); - _casdsk_exp_obj_end_rq(dsk, cpu); - KRETURN(0); } @@ -383,7 +267,6 @@ static const struct block_device_operations _casdsk_exp_obj_ops = { static int casdsk_exp_obj_alloc(struct casdsk_disk *dsk) { struct casdsk_exp_obj *exp_obj; - int result; BUG_ON(!dsk); BUG_ON(dsk->exp_obj); @@ -393,24 +276,12 @@ static int casdsk_exp_obj_alloc(struct casdsk_disk *dsk) exp_obj = kmem_cache_zalloc(casdsk_module->exp_obj_cache, GFP_KERNEL); if (!exp_obj) { CASDSK_DEBUG_ERROR("Cannot allocate memory"); - result = -ENOMEM; - goto error_exp_obj_alloc; - } - - exp_obj->pending_rqs = kmem_cache_zalloc(casdsk_module->pending_rqs_cache, - GFP_KERNEL); - if (!exp_obj->pending_rqs) { - result = -ENOMEM; - goto error_pending_rqs_alloc; + return -ENOMEM; } dsk->exp_obj = exp_obj; return 0; -error_pending_rqs_alloc: - kmem_cache_free(casdsk_module->exp_obj_cache, exp_obj); -error_exp_obj_alloc: - return result; } void casdsk_exp_obj_free(struct casdsk_disk *dsk) @@ -431,7 +302,6 @@ EXPORT_SYMBOL(casdsk_exp_obj_free); static void __casdsk_exp_obj_release(struct casdsk_exp_obj *exp_obj) { - kmem_cache_free(casdsk_module->pending_rqs_cache, exp_obj->pending_rqs); kmem_cache_free(casdsk_module->exp_obj_cache, exp_obj); } @@ -784,68 +654,3 @@ int casdsk_exp_obj_destroy(struct casdsk_disk *dsk) } EXPORT_SYMBOL(casdsk_exp_obj_destroy); - -int casdsk_exp_obj_detach(struct casdsk_disk *dsk) -{ - module_put(dsk->exp_obj->owner); - - dsk->exp_obj->owner = NULL; - dsk->exp_obj->ops = NULL; - - return 0; -} - -int casdsk_exp_obj_attach(struct casdsk_disk *dsk, struct module *owner, - struct casdsk_exp_obj_ops *ops) -{ - if (!try_module_get(owner)) { - CASDSK_DEBUG_DISK_ERROR(dsk, "Cannot get reference to module"); - return -ENAVAIL; - } - dsk->exp_obj->owner = owner; - dsk->exp_obj->ops = ops; - - return 0; -} - -static void _casdsk_exp_obj_wait_for_pending_rqs(struct casdsk_disk *dsk) -{ - int i, ncpus; - struct casdsk_exp_obj *exp_obj = dsk->exp_obj; - - ncpus = num_online_cpus(); - for (i = 0; i < ncpus; i++) - while (atomic_read(&exp_obj->pending_rqs[i])) - schedule(); -} - -static void _casdsk_exp_obj_flush_queue(struct casdsk_disk *dsk) -{ - struct casdsk_exp_obj *exp_obj = dsk->exp_obj; - struct request_queue *q = exp_obj->queue; - - blk_mq_run_hw_queues(q, false); - blk_sync_queue(q); -} - -void casdsk_exp_obj_prepare_pt(struct casdsk_disk *dsk) -{ - _casdsk_exp_obj_wait_for_pending_rqs(dsk); - _casdsk_exp_obj_flush_queue(dsk); -} - -void casdsk_exp_obj_prepare_attached(struct casdsk_disk *dsk) -{ - _casdsk_exp_obj_wait_for_pending_rqs(dsk); - - while (atomic_read(&dsk->exp_obj->pt_ios)) - schedule_timeout(msecs_to_jiffies(200)); -} - -void casdsk_exp_obj_prepare_shutdown(struct casdsk_disk *dsk) -{ - _casdsk_exp_obj_wait_for_pending_rqs(dsk); - - while (atomic_read(&dsk->exp_obj->pt_ios)) - schedule_timeout(msecs_to_jiffies(200)); -} diff --git a/modules/cas_disk/exp_obj.h b/modules/cas_disk/exp_obj.h index 6e6720a..0e55912 100644 --- a/modules/cas_disk/exp_obj.h +++ b/modules/cas_disk/exp_obj.h @@ -40,14 +40,6 @@ void casdsk_deinit_exp_objs(void); void casdsk_exp_obj_free(struct casdsk_disk *dsk); -int casdsk_exp_obj_detach(struct casdsk_disk *dsk); -int casdsk_exp_obj_attach(struct casdsk_disk *dsk, struct module *owner, - struct casdsk_exp_obj_ops *ops); -void casdsk_exp_obj_prepare_pt(struct casdsk_disk *dsk); -void casdsk_exp_obj_prepare_attached(struct casdsk_disk *dsk); - -void casdsk_exp_obj_prepare_shutdown(struct casdsk_disk *dsk); - static inline struct casdsk_exp_obj *casdsk_kobj_to_exp_obj(struct kobject *kobj) { return container_of(kobj, struct casdsk_exp_obj, kobj); From 563aeb0058726cdcb2817b5260a9664e931cfe51 Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Wed, 24 Aug 2022 20:53:45 +0200 Subject: [PATCH 3/9] Remove casdsk_disk_shutdown_all() As we no longer have in flight upgrade, all exported objects are guaranteed to be destroyed before cas_cache module is unloaded, so this deinit mechanism is not needed anymore. Signed-off-by: Robert Baldyga --- modules/cas_disk/disk.c | 37 ------------------------------------- modules/cas_disk/disk.h | 8 -------- modules/cas_disk/exp_obj.c | 1 - modules/cas_disk/main.c | 7 +++---- 4 files changed, 3 insertions(+), 50 deletions(-) diff --git a/modules/cas_disk/disk.c b/modules/cas_disk/disk.c index abcfa9b..b8569ed 100644 --- a/modules/cas_disk/disk.c +++ b/modules/cas_disk/disk.c @@ -15,7 +15,6 @@ #define CASDSK_DISK_OPEN_FMODE (FMODE_READ | FMODE_WRITE) static const char * const _casdsk_disk_modes[] = { - [CASDSK_MODE_UNKNOWN] = "unknown", [CASDSK_MODE_ATTACHED] = "attached", }; @@ -131,8 +130,6 @@ struct casdsk_disk *casdsk_disk_open(const char *path, void *private) goto error_kstrdup; } - atomic_set(&dsk->mode, CASDSK_MODE_UNKNOWN); - dsk->bd = open_bdev_exclusive(path, CASDSK_DISK_OPEN_FMODE, dsk); if (IS_ERR(dsk->bd)) { CASDSK_DEBUG_ERROR("Cannot open exclusive"); @@ -222,40 +219,6 @@ void casdsk_disk_close(struct casdsk_disk *dsk) } EXPORT_SYMBOL(casdsk_disk_close); -void __exit casdsk_disk_shutdown_all(void) -{ - struct list_head *item, *n; - struct casdsk_disk *dsk; - - CASDSK_DEBUG_TRACE(); - - mutex_lock(&casdsk_module->lock); - - list_for_each_safe(item, n, &casdsk_module->disk_list) { - dsk = list_entry(item, struct casdsk_disk, list); - - list_del(item); - - casdsk_disk_lock(dsk); - - BUG_ON(!casdsk_disk_is_unknown(dsk)); - - atomic_set(&dsk->mode, CASDSK_MODE_SHUTDOWN); - - if (dsk->exp_obj) { - casdsk_exp_obj_lock(dsk); - casdsk_exp_obj_destroy(dsk); - casdsk_exp_obj_unlock(dsk); - } - - casdsk_disk_unlock(dsk); - __casdsk_disk_close(dsk); - - } - - mutex_unlock(&casdsk_module->lock); -} - struct block_device *casdsk_disk_get_blkdev(struct casdsk_disk *dsk) { BUG_ON(!dsk); diff --git a/modules/cas_disk/disk.h b/modules/cas_disk/disk.h index 2937e77..4c2b658 100644 --- a/modules/cas_disk/disk.h +++ b/modules/cas_disk/disk.h @@ -13,7 +13,6 @@ struct casdsk_exp_obj; -#define CASDSK_MODE_UNKNOWN 0 #define CASDSK_MODE_ATTACHED (1 << 1) #define CASDSK_MODE_SHUTDOWN (1 << 2) @@ -45,8 +44,6 @@ struct casdsk_disk { int __init casdsk_init_disks(void); void casdsk_deinit_disks(void); -void __exit casdsk_disk_shutdown_all(void); - int casdsk_disk_allocate_minors(int count); static inline void casdsk_disk_lock(struct casdsk_disk *dsk) @@ -76,9 +73,4 @@ static inline bool casdsk_disk_is_shutdown(struct casdsk_disk *dsk) CASDSK_MODE_SHUTDOWN; } -static inline bool casdsk_disk_is_unknown(struct casdsk_disk *dsk) -{ - return atomic_read(&dsk->mode) == CASDSK_MODE_UNKNOWN; -} - #endif diff --git a/modules/cas_disk/exp_obj.c b/modules/cas_disk/exp_obj.c index 77b2ece..b59aba7 100644 --- a/modules/cas_disk/exp_obj.c +++ b/modules/cas_disk/exp_obj.c @@ -647,7 +647,6 @@ int casdsk_exp_obj_destroy(struct casdsk_disk *dsk) blk_mq_free_tag_set(&dsk->tag_set); - atomic_set(&dsk->mode, CASDSK_MODE_UNKNOWN); put_disk(exp_obj->gd); return 0; diff --git a/modules/cas_disk/main.c b/modules/cas_disk/main.c index 8711ffa..48ff31b 100644 --- a/modules/cas_disk/main.c +++ b/modules/cas_disk/main.c @@ -1,7 +1,7 @@ /* -* Copyright(c) 2012-2021 Intel Corporation -* SPDX-License-Identifier: BSD-3-Clause -*/ + * Copyright(c) 2012-2022 Intel Corporation + * SPDX-License-Identifier: BSD-3-Clause + */ #include #include @@ -112,7 +112,6 @@ static void __exit casdsk_deinit_kobjects(void) static void __exit casdsk_exit_module(void) { - casdsk_disk_shutdown_all(); casdsk_deinit_disks(); casdsk_deinit_exp_objs(); casdsk_deinit_kobjects(); From 16576c7a9562f045618b6cb856ee40fbd4c98427 Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Wed, 24 Aug 2022 21:06:46 +0200 Subject: [PATCH 4/9] Remove "mode" sysfs property of casdsk_disk After removal of PT mode this property is meaningless. Signed-off-by: Robert Baldyga --- modules/cas_disk/Makefile | 3 +-- modules/cas_disk/disk.c | 25 ------------------------- modules/cas_disk/main.c | 1 - modules/cas_disk/sysfs.c | 35 ----------------------------------- modules/cas_disk/sysfs.h | 21 --------------------- 5 files changed, 1 insertion(+), 84 deletions(-) delete mode 100644 modules/cas_disk/sysfs.c delete mode 100644 modules/cas_disk/sysfs.h diff --git a/modules/cas_disk/Makefile b/modules/cas_disk/Makefile index 6c5f05d..41e6d5c 100644 --- a/modules/cas_disk/Makefile +++ b/modules/cas_disk/Makefile @@ -1,5 +1,5 @@ # -# Copyright(c) 2012-2021 Intel Corporation +# Copyright(c) 2012-2022 Intel Corporation # SPDX-License-Identifier: BSD-3-Clause # include $(M)/config.mk @@ -9,4 +9,3 @@ obj-m := cas_disk.o cas_disk-objs = main.o cas_disk-objs += disk.o cas_disk-objs += exp_obj.o -cas_disk-objs += sysfs.o diff --git a/modules/cas_disk/disk.c b/modules/cas_disk/disk.c index b8569ed..0ba35ba 100644 --- a/modules/cas_disk/disk.c +++ b/modules/cas_disk/disk.c @@ -10,14 +10,9 @@ #include "cas_cache.h" #include "disk.h" #include "exp_obj.h" -#include "sysfs.h" #define CASDSK_DISK_OPEN_FMODE (FMODE_READ | FMODE_WRITE) -static const char * const _casdsk_disk_modes[] = { - [CASDSK_MODE_ATTACHED] = "attached", -}; - static void _casdsk_disk_release(struct kobject *kobj) { struct casdsk_disk *dsk; @@ -34,28 +29,8 @@ static void _casdsk_disk_release(struct kobject *kobj) kmem_cache_free(casdsk_module->disk_cache, dsk); } -static ssize_t _casdsk_disk_mode_show(struct kobject *kobj, char *page) -{ - struct casdsk_disk *dsk = casdsk_kobj_to_disk(kobj); - - CASDSK_DEBUG_DISK_TRACE(dsk); - - return scnprintf(page, PAGE_SIZE, "%s", - _casdsk_disk_modes[atomic_read(&dsk->mode)]); -} - -static struct casdsk_attribute _casdsk_disk_mode_attr = - __ATTR(mode, S_IRUGO, _casdsk_disk_mode_show, NULL); - -static struct attribute *_casdsk_disk_attrs[] = { - &_casdsk_disk_mode_attr.attr, - NULL -}; - static struct kobj_type casdsk_disk_ktype = { .release = _casdsk_disk_release, - .sysfs_ops = &casdsk_sysfs_ops, - .default_attrs = _casdsk_disk_attrs }; int __init casdsk_init_disks(void) diff --git a/modules/cas_disk/main.c b/modules/cas_disk/main.c index 48ff31b..85a4afa 100644 --- a/modules/cas_disk/main.c +++ b/modules/cas_disk/main.c @@ -10,7 +10,6 @@ #include "cas_disk.h" #include "disk.h" #include "exp_obj.h" -#include "sysfs.h" /* Layer information. */ MODULE_AUTHOR("Intel(R) Corporation"); diff --git a/modules/cas_disk/sysfs.c b/modules/cas_disk/sysfs.c deleted file mode 100644 index c6ce430..0000000 --- a/modules/cas_disk/sysfs.c +++ /dev/null @@ -1,35 +0,0 @@ -/* -* Copyright(c) 2012-2021 Intel Corporation -* SPDX-License-Identifier: BSD-3-Clause -*/ -#include "cas_disk_defs.h" -#include "sysfs.h" - -static ssize_t _casdsk_sysfs_show(struct kobject *kobj, struct attribute *attr, - char *page) -{ - struct casdsk_attribute *casdsk_attr = - container_of(attr, struct casdsk_attribute, attr); - - if (!casdsk_attr->show) - return -EIO; - - return casdsk_attr->show(kobj, page); -} - -static ssize_t _casdsk_sysfs_store(struct kobject *kobj, struct attribute *attr, - const char *buf, size_t len) -{ - struct casdsk_attribute *casdsk_attr = - container_of(attr, struct casdsk_attribute, attr); - - if (!casdsk_attr->store) - return -EIO; - - return casdsk_attr->store(kobj, buf, len); -} - -const struct sysfs_ops casdsk_sysfs_ops = { - .show = _casdsk_sysfs_show, - .store = _casdsk_sysfs_store -}; diff --git a/modules/cas_disk/sysfs.h b/modules/cas_disk/sysfs.h deleted file mode 100644 index b2ae82c..0000000 --- a/modules/cas_disk/sysfs.h +++ /dev/null @@ -1,21 +0,0 @@ -/* -* Copyright(c) 2012-2021 Intel Corporation -* SPDX-License-Identifier: BSD-3-Clause -*/ -#ifndef __CASDISK_SYSFS_H__ -#define __CASDISK_SYSFS_H__ - -#include -#include - -struct casdsk_disk; - -struct casdsk_attribute { - struct attribute attr; - ssize_t (*show)(struct kobject *kobj, char *page); - ssize_t (*store)(struct kobject *kobj, const char *buf, size_t len); -}; - -extern const struct sysfs_ops casdsk_sysfs_ops; - -#endif From 8eb512a743fa9d8d95b7de3a11844ccf9f9f4c34 Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Wed, 24 Aug 2022 21:14:21 +0200 Subject: [PATCH 5/9] Remove cas_disk symbol lookup Signed-off-by: Robert Baldyga --- modules/cas_cache/cas_cache.h | 20 ------ modules/cas_cache/main.c | 69 +------------------ .../cas_cache/volume/vol_block_dev_bottom.c | 8 +-- modules/cas_cache/volume/vol_block_dev_top.c | 48 ++++++------- 4 files changed, 29 insertions(+), 116 deletions(-) diff --git a/modules/cas_cache/cas_cache.h b/modules/cas_cache/cas_cache.h index d51d4eb..cb58c8e 100644 --- a/modules/cas_cache/cas_cache.h +++ b/modules/cas_cache/cas_cache.h @@ -64,26 +64,6 @@ struct cache_priv { extern ocf_ctx_t cas_ctx; -extern struct casdsk_functions_mapper casdisk_functions; - -struct casdsk_functions_mapper { - int (*casdsk_exp_obj_destroy)(struct casdsk_disk *dsk); - int (*casdsk_exp_obj_create)(struct casdsk_disk *dsk, const char *dev_name, - struct module *owner, struct casdsk_exp_obj_ops *ops); - void(*casdsk_exp_obj_free)(struct casdsk_disk *dsk); - struct request_queue *(*casdsk_disk_get_queue)(struct casdsk_disk *dsk); - struct block_device *(*casdsk_disk_get_blkdev)(struct casdsk_disk *dsk); - struct request_queue *(*casdsk_exp_obj_get_queue)(struct casdsk_disk *dsk); - uint32_t (*casdsk_get_version)(void); - void (*casdsk_disk_close)(struct casdsk_disk *dsk); - struct casdsk_disk *(*casdsk_disk_claim)(const char *path, void *private); - int (*casdsk_exp_obj_unlock)(struct casdsk_disk *dsk); - int (*casdsk_exp_obj_activate)(struct casdsk_disk *dsk); - int (*casdsk_exp_obj_lock)(struct casdsk_disk *dsk); - struct casdsk_disk *(*casdsk_disk_open)(const char *path, void *private); - struct gendisk *(*casdsk_exp_obj_get_gendisk)(struct casdsk_disk *dsk); -}; - static inline void cache_name_from_id(char *name, uint16_t id) { int result; diff --git a/modules/cas_cache/main.c b/modules/cas_cache/main.c index 229662f..bb0bfa5 100644 --- a/modules/cas_cache/main.c +++ b/modules/cas_cache/main.c @@ -40,79 +40,12 @@ MODULE_PARM_DESC(seq_cut_off_mb, /* globals */ ocf_ctx_t cas_ctx; -struct casdsk_functions_mapper casdisk_functions; - -#if defined(SYMBOL_LOOKUP_SUPPORTED) && defined(MODULE_MUTEX_SUPPORTED) - -struct exported_symbol { - char *name; - unsigned long addr; -}; - -int static cas_find_symbol(void *data, const char *namebuf, - struct module *module, unsigned long kallsyms_addresses) -{ - struct exported_symbol *sym = data; - - if (strcmp(namebuf, sym->name) == 0) - sym->addr = kallsyms_addresses; - return 0; -} - -#define cas_lookup_symbol(f) ({ \ - struct exported_symbol sym = {#f, 0}; \ - kallsyms_on_each_symbol(&cas_find_symbol, &sym); \ - casdisk_functions.f = (void *)sym.addr; \ - if (!casdisk_functions.f) \ - return -EINVAL; \ -}) - -#else - -#include "../cas_disk/cas_disk.h" -#include "../cas_disk/exp_obj.h" -#define cas_lookup_symbol(f) ({ \ - casdisk_functions.f = (void *)f; \ -}) - -#endif - -int static cas_casdisk_lookup_funtions(void) -{ -#ifdef MODULE_MUTEX_SUPPORTED - mutex_lock(&module_mutex); -#endif - cas_lookup_symbol(casdsk_exp_obj_destroy); - cas_lookup_symbol(casdsk_exp_obj_create); - cas_lookup_symbol(casdsk_exp_obj_free); - cas_lookup_symbol(casdsk_disk_get_queue); - cas_lookup_symbol(casdsk_disk_get_blkdev); - cas_lookup_symbol(casdsk_exp_obj_get_queue); - cas_lookup_symbol(casdsk_get_version); - cas_lookup_symbol(casdsk_disk_close); - cas_lookup_symbol(casdsk_disk_claim); - cas_lookup_symbol(casdsk_exp_obj_unlock); - cas_lookup_symbol(casdsk_exp_obj_activate); - cas_lookup_symbol(casdsk_exp_obj_lock); - cas_lookup_symbol(casdsk_disk_open); - cas_lookup_symbol(casdsk_exp_obj_get_gendisk); -#ifdef MODULE_MUTEX_SUPPORTED - mutex_unlock(&module_mutex); -#endif - return 0; -} static int __init cas_init_module(void) { int result = 0; - result = cas_casdisk_lookup_funtions(); - if (result) { - printk(KERN_ERR OCF_PREFIX_SHORT - "Could not find cas_disk functions.\n"); - return result; - } - if (casdisk_functions.casdsk_get_version() != CASDSK_IFACE_VERSION) { + if (casdsk_get_version() != CASDSK_IFACE_VERSION) { printk(KERN_ERR OCF_PREFIX_SHORT "Incompatible cas_disk module\n"); return -EINVAL; diff --git a/modules/cas_cache/volume/vol_block_dev_bottom.c b/modules/cas_cache/volume/vol_block_dev_bottom.c index d032c82..ead32dc 100644 --- a/modules/cas_cache/volume/vol_block_dev_bottom.c +++ b/modules/cas_cache/volume/vol_block_dev_bottom.c @@ -1,5 +1,5 @@ /* -* Copyright(c) 2012-2021 Intel Corporation +* Copyright(c) 2012-2022 Intel Corporation * SPDX-License-Identifier: BSD-3-Clause */ @@ -35,7 +35,7 @@ int block_dev_open_object(ocf_volume_t vol, void *volume_params) return 0; } - dsk = casdisk_functions.casdsk_disk_open(uuid->data, NULL); + dsk = casdsk_disk_open(uuid->data, NULL); if (IS_ERR_OR_NULL(dsk)) { int error = PTR_ERR(dsk) ?: -EINVAL; @@ -46,7 +46,7 @@ int block_dev_open_object(ocf_volume_t vol, void *volume_params) } bdobj->dsk = dsk; - bdobj->btm_bd = casdisk_functions.casdsk_disk_get_blkdev(dsk); + bdobj->btm_bd = casdsk_disk_get_blkdev(dsk); return 0; } @@ -58,7 +58,7 @@ void block_dev_close_object(ocf_volume_t vol) if (bdobj->opened_by_bdev) return; - casdisk_functions.casdsk_disk_close(bdobj->dsk); + casdsk_disk_close(bdobj->dsk); } unsigned int block_dev_get_max_io_size(ocf_volume_t vol) diff --git a/modules/cas_cache/volume/vol_block_dev_top.c b/modules/cas_cache/volume/vol_block_dev_top.c index a9bd862..8534652 100644 --- a/modules/cas_cache/volume/vol_block_dev_top.c +++ b/modules/cas_cache/volume/vol_block_dev_top.c @@ -55,9 +55,9 @@ void blkdev_set_exported_object_flush_fua(ocf_core_t core) bd_core_vol = bd_object(core_vol); bd_cache_vol = bd_object(cache_vol); - core_q = casdisk_functions.casdsk_disk_get_queue(bd_core_vol->dsk); - exp_q = casdisk_functions.casdsk_exp_obj_get_queue(bd_core_vol->dsk); - cache_q = casdisk_functions.casdsk_disk_get_queue(bd_cache_vol->dsk); + core_q = casdsk_disk_get_queue(bd_core_vol->dsk); + exp_q = casdsk_exp_obj_get_queue(bd_core_vol->dsk); + cache_q = casdsk_disk_get_queue(bd_cache_vol->dsk); flush = (CAS_CHECK_QUEUE_FLUSH(core_q) || CAS_CHECK_QUEUE_FLUSH(cache_q)); fua = (CAS_CHECK_QUEUE_FUA(core_q) || CAS_CHECK_QUEUE_FUA(cache_q)); @@ -118,19 +118,19 @@ static int blkdev_core_set_geometry(struct casdsk_disk *dsk, void *private) bd_cache_vol = bd_object(cache_vol); path = ocf_volume_get_uuid(core_vol)->data; - core_bd = casdisk_functions.casdsk_disk_get_blkdev(dsk); + core_bd = casdsk_disk_get_blkdev(dsk); BUG_ON(!core_bd); - cache_bd = casdisk_functions.casdsk_disk_get_blkdev(bd_cache_vol->dsk); + cache_bd = casdsk_disk_get_blkdev(bd_cache_vol->dsk); BUG_ON(!cache_bd); core_q = cas_bdev_whole(core_bd)->bd_disk->queue; cache_q = cache_bd->bd_disk->queue; - exp_q = casdisk_functions.casdsk_exp_obj_get_queue(dsk); + exp_q = casdsk_exp_obj_get_queue(dsk); sectors = ocf_volume_get_length(core_vol) >> SECTOR_SHIFT; - set_capacity(casdisk_functions.casdsk_exp_obj_get_gendisk(dsk), sectors); + set_capacity(casdsk_exp_obj_get_gendisk(dsk), sectors); cas_copy_queue_limits(exp_q, cache_q, core_q); @@ -473,15 +473,15 @@ static int blkdev_cache_set_geometry(struct casdsk_disk *dsk, void *private) bvol = bd_object(volume); - bd = casdisk_functions.casdsk_disk_get_blkdev(bvol->dsk); + bd = casdsk_disk_get_blkdev(bvol->dsk); BUG_ON(!bd); cache_q = bd->bd_disk->queue; - exp_q = casdisk_functions.casdsk_exp_obj_get_queue(dsk); + exp_q = casdsk_exp_obj_get_queue(dsk); sectors = ocf_volume_get_length(volume) >> SECTOR_SHIFT; - set_capacity(casdisk_functions.casdsk_exp_obj_get_gendisk(dsk), sectors); + set_capacity(casdsk_exp_obj_get_gendisk(dsk), sectors); cas_copy_queue_limits(exp_q, cache_q, cache_q); @@ -538,7 +538,7 @@ static int kcas_volume_create_exported_object(ocf_volume_t volume, struct casdsk_disk *dsk; int result; - dsk = casdisk_functions.casdsk_disk_claim(uuid->data, priv); + dsk = casdsk_disk_claim(uuid->data, priv); if (dsk != bvol->dsk) { result = -KCAS_ERR_SYSTEM; goto end; @@ -552,7 +552,7 @@ static int kcas_volume_create_exported_object(ocf_volume_t volume, goto end; } - result = casdisk_functions.casdsk_exp_obj_create(dsk, name, + result = casdsk_exp_obj_create(dsk, name, THIS_MODULE, ops); if (result) { destroy_workqueue(bvol->expobj_wq); @@ -582,13 +582,13 @@ static int kcas_volume_destroy_exported_object(ocf_volume_t volume) if (!bvol->expobj_valid) return 0; - result = casdisk_functions.casdsk_exp_obj_lock(bvol->dsk); + result = casdsk_exp_obj_lock(bvol->dsk); if (result == -EBUSY) return -KCAS_ERR_DEV_PENDING; else if (result) return result; - result = casdisk_functions.casdsk_exp_obj_destroy(bvol->dsk); + result = casdsk_exp_obj_destroy(bvol->dsk); if (result) goto out; @@ -596,7 +596,7 @@ static int kcas_volume_destroy_exported_object(ocf_volume_t volume) destroy_workqueue(bvol->expobj_wq); out: - casdisk_functions.casdsk_exp_obj_unlock(bvol->dsk); + casdsk_exp_obj_unlock(bvol->dsk); return result; } @@ -610,7 +610,7 @@ static int kcas_volume_activate_exported_object(ocf_volume_t volume, struct bd_object *bvol = bd_object(volume); int result; - result = casdisk_functions.casdsk_exp_obj_activate(bvol->dsk); + result = casdsk_exp_obj_activate(bvol->dsk); if (result == -EEXIST) result = -KCAS_ERR_FILE_EXISTS; @@ -705,15 +705,15 @@ static int kcas_core_lock_exported_object(ocf_core_t core, void *cntx) if (!bvol->expobj_valid) return 0; - result = casdisk_functions.casdsk_exp_obj_lock(bvol->dsk); + result = casdsk_exp_obj_lock(bvol->dsk); if (-EBUSY == result) { printk(KERN_WARNING "Stopping %s failed - device in use\n", - casdisk_functions.casdsk_exp_obj_get_gendisk(bvol->dsk)->disk_name); + casdsk_exp_obj_get_gendisk(bvol->dsk)->disk_name); return -KCAS_ERR_DEV_PENDING; } else if (result) { printk(KERN_WARNING "Stopping %s failed - device unavailable\n", - casdisk_functions.casdsk_exp_obj_get_gendisk(bvol->dsk)->disk_name); + casdsk_exp_obj_get_gendisk(bvol->dsk)->disk_name); return -OCF_ERR_CORE_NOT_AVAIL; } @@ -728,7 +728,7 @@ static int kcas_core_unlock_exported_object(ocf_core_t core, void *cntx) struct bd_object *bvol = bd_object(ocf_core_get_volume(core)); if (bvol->expobj_locked) { - casdisk_functions.casdsk_exp_obj_unlock(bvol->dsk); + casdsk_exp_obj_unlock(bvol->dsk); bvol->expobj_locked = false; } @@ -745,9 +745,9 @@ static int kcas_core_stop_exported_object(ocf_core_t core, void *cntx) BUG_ON(!bvol->expobj_locked); printk(KERN_INFO "Stopping device %s\n", - casdisk_functions.casdsk_exp_obj_get_gendisk(bvol->dsk)->disk_name); + casdsk_exp_obj_get_gendisk(bvol->dsk)->disk_name); - ret = casdisk_functions.casdsk_exp_obj_destroy(bvol->dsk); + ret = casdsk_exp_obj_destroy(bvol->dsk); if (!ret) { bvol->expobj_valid = false; destroy_workqueue(bvol->expobj_wq); @@ -755,7 +755,7 @@ static int kcas_core_stop_exported_object(ocf_core_t core, void *cntx) } if (bvol->expobj_locked) { - casdisk_functions.casdsk_exp_obj_unlock(bvol->dsk); + casdsk_exp_obj_unlock(bvol->dsk); bvol->expobj_locked = false; } @@ -766,7 +766,7 @@ static int kcas_core_free_exported_object(ocf_core_t core, void *cntx) { struct bd_object *bvol = bd_object(ocf_core_get_volume(core)); - casdisk_functions.casdsk_exp_obj_free(bvol->dsk); + casdsk_exp_obj_free(bvol->dsk); return 0; } From 4881e6c0f0422fedadb0ddb085cdaa58feb257b1 Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Wed, 24 Aug 2022 21:26:00 +0200 Subject: [PATCH 6/9] Remove casdsk_disk mode The mode is no longer needed. Remove remaining dead code. Signed-off-by: Robert Baldyga --- modules/cas_disk/disk.h | 16 ---------------- modules/cas_disk/exp_obj.c | 14 +------------- 2 files changed, 1 insertion(+), 29 deletions(-) diff --git a/modules/cas_disk/disk.h b/modules/cas_disk/disk.h index 4c2b658..395bf26 100644 --- a/modules/cas_disk/disk.h +++ b/modules/cas_disk/disk.h @@ -13,12 +13,8 @@ struct casdsk_exp_obj; -#define CASDSK_MODE_ATTACHED (1 << 1) -#define CASDSK_MODE_SHUTDOWN (1 << 2) - struct casdsk_disk { uint32_t id; - atomic_t mode; char *path; struct mutex lock; @@ -61,16 +57,4 @@ static inline struct casdsk_disk *casdsk_kobj_to_disk(struct kobject *kobj) return container_of(kobj, struct casdsk_disk, kobj); } -static inline bool casdsk_disk_is_attached(struct casdsk_disk *dsk) -{ - return (atomic_read(&dsk->mode) & CASDSK_MODE_ATTACHED) == - CASDSK_MODE_ATTACHED; -} - -static inline bool casdsk_disk_is_shutdown(struct casdsk_disk *dsk) -{ - return (atomic_read(&dsk->mode) & CASDSK_MODE_SHUTDOWN) == - CASDSK_MODE_SHUTDOWN; -} - #endif diff --git a/modules/cas_disk/exp_obj.c b/modules/cas_disk/exp_obj.c index b59aba7..37605d0 100644 --- a/modules/cas_disk/exp_obj.c +++ b/modules/cas_disk/exp_obj.c @@ -38,21 +38,10 @@ void casdsk_deinit_exp_objs(void) kmem_cache_destroy(casdsk_module->exp_obj_cache); } -static inline void _casdsk_exp_obj_handle_bio_att(struct casdsk_disk *dsk, - struct bio *bio) -{ - dsk->exp_obj->ops->submit_bio(dsk, bio, dsk->private); -} - static inline void _casdsk_exp_obj_handle_bio(struct casdsk_disk *dsk, struct bio *bio) { - if (likely(casdsk_disk_is_attached(dsk))) - _casdsk_exp_obj_handle_bio_att(dsk, bio); - else if (casdsk_disk_is_shutdown(dsk)) - CAS_BIO_ENDIO(bio, CAS_BIO_BISIZE(bio), CAS_ERRNO_TO_BLK_STS(-EIO)); - else - BUG(); + dsk->exp_obj->ops->submit_bio(dsk, bio, dsk->private); } static MAKE_RQ_RET_TYPE _casdsk_exp_obj_submit_bio(struct bio *bio) @@ -553,7 +542,6 @@ int casdsk_exp_obj_activate(struct casdsk_disk *dsk) kfree(path); dsk->exp_obj->activated = true; - atomic_set(&dsk->mode, CASDSK_MODE_ATTACHED); add_disk(dsk->exp_obj->gd); result = bd_claim_by_disk(dsk->bd, dsk, dsk->exp_obj->gd); From f70789e1273da9a43574914f1e5f0f1ce0089fee Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Wed, 31 Aug 2022 17:55:53 +0200 Subject: [PATCH 7/9] Remove cas_disk kobject Signed-off-by: Robert Baldyga --- modules/cas_disk/main.c | 45 +---------------------------------------- 1 file changed, 1 insertion(+), 44 deletions(-) diff --git a/modules/cas_disk/main.c b/modules/cas_disk/main.c index 85a4afa..d187a08 100644 --- a/modules/cas_disk/main.c +++ b/modules/cas_disk/main.c @@ -27,38 +27,6 @@ uint32_t casdsk_get_version(void) } EXPORT_SYMBOL(casdsk_get_version); -static void _casdsk_module_release(struct kobject *kobj) -{ - struct casdsk_module *mod; - - CASDSK_DEBUG_TRACE(); - - BUG_ON(!kobj); - - mod = container_of(kobj, struct casdsk_module, kobj); - BUG_ON(!mod); - - kfree(mod); -} - -static struct kobj_type _casdsk_module_ktype = { - .release = _casdsk_module_release, -}; - -static int __init casdsk_init_kobjects(void) -{ - int result = 0; - - CASDSK_DEBUG_TRACE(); - - kobject_init(&casdsk_module->kobj, &_casdsk_module_ktype); - result = kobject_add(&casdsk_module->kobj, kernel_kobj, "cas_disk"); - if (result) - CASDSK_DEBUG_ERROR("Cannot register kobject"); - - return result; -} - static int __init casdsk_init_module(void) { int result = 0; @@ -81,10 +49,6 @@ static int __init casdsk_init_module(void) if (result) goto error_init_disks; - result = casdsk_init_kobjects(); - if (result) - goto error_kobjects; - mutex_unlock(&casdsk_module->lock); printk(CASDSK_KERN_INFO "%s Version %s (%s)::Module loaded successfully\n", @@ -92,8 +56,6 @@ static int __init casdsk_init_module(void) return result; -error_kobjects: - casdsk_deinit_disks(); error_init_disks: casdsk_deinit_exp_objs(); error_init_exp_objs: @@ -104,15 +66,10 @@ error_kmalloc: } module_init(casdsk_init_module); -static void __exit casdsk_deinit_kobjects(void) -{ - kobject_put(&casdsk_module->kobj); -} - static void __exit casdsk_exit_module(void) { casdsk_deinit_disks(); casdsk_deinit_exp_objs(); - casdsk_deinit_kobjects(); + kfree(casdsk_module); } module_exit(casdsk_exit_module); From 320c998a1dae27667f5eb4f8d8099805bb7b0f31 Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Thu, 1 Sep 2022 08:37:08 +0200 Subject: [PATCH 8/9] Remove cas_disk message prefixes Signed-off-by: Robert Baldyga --- modules/cas_disk/cas_disk_defs.h | 12 ------------ modules/cas_disk/debug.h | 12 ++++++------ modules/cas_disk/exp_obj.c | 8 ++++---- modules/cas_disk/main.c | 2 +- 4 files changed, 11 insertions(+), 23 deletions(-) diff --git a/modules/cas_disk/cas_disk_defs.h b/modules/cas_disk/cas_disk_defs.h index a9a38c9..4cc2b0c 100644 --- a/modules/cas_disk/cas_disk_defs.h +++ b/modules/cas_disk/cas_disk_defs.h @@ -28,19 +28,7 @@ struct casdsk_module { extern struct casdsk_module *casdsk_module; -/* prefixes for messages */ #define CASDSK_LOGO "CAS Disk" -#define CASDSK_PREFIX_SHORT "[" CASDSK_LOGO "] " -#define CASDSK_PREFIX_LONG "Cache Acceleration Software Linux" - -#define CASDSK_KERN_EMERG KERN_EMERG""CASDSK_PREFIX_SHORT -#define CASDSK_KERN_ALERT KERN_ALERT""CASDSK_PREFIX_SHORT -#define CASDSK_KERN_CRIT KERN_CRIT""CASDSK_PREFIX_SHORT -#define CASDSK_KERN_ERR KERN_ERR""CASDSK_PREFIX_SHORT -#define CASDSK_KERN_WARNING KERN_WARNING""CASDSK_PREFIX_SHORT -#define CASDSK_KERN_NOTICE KERN_NOTICE""CASDSK_PREFIX_SHORT -#define CASDSK_KERN_INFO KERN_INFO""CASDSK_PREFIX_SHORT -#define CASDSK_KERN_DEBUG KERN_DEBUG""CASDSK_PREFIX_SHORT static inline struct block_device *open_bdev_exclusive(const char *path, fmode_t mode, diff --git a/modules/cas_disk/debug.h b/modules/cas_disk/debug.h index 8b31df4..61825f9 100644 --- a/modules/cas_disk/debug.h +++ b/modules/cas_disk/debug.h @@ -1,5 +1,5 @@ /* -* Copyright(c) 2012-2021 Intel Corporation +* Copyright(c) 2012-2022 Intel Corporation * SPDX-License-Identifier: BSD-3-Clause */ #ifndef __CASDISK_DEBUG_H__ @@ -9,20 +9,20 @@ #ifdef CASDSK_DEBUG #define CASDSK_DEBUG_TRACE() \ - printk(CASDSK_KERN_INFO "%s\n", __func__) + printk(KERN_INFO "%s\n", __func__) #define CASDSK_DEBUG_DISK_TRACE(dsk) \ - printk(CASDSK_KERN_INFO "[%u] %s\n", dsk->id, __func__) + printk(KERN_INFO "[%u] %s\n", dsk->id, __func__) #define CASDSK_DEBUG_MSG(msg) \ - printk(CASDSK_KERN_INFO "%s - %s\n", __func__, msg) + printk(KERN_INFO "%s - %s\n", __func__, msg) #define CASDSK_DEBUG_PARAM(format, ...) \ - printk(CASDSK_KERN_INFO "%s - "format"\n", \ + printk(KERN_INFO "%s - "format"\n", \ __func__, ##__VA_ARGS__) #define CASDSK_DEBUG_DISK(dsk, format, ...) \ - printk(CASDSK_KERN_INFO "[%u] %s - "format"\n", \ + printk(KERN_INFO "[%u] %s - "format"\n", \ dsk->id, \ __func__, ##__VA_ARGS__) diff --git a/modules/cas_disk/exp_obj.c b/modules/cas_disk/exp_obj.c index 37605d0..2d44c54 100644 --- a/modules/cas_disk/exp_obj.c +++ b/modules/cas_disk/exp_obj.c @@ -113,10 +113,10 @@ static int _casdsk_del_partitions(struct casdsk_disk *dsk) } result = cas_vfs_ioctl(bd_file, BLKPG, usr_barg); if (result == 0) { - printk(CASDSK_KERN_INFO "Partition %d on %s hidden\n", + printk(KERN_INFO "Partition %d on %s hidden\n", part_no, bd->bd_disk->disk_name); } else { - printk(CASDSK_KERN_ERR "Error(%d) hiding the partition %d on %s\n", + printk(KERN_ERR "Error(%d) hiding the partition %d on %s\n", result, part_no, bd->bd_disk->disk_name); break; } @@ -148,7 +148,7 @@ static int _casdsk_exp_obj_hide_parts(struct casdsk_disk *dsk) if (disk_max_parts(dsk->bd->bd_disk) > 1) { if (_casdsk_del_partitions(dsk)) { - printk(CASDSK_KERN_ERR "Error deleting a partition on thedevice %s\n", + printk(KERN_ERR "Error deleting a partition on thedevice %s\n", gdsk->disk_name); /* Try restore previous partitions by rescaning */ @@ -534,7 +534,7 @@ int casdsk_exp_obj_activate(struct casdsk_disk *dsk) snprintf(path, PATH_MAX, "/dev/%s", dsk->exp_obj->dev_name); if (_casdsk_exp_obj_exists(path)) { - printk(CASDSK_KERN_ERR "Could not activate exported object, " + printk(KERN_ERR "Could not activate exported object, " "because file %s exists.\n", path); kfree(path); return -EEXIST; diff --git a/modules/cas_disk/main.c b/modules/cas_disk/main.c index d187a08..bdf290a 100644 --- a/modules/cas_disk/main.c +++ b/modules/cas_disk/main.c @@ -51,7 +51,7 @@ static int __init casdsk_init_module(void) mutex_unlock(&casdsk_module->lock); - printk(CASDSK_KERN_INFO "%s Version %s (%s)::Module loaded successfully\n", + printk(KERN_INFO "%s Version %s (%s)::Module loaded successfully\n", CASDSK_LOGO, CAS_VERSION, CAS_KERNEL); return result; From ba7f693cffc9506843a0505fe8c67f7b094a8394 Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Thu, 1 Sep 2022 08:44:28 +0200 Subject: [PATCH 9/9] Clean cas_disk_defs.h header Move definitions used only in only one source code file to that file. Signed-off-by: Robert Baldyga --- modules/cas_disk/cas_disk_defs.h | 37 -------------------------------- modules/cas_disk/disk.c | 12 +++++++++++ modules/cas_disk/exp_obj.c | 23 ++++++++++++++++++++ modules/cas_disk/main.c | 2 ++ 4 files changed, 37 insertions(+), 37 deletions(-) diff --git a/modules/cas_disk/cas_disk_defs.h b/modules/cas_disk/cas_disk_defs.h index 4cc2b0c..e851348 100644 --- a/modules/cas_disk/cas_disk_defs.h +++ b/modules/cas_disk/cas_disk_defs.h @@ -28,43 +28,6 @@ struct casdsk_module { extern struct casdsk_module *casdsk_module; -#define CASDSK_LOGO "CAS Disk" - -static inline struct block_device *open_bdev_exclusive(const char *path, - fmode_t mode, - void *holder) -{ - return blkdev_get_by_path(path, mode | FMODE_EXCL, holder); -} - -static inline void close_bdev_exclusive(struct block_device *bdev, fmode_t mode) -{ - blkdev_put(bdev, mode | FMODE_EXCL); -} - -static inline int bd_claim_by_disk(struct block_device *bdev, void *holder, - struct gendisk *disk) -{ - return bd_link_disk_holder(bdev, disk); -} - -static inline void bd_release_from_disk(struct block_device *bdev, - struct gendisk *disk) -{ - return bd_unlink_disk_holder(bdev, disk); -} - -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) - #define KRETURN(x) ({ return (x); }) - #define MAKE_RQ_RET_TYPE blk_qc_t -#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) - #define KRETURN(x) return - #define MAKE_RQ_RET_TYPE void -#else - #define KRETURN(x) ({ return (x); }) - #define MAKE_RQ_RET_TYPE int -#endif - #include "debug.h" #endif diff --git a/modules/cas_disk/disk.c b/modules/cas_disk/disk.c index 0ba35ba..12c8986 100644 --- a/modules/cas_disk/disk.c +++ b/modules/cas_disk/disk.c @@ -13,6 +13,18 @@ #define CASDSK_DISK_OPEN_FMODE (FMODE_READ | FMODE_WRITE) +static inline struct block_device *open_bdev_exclusive(const char *path, + fmode_t mode, + void *holder) +{ + return blkdev_get_by_path(path, mode | FMODE_EXCL, holder); +} + +static inline void close_bdev_exclusive(struct block_device *bdev, fmode_t mode) +{ + blkdev_put(bdev, mode | FMODE_EXCL); +} + static void _casdsk_disk_release(struct kobject *kobj) { struct casdsk_disk *dsk; diff --git a/modules/cas_disk/exp_obj.c b/modules/cas_disk/exp_obj.c index 2d44c54..5113656 100644 --- a/modules/cas_disk/exp_obj.c +++ b/modules/cas_disk/exp_obj.c @@ -19,6 +19,29 @@ #define CASDSK_DEV_MINORS 16 #define KMEM_CACHE_MIN_SIZE sizeof(void *) +static inline int bd_claim_by_disk(struct block_device *bdev, void *holder, + struct gendisk *disk) +{ + return bd_link_disk_holder(bdev, disk); +} + +static inline void bd_release_from_disk(struct block_device *bdev, + struct gendisk *disk) +{ + return bd_unlink_disk_holder(bdev, disk); +} + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) + #define KRETURN(x) ({ return (x); }) + #define MAKE_RQ_RET_TYPE blk_qc_t +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) + #define KRETURN(x) return + #define MAKE_RQ_RET_TYPE void +#else + #define KRETURN(x) ({ return (x); }) + #define MAKE_RQ_RET_TYPE int +#endif + int __init casdsk_init_exp_objs(void) { CASDSK_DEBUG_TRACE(); diff --git a/modules/cas_disk/main.c b/modules/cas_disk/main.c index bdf290a..7d5e964 100644 --- a/modules/cas_disk/main.c +++ b/modules/cas_disk/main.c @@ -11,6 +11,8 @@ #include "disk.h" #include "exp_obj.h" +#define CASDSK_LOGO "CAS Disk" + /* Layer information. */ MODULE_AUTHOR("Intel(R) Corporation"); MODULE_LICENSE("Dual BSD/GPL");