From e5e0697da46d6576dcbe20242c5e02206b059199 Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Fri, 21 May 2021 00:04:53 +0200 Subject: [PATCH] Add support for kernel 5.11 Signed-off-by: Robert Baldyga --- configure.d/1_bd_first_part.conf | 74 ++++++++++++++++ configure.d/1_bdev_lookup.conf | 81 +++++++++++++++-- configure.d/1_bdev_nr_sectors.conf | 37 ++++++++ configure.d/1_bdev_whole.conf | 37 ++++++++ configure.d/1_bdget_disk.conf | 43 +++++++++ ..._generic_acct.conf => 2_generic_acct.conf} | 87 ++++++++++--------- configure.d/conf_framework | 1 + modules/cas_cache/layer_cache_management.c | 25 +----- modules/cas_cache/volume/vol_blk_utils.c | 2 +- .../cas_cache/volume/vol_block_dev_bottom.c | 4 +- modules/cas_cache/volume/vol_block_dev_top.c | 24 ++--- modules/cas_disk/disk.c | 4 +- modules/cas_disk/exp_obj.c | 31 ++----- 13 files changed, 333 insertions(+), 117 deletions(-) create mode 100644 configure.d/1_bd_first_part.conf create mode 100644 configure.d/1_bdev_nr_sectors.conf create mode 100644 configure.d/1_bdev_whole.conf create mode 100644 configure.d/1_bdget_disk.conf rename configure.d/{1_generic_acct.conf => 2_generic_acct.conf} (57%) diff --git a/configure.d/1_bd_first_part.conf b/configure.d/1_bd_first_part.conf new file mode 100644 index 0000000..d88f069 --- /dev/null +++ b/configure.d/1_bd_first_part.conf @@ -0,0 +1,74 @@ +#!/bin/bash +# +# Copyright(c) 2012-2021 Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause-Clear +# + +. $(dirname $3)/conf_framework + +check() { + cur_name=$(basename $2) + config_file_path=$1 + if compile_module $cur_name "struct block_device *bd; bd->bd_partno;" "linux/blk_types.h" + then + echo $cur_name "1" >> $config_file_path + elif compile_module $cur_name "struct hd_struct *hd; hd->partno;" "linux/genhd.h" + then + echo $cur_name "2" >> $config_file_path + else + echo $cur_name "X" >> $config_file_path + fi +} + +apply() { + case "$1" in + "1") + add_function " + static inline int cas_bd_get_next_part(struct block_device *bd) + { + int part_no = 0; + struct gendisk *disk = bd->bd_disk; + struct disk_part_iter piter; + struct block_device *part; + + mutex_lock(&bd->bd_mutex); + + disk_part_iter_init(&piter, disk, DISK_PITER_INCL_EMPTY); + while ((part = disk_part_iter_next(&piter))) { + part_no = part->bd_partno; + break; + } + disk_part_iter_exit(&piter); + + mutex_unlock(&bd->bd_mutex); + + return part_no; + }" ;; + "2") + add_function " + static inline int cas_bd_get_next_part(struct block_device *bd) + { + int part_no = 0; + struct gendisk *disk = bd->bd_disk; + struct disk_part_iter piter; + struct hd_struct *part; + + mutex_lock(&bd->bd_mutex); + + disk_part_iter_init(&piter, disk, DISK_PITER_INCL_EMPTY); + while ((part = disk_part_iter_next(&piter))) { + part_no = part->partno; + break; + } + disk_part_iter_exit(&piter); + + mutex_unlock(&bd->bd_mutex); + + return part_no; + }" ;; + *) + exit 1 + esac +} + +conf_run $@ diff --git a/configure.d/1_bdev_lookup.conf b/configure.d/1_bdev_lookup.conf index 51d49be..1d18a3f 100644 --- a/configure.d/1_bdev_lookup.conf +++ b/configure.d/1_bdev_lookup.conf @@ -9,12 +9,15 @@ check() { cur_name=$(basename $2) config_file_path=$1 - if compile_module $cur_name "lookup_bdev(\"some_path\")" "linux/fs.h" "linux/blkdev.h" + if compile_module $cur_name "dev_t dev; lookup_bdev(\"some_path\", &dev)" "linux/blkdev.h" then echo $cur_name "1" >> $config_file_path - elif compile_module $cur_name "lookup_bdev(\"some_path\", 0)" "linux/fs.h" "linux/blkdev.h" + elif compile_module $cur_name "lookup_bdev(\"some_path\")" "linux/fs.h" "linux/blkdev.h" then echo $cur_name "2" >> $config_file_path + elif compile_module $cur_name "lookup_bdev(\"some_path\", 0)" "linux/fs.h" "linux/blkdev.h" + then + echo $cur_name "3" >> $config_file_path else echo $cur_name "X" >> $config_file_path fi @@ -23,11 +26,77 @@ check() { apply() { case "$1" in "1") - add_define "CAS_LOOKUP_BDEV(PATH) \\ - lookup_bdev(PATH)" ;; + add_function " + static inline bool cas_bdev_exist(const char *path) + { + dev_t dev; + int result; + + result = lookup_bdev(path, &dev); + return !result; + }" + add_function " + static inline bool cas_bdev_match(const char *path, struct block_device *bd) + { + dev_t dev; + int result; + + result = lookup_bdev(path, &dev); + if (result) + return false; + + return (bd->bd_dev == dev); + }" ;; "2") - add_define "CAS_LOOKUP_BDEV(PATH) \\ - lookup_bdev(PATH, 0)" ;; + add_function " + static inline bool cas_bdev_exist(const char *path) + { + struct block_device *bdev; + + bdev = lookup_bdev(path); + if (IS_ERR(bdev)) + return false; + bdput(bdev); + return true; + }" + add_function " + static inline bool cas_bdev_match(const char *path, struct block_device *bd) + { + struct block_device *bdev; + bool match = false; + + bdev = lookup_bdev(path); + if (IS_ERR(bdev)) + return false; + match = (bdev == bd); + bdput(bdev); + return match; + }" ;; + "3") + add_function " + static inline bool cas_bdev_exist(const char *path) + { + struct block_device *bdev; + + bdev = lookup_bdev(path, 0); + if (IS_ERR(bdev)) + return false; + bdput(bdev); + return true; + }" + add_function " + static inline bool cas_bdev_match(const char *path, struct block_device *bd) + { + struct block_device *bdev; + bool match = false; + + bdev = lookup_bdev(path, 0); + if (IS_ERR(bdev)) + return false; + match = (bdev == bd); + bdput(bdev); + return match; + }" ;; *) exit 1 esac diff --git a/configure.d/1_bdev_nr_sectors.conf b/configure.d/1_bdev_nr_sectors.conf new file mode 100644 index 0000000..33ccae7 --- /dev/null +++ b/configure.d/1_bdev_nr_sectors.conf @@ -0,0 +1,37 @@ +#!/bin/bash +# +# Copyright(c) 2012-2021 Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause-Clear +# + +. $(dirname $3)/conf_framework + + +check() { + cur_name=$(basename $2) + config_file_path=$1 + if compile_module $cur_name "bdev_nr_sectors(NULL);" "linux/genhd.h" + then + echo $cur_name 1 >> $config_file_path + elif compile_module $cur_name "struct block_device *bd; bd->bd_part->nr_sects;" "linux/blk_types.h" + then + echo $cur_name 2 >> $config_file_path + else + echo $cur_name X >> $config_file_path + fi +} + +apply() { + case "$1" in + "1") + add_define "cas_bdev_nr_sectors(bd) \\ + bdev_nr_sectors(bd)" ;; + "2") + add_define "cas_bdev_nr_sectors(bd) \\ + (bd->bd_part->nr_sects)" ;; + *) + exit 1 + esac +} + +conf_run $@ diff --git a/configure.d/1_bdev_whole.conf b/configure.d/1_bdev_whole.conf new file mode 100644 index 0000000..b8981e8 --- /dev/null +++ b/configure.d/1_bdev_whole.conf @@ -0,0 +1,37 @@ +#!/bin/bash +# +# Copyright(c) 2012-2021 Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause-Clear +# + +. $(dirname $3)/conf_framework + + +check() { + cur_name=$(basename $2) + config_file_path=$1 + if compile_module $cur_name "struct block_device *bd; bdev_whole(bd);" "linux/blk_types.h" "linux/genhd.h" + then + echo $cur_name 1 >> $config_file_path + elif compile_module $cur_name "struct block_device *bd; bd->bd_contains;" "linux/blk_types.h" + then + echo $cur_name 2 >> $config_file_path + else + echo $cur_name X >> $config_file_path + fi +} + +apply() { + case "$1" in + "1") + add_define "cas_bdev_whole(bd) \\ + bdev_whole(bd)" ;; + "2") + add_define "cas_bdev_whole(bd) \\ + (bd->bd_contains)" ;; + *) + exit 1 + esac +} + +conf_run $@ diff --git a/configure.d/1_bdget_disk.conf b/configure.d/1_bdget_disk.conf new file mode 100644 index 0000000..fbd2227 --- /dev/null +++ b/configure.d/1_bdget_disk.conf @@ -0,0 +1,43 @@ +#!/bin/bash +# +# Copyright(c) 2012-2021 Intel Corporation +# SPDX-License-Identifier: BSD-3-Clause-Clear +# + +. $(dirname $3)/conf_framework + + +check() { + cur_name=$(basename $2) + config_file_path=$1 + if compile_module $cur_name "bdget_disk(NULL, 0);" "linux/genhd.h" + then + echo $cur_name 1 >> $config_file_path + elif compile_module $cur_name "bdgrab(NULL);" "linux/blkdev.h" + then + echo $cur_name 2 >> $config_file_path + else + echo $cur_name X >> $config_file_path + fi +} + +apply() { + case "$1" in + "1") + add_function " + static inline struct block_device *cas_bdget_disk(struct gendisk *gd) + { + return bdget_disk(gd, 0); + }" ;; + "2") + add_function " + static inline struct block_device *cas_bdget_disk(struct gendisk *gd) + { + return bdgrab(gd->part0); + }" ;; + *) + exit 1 + esac +} + +conf_run $@ diff --git a/configure.d/1_generic_acct.conf b/configure.d/2_generic_acct.conf similarity index 57% rename from configure.d/1_generic_acct.conf rename to configure.d/2_generic_acct.conf index a8afcfb..1b97789 100644 --- a/configure.d/1_generic_acct.conf +++ b/configure.d/2_generic_acct.conf @@ -34,56 +34,62 @@ apply() { "1") add_function " static inline unsigned long long cas_generic_start_io_acct( - struct request_queue *q, struct bio *bio, - struct hd_struct *part) + struct bio *bio) { return bio_start_io_acct(bio); }" add_function " - static inline void cas_generic_end_io_acct(struct request_queue *q, - struct bio *bio, struct hd_struct *part, - unsigned long start_time) + static inline void cas_generic_end_io_acct( + struct bio *bio, unsigned long start_time) { bio_end_io_acct(bio, start_time); }" ;; "2") add_function " static inline unsigned long long cas_generic_start_io_acct( - struct request_queue *q, struct bio *bio, - struct hd_struct *part) + struct bio *bio) { - generic_start_io_acct(q, bio_data_dir(bio), bio_sectors(bio), part); + struct gendisk *gd = CAS_BIO_GET_DEV(bio); + + generic_start_io_acct(gd->queue, bio_data_dir(bio), + bio_sectors(bio), &gd->part0); return jiffies; }" add_function " - static inline void cas_generic_end_io_acct(struct request_queue *q, - struct bio *bio, struct hd_struct *part, - unsigned long start_time) + static inline void cas_generic_end_io_acct( + struct bio *bio, unsigned long start_time) { - generic_end_io_acct(q, bio_data_dir(bio), part, start_time); + struct gendisk *gd = CAS_BIO_GET_DEV(bio); + + generic_end_io_acct(gd->queue, bio_data_dir(bio), + &gd->part0, start_time); }" ;; "3") add_function " static inline unsigned long long cas_generic_start_io_acct( - struct request_queue *q, struct bio *bio, - struct hd_struct *part) + struct bio *bio) { - generic_start_io_acct(bio_data_dir(bio), bio_sectors(bio), part); + struct gendisk *gd = CAS_BIO_GET_DEV(bio); + + generic_start_io_acct(bio_data_dir(bio), bio_sectors(bio), + &gd->part0); return jiffies; }" add_function " - static inline void cas_generic_end_io_acct(struct request_queue *q, - struct bio *bio, struct hd_struct *part, - unsigned long start_time) + static inline void cas_generic_end_io_acct( + struct bio *bio, unsigned long start_time) { - generic_end_io_acct(bio_data_dir(bio), part, start_time); + struct gendisk *gd = CAS_BIO_GET_DEV(bio); + + generic_end_io_acct(bio_data_dir(bio), &gd->part0, start_time); }" ;; "4") add_function " static inline unsigned long long cas_generic_start_io_acct( - struct request_queue *q, struct bio *bio, - struct hd_struct *part) + struct bio *bio) { + struct gendisk *gd = CAS_BIO_GET_DEV(bio); + int rw = bio_data_dir(bio); int cpu = part_stat_lock(); part_round_stats(cpu, part); @@ -94,44 +100,47 @@ apply() { return jiffies; }" add_function " - static inline void cas_generic_end_io_acct(struct request_queue *q, - struct bio *bio, struct hd_struct *part, - unsigned long start_time) + static inline void cas_generic_end_io_acct( + struct bio *bio, unsigned long start_time) { + struct gendisk *gd = CAS_BIO_GET_DEV(bio); + int rw = bio_data_dir(bio); unsigned long duration = jiffies - start_time; int cpu = part_stat_lock(); - part_stat_add(cpu, part, ticks[rw], duration); - part_round_stats(cpu, part); - part_dec_in_flight(part, rw); + part_stat_add(cpu, &gd->part0, ticks[rw], duration); + part_round_stats(cpu, &gd->part0); + part_dec_in_flight(&gd->part0, rw); part_stat_unlock(); }" ;; "5") add_function " static inline unsigned long long cas_generic_start_io_acct( - struct request_queue *q, struct bio *bio, - struct hd_struct *part) + struct bio *bio) { + struct gendisk *gd = CAS_BIO_GET_DEV(bio); + int rw = bio_data_dir(bio); int cpu = part_stat_lock(); - part_round_stats(NULL, cpu, part); - part_stat_inc(cpu, part, ios[rw]); - part_stat_add(cpu, part, sectors[rw], bio_sectors(bio)); - part_inc_in_flight(NULL, part, rw); + part_round_stats(NULL, cpu, &gd->part0); + part_stat_inc(cpu, &gd->part0, ios[rw]); + part_stat_add(cpu, &gd->part0, sectors[rw], bio_sectors(bio)); + part_inc_in_flight(NULL, &gd->part0, rw); part_stat_unlock(); return jiffies; }" add_function " - static inline void cas_generic_end_io_acct(struct request_queue *q, - struct bio *bio, struct hd_struct *part, - unsigned long start_time) + static inline void cas_generic_end_io_acct( + struct bio *bio, unsigned long start_time) { + struct gendisk *gd = CAS_BIO_GET_DEV(bio); + int rw = bio_data_dir(bio); unsigned long duration = jiffies - start_time; int cpu = part_stat_lock(); - part_stat_add(cpu, part, ticks[rw], duration); - part_round_stats(NULL, cpu, part); - part_dec_in_flight(NULL, part, rw); + part_stat_add(cpu, &gd->part0, ticks[rw], duration); + part_round_stats(NULL, cpu, &gd->part0); + part_dec_in_flight(NULL, &gd->part0, rw); part_stat_unlock(); }" ;; *) diff --git a/configure.d/conf_framework b/configure.d/conf_framework index 40d0581..de79b4e 100644 --- a/configure.d/conf_framework +++ b/configure.d/conf_framework @@ -52,6 +52,7 @@ compile_module(){ return 0; } void cleanup_module(void) {}; + MODULE_LICENSE("GPL"); EOF ####################################### diff --git a/modules/cas_cache/layer_cache_management.c b/modules/cas_cache/layer_cache_management.c index 0198486..8d8ae0a 100644 --- a/modules/cas_cache/layer_cache_management.c +++ b/modules/cas_cache/layer_cache_management.c @@ -1068,7 +1068,6 @@ out_bdev: int cache_mngt_prepare_core_cfg(struct ocf_mngt_core_config *cfg, struct kcas_insert_core *cmd_info) { - struct block_device *bdev; char core_name[OCF_CORE_NAME_SIZE] = {}; ocf_cache_t cache; uint16_t core_id; @@ -1109,10 +1108,8 @@ int cache_mngt_prepare_core_cfg(struct ocf_mngt_core_config *cfg, return 0; } - bdev = CAS_LOOKUP_BDEV(cfg->uuid.data); - if (IS_ERR(bdev)) + if (!cas_bdev_exist(cfg->uuid.data)) return -OCF_ERR_INVAL_VOLUME_TYPE; - bdput(bdev); if (cmd_info->update_path) return 0; @@ -1135,9 +1132,7 @@ static int cache_mngt_update_core_uuid(ocf_cache_t cache, const char *core_name, { ocf_core_t core; ocf_volume_t vol; - struct block_device *bdev; struct bd_object *bdvol; - bool match; int result; if (ocf_core_get_by_name(cache, core_name, name_len, &core)) { @@ -1154,19 +1149,7 @@ static int cache_mngt_update_core_uuid(ocf_cache_t cache, const char *core_name, vol = ocf_core_get_volume(core); bdvol = bd_object(vol); - /* lookup block device object for device pointed by uuid */ - bdev = CAS_LOOKUP_BDEV(uuid->data); - if (IS_ERR(bdev)) { - printk(KERN_ERR "failed to lookup bdev%s\n", (char*)uuid->data); - return -ENODEV; - } - - /* check whether both core id and uuid point to the same block device */ - match = (bdvol->btm_bd == bdev); - - bdput(bdev); - - if (!match) { + if (!cas_bdev_match(uuid->data, bdvol->btm_bd)) { printk(KERN_ERR "UUID provided does not match target core device\n"); return -ENODEV; } @@ -1766,7 +1749,7 @@ int cache_mngt_prepare_cache_cfg(struct ocf_mngt_cache_config *cfg, -OCF_ERR_INVAL_VOLUME_TYPE; } - is_part = (bdev->bd_contains != bdev); + is_part = (cas_bdev_whole(bdev) != bdev); part_count = cas_blk_get_part_count(bdev); blkdev_put(bdev, (FMODE_EXCL|FMODE_READ)); @@ -1872,7 +1855,7 @@ static void init_instance_complete(struct _cache_mngt_attach_context *ctx, bdev = bd_cache_obj->btm_bd; /* If we deal with whole device, reread partitions */ - if (bdev->bd_contains == bdev) + if (cas_bdev_whole(bdev) == bdev) cas_reread_partitions(bdev); /* Set other back information */ diff --git a/modules/cas_cache/volume/vol_blk_utils.c b/modules/cas_cache/volume/vol_blk_utils.c index 55ad827..74cae21 100644 --- a/modules/cas_cache/volume/vol_blk_utils.c +++ b/modules/cas_cache/volume/vol_blk_utils.c @@ -303,7 +303,7 @@ int cas_blk_identify_type_by_bdev(struct block_device *bdev, atomic_params_int.is_mode_optimal = 1; break; #else - if (bdev == bdev->bd_contains) { + if (bdev == cas_bdev_whole(bdev)) { /* * Entire device - format isn't optimal */ diff --git a/modules/cas_cache/volume/vol_block_dev_bottom.c b/modules/cas_cache/volume/vol_block_dev_bottom.c index 949b66e..8777a17 100644 --- a/modules/cas_cache/volume/vol_block_dev_bottom.c +++ b/modules/cas_cache/volume/vol_block_dev_bottom.c @@ -84,9 +84,9 @@ uint64_t block_dev_get_byte_length(ocf_volume_t vol) struct block_device *bd = bdobj->btm_bd; uint64_t sector_length; - sector_length = (bd->bd_contains == bd) ? + sector_length = (cas_bdev_whole(bd) == bd) ? get_capacity(bd->bd_disk) : - bd->bd_part->nr_sects; + cas_bdev_nr_sectors(bd); return sector_length << SECTOR_SHIFT; } diff --git a/modules/cas_cache/volume/vol_block_dev_top.c b/modules/cas_cache/volume/vol_block_dev_top.c index b4c179d..cb7133c 100644 --- a/modules/cas_cache/volume/vol_block_dev_top.c +++ b/modules/cas_cache/volume/vol_block_dev_top.c @@ -30,21 +30,6 @@ static void _blockdev_set_bio_data(struct blk_data *data, struct bio *bio) #endif } -static inline unsigned long long _blockdev_start_io_acct(struct bio *bio) -{ - struct gendisk *gd = CAS_BIO_GET_DEV(bio); - - return cas_generic_start_io_acct(gd->queue, bio, &gd->part0); -} - -static inline void _blockdev_end_io_acct(struct bio *bio, - unsigned long start_time) -{ - struct gendisk *gd = CAS_BIO_GET_DEV(bio); - - cas_generic_end_io_acct(gd->queue, bio, &gd->part0, start_time); -} - static inline int _blkdev_can_hndl_bio(struct bio *bio) { if (CAS_CHECK_BARRIER(bio)) { @@ -140,7 +125,7 @@ static int _blockdev_set_geometry(struct casdsk_disk *dsk, void *private) cache_bd = casdisk_functions.casdsk_disk_get_blkdev(bd_cache_vol->dsk); BUG_ON(!cache_bd); - core_q = core_bd->bd_contains->bd_disk->queue; + 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); @@ -215,7 +200,7 @@ static void block_dev_complete_data(struct ocf_io *io, int error) struct blk_data *data = ocf_io_get_data(io); struct bio *bio = data->master_io_req; - _blockdev_end_io_acct(bio, data->start_time); + cas_generic_end_io_acct(bio, data->start_time); CAS_BIO_ENDIO(bio, CAS_BIO_BISIZE(bio), CAS_ERRNO_TO_BLK_STS(error)); ocf_io_put(io); @@ -275,7 +260,7 @@ static void _blockdev_handle_data(ocf_core_t core, struct bio *bio) } ocf_io_set_cmpl(io, NULL, NULL, block_dev_complete_data); - data->start_time = _blockdev_start_io_acct(bio); + data->start_time = cas_generic_start_io_acct(bio); ocf_core_submit_io(io); } @@ -296,7 +281,8 @@ static void _blockdev_handle_discard(ocf_core_t core, struct bio *bio) io = ocf_core_new_io(core, cache_priv->io_queues[smp_processor_id()], CAS_BIO_BISECTOR(bio) << SECTOR_SHIFT, - CAS_BIO_BISIZE(bio), OCF_WRITE, 0, 0); + CAS_BIO_BISIZE(bio), OCF_WRITE, 0, + CAS_CLEAR_FLUSH(CAS_BIO_OP_FLAGS(bio))); if (!io) { CAS_PRINT_RL(KERN_CRIT diff --git a/modules/cas_disk/disk.c b/modules/cas_disk/disk.c index f9e2708..3007e8b 100644 --- a/modules/cas_disk/disk.c +++ b/modules/cas_disk/disk.c @@ -281,9 +281,7 @@ struct request_queue *casdsk_disk_get_queue(struct casdsk_disk *dsk) { BUG_ON(!dsk); BUG_ON(!dsk->bd); - BUG_ON(!dsk->bd->bd_contains); - BUG_ON(!dsk->bd->bd_contains->bd_disk); - return dsk->bd->bd_contains->bd_disk->queue; + return cas_bdev_whole(dsk->bd)->bd_disk->queue; } EXPORT_SYMBOL(casdsk_disk_get_queue); diff --git a/modules/cas_disk/exp_obj.c b/modules/cas_disk/exp_obj.c index fee97fa..19f7b31 100644 --- a/modules/cas_disk/exp_obj.c +++ b/modules/cas_disk/exp_obj.c @@ -189,27 +189,6 @@ static MAKE_RQ_RET_TYPE _casdsk_exp_obj_make_rq_fn(struct request_queue *q, return _casdsk_exp_obj_submit_bio(bio); } -static int _casdsk_get_next_part_no(struct block_device *bd) -{ - int part_no = 0; - struct gendisk *disk = bd->bd_disk; - struct disk_part_iter piter; - struct hd_struct *part; - - mutex_lock(&bd->bd_mutex); - - disk_part_iter_init(&piter, disk, DISK_PITER_INCL_EMPTY); - while ((part = disk_part_iter_next(&piter))) { - part_no = part->partno; - break; - } - disk_part_iter_exit(&piter); - - mutex_unlock(&bd->bd_mutex); - - return part_no; -} - static int _casdsk_del_partitions(struct casdsk_disk *dsk) { struct block_device *bd = casdsk_disk_get_blkdev(dsk); @@ -249,7 +228,7 @@ static int _casdsk_del_partitions(struct casdsk_disk *dsk) goto out_copy; } - while ((part_no = _casdsk_get_next_part_no(bd))) { + while ((part_no = cas_bd_get_next_part(bd))) { bpart.pno = part_no; result = copy_to_user((void __user *)usr_bpart, &bpart, sizeof(bpart)); @@ -288,7 +267,7 @@ static int _casdsk_exp_obj_hide_parts(struct casdsk_disk *dsk) struct block_device *bd = casdsk_disk_get_blkdev(dsk); struct gendisk *gdsk = casdsk_disk_get_gendisk(dsk); - if (bd != bd->bd_contains) + if (bd != cas_bdev_whole(bd)) /* It is partition, no more job required */ return 0; @@ -325,7 +304,7 @@ static int _casdsk_exp_obj_set_dev_t(struct casdsk_disk *dsk, struct gendisk *gd bdev = casdsk_disk_get_blkdev(dsk); BUG_ON(!bdev); - if (bdev->bd_contains != bdev) { + if (cas_bdev_whole(bdev) != bdev) { minors = 1; flags = 0; } else { @@ -352,7 +331,7 @@ static void _casdsk_exp_obj_clear_dev_t(struct casdsk_disk *dsk) struct block_device *bdev = casdsk_disk_get_blkdev(dsk); struct gendisk *gdsk = casdsk_disk_get_gendisk(dsk); - if (bdev->bd_contains == bdev) { + if (cas_bdev_whole(bdev) == bdev) { /* Restore previous configuration of bottom disk */ gdsk->minors = dsk->gd_minors; gdsk->flags |= dsk->gd_flags; @@ -718,7 +697,7 @@ int casdsk_exp_obj_lock(struct casdsk_disk *dsk) exp_obj = dsk->exp_obj; - exp_obj->locked_bd = bdget_disk(exp_obj->gd, 0); + exp_obj->locked_bd = cas_bdget_disk(exp_obj->gd); if (!exp_obj->locked_bd) return -ENAVAIL;