From 48c3598ef572addcce3b2cce2b9be39e24639bef Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Fri, 11 Dec 2020 22:11:35 +0100 Subject: [PATCH] configure: Add bdev_disk_changed() wrapper Signed-off-by: Robert Baldyga --- configure.d/1_reread_partitions.conf | 39 ++++++++++++++++++++++ modules/cas_cache/layer_cache_management.c | 2 +- modules/cas_disk/exp_obj.c | 6 ++-- 3 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 configure.d/1_reread_partitions.conf diff --git a/configure.d/1_reread_partitions.conf b/configure.d/1_reread_partitions.conf new file mode 100644 index 0000000..83f5d6a --- /dev/null +++ b/configure.d/1_reread_partitions.conf @@ -0,0 +1,39 @@ +#!/bin/bash +# +# Copyright(c) 2012-2020 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_disk_changed(NULL, false);" "linux/genhd.h" + then + echo $cur_name "1" >> $config_file_path + else + echo $cur_name "2" >> $config_file_path + fi +} + +apply() { + case "$1" in + "1") + add_function " + static inline void cas_reread_partitions(struct block_device *bdev) + { + bdev_disk_changed(bdev, false); + }" ;; + "2") + add_function " + static inline void cas_reread_partitions(struct block_device *bdev) + { + ioctl_by_bdev(bdev, BLKRRPART, (unsigned long)NULL); + }" ;; + *) + exit 1 + esac +} + +conf_run $@ diff --git a/modules/cas_cache/layer_cache_management.c b/modules/cas_cache/layer_cache_management.c index 3223fe0..2970ebc 100644 --- a/modules/cas_cache/layer_cache_management.c +++ b/modules/cas_cache/layer_cache_management.c @@ -1824,7 +1824,7 @@ static void init_instance_complete(struct _cache_mngt_attach_context *ctx, /* If we deal with whole device, reread partitions */ if (bdev->bd_contains == bdev) - ioctl_by_bdev(bdev, BLKRRPART, (unsigned long)NULL); + cas_reread_partitions(bdev); /* Set other back information */ name = block_dev_get_elevator_name( diff --git a/modules/cas_disk/exp_obj.c b/modules/cas_disk/exp_obj.c index 31a80c1..b66827e 100644 --- a/modules/cas_disk/exp_obj.c +++ b/modules/cas_disk/exp_obj.c @@ -267,7 +267,7 @@ static int _casdsk_exp_obj_hide_parts(struct casdsk_disk *dsk) gdsk->disk_name); /* Try restore previous partitions by rescaning */ - ioctl_by_bdev(bd, BLKRRPART, (unsigned long) NULL); + cas_reread_partitions(bd); return -EINVAL; } } @@ -280,7 +280,7 @@ static int _casdsk_exp_obj_hide_parts(struct casdsk_disk *dsk) gdsk->flags &= ~_casdsk_flags; gdsk->minors = 1; /* Rescan partitions */ - ioctl_by_bdev(bd, BLKRRPART, (unsigned long) NULL); + cas_reread_partitions(bd); return 0; } @@ -325,7 +325,7 @@ static void _casdsk_exp_obj_clear_dev_t(struct casdsk_disk *dsk) /* Restore previous configuration of bottom disk */ gdsk->minors = dsk->gd_minors; gdsk->flags |= dsk->gd_flags; - ioctl_by_bdev(bdev, BLKRRPART, (unsigned long) NULL); + cas_reread_partitions(bdev); } }