From c596c66063c52a370fb8774c0a52e97328091dc9 Mon Sep 17 00:00:00 2001 From: Robert Baldyga Date: Tue, 15 Dec 2020 17:06:36 +0100 Subject: [PATCH] configure: Add wrappers for default make request function Signed-off-by: Robert Baldyga --- configure.d/1_default_make_request.conf | 54 +++++++++++++++++++++++++ modules/cas_disk/exp_obj.c | 4 +- 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 configure.d/1_default_make_request.conf diff --git a/configure.d/1_default_make_request.conf b/configure.d/1_default_make_request.conf new file mode 100644 index 0000000..c3b741c --- /dev/null +++ b/configure.d/1_default_make_request.conf @@ -0,0 +1,54 @@ +#!/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 "blk_mq_make_request(NULL, NULL);" "linux/blk-mq.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_get_default_mk_request_fn(struct request_queue *q) + { + if (q->make_request_fn) + return q->make_request_fn; + return blk_mq_make_request; + }" + add_function " + static inline void cas_call_default_mk_request_fn(make_request_fn *fn, + struct request_queue *q, struct bio *bio) + { + percpu_ref_get(&q->q_usage_counter); + fn(q, bio); + }" ;; + "2") + add_function " + static inline void *cas_get_default_mk_request_fn(struct request_queue *q) + { + return q->make_request_fn; + }" + add_function " + static inline void cas_call_default_mk_request_fn(make_request_fn *fn, + struct request_queue *q, struct bio *bio) + { + fn(q, bio); + }" ;; + *) + exit 1 + esac +} + +conf_run $@ diff --git a/modules/cas_disk/exp_obj.c b/modules/cas_disk/exp_obj.c index b66827e..2916d78 100644 --- a/modules/cas_disk/exp_obj.c +++ b/modules/cas_disk/exp_obj.c @@ -77,7 +77,7 @@ static inline void _casdsk_exp_obj_handle_bio_att(struct casdsk_disk *dsk, make_request_fn(dsk, q, bio, dsk->private); if (status == CASDSK_BIO_NOT_HANDLED) - dsk->exp_obj->mk_rq_fn(q, bio); + cas_call_default_mk_request_fn(dsk->exp_obj->mk_rq_fn, q, bio); } CAS_DECLARE_BLOCK_CALLBACK(_casdsk_exp_obj_bio_pt_io, struct bio *bio, @@ -573,7 +573,7 @@ int casdsk_exp_obj_create(struct casdsk_disk *dsk, const char *dev_name, gd->private_data = dsk; strlcpy(gd->disk_name, exp_obj->dev_name, sizeof(gd->disk_name)); - dsk->exp_obj->mk_rq_fn = queue->make_request_fn; + dsk->exp_obj->mk_rq_fn = cas_get_default_mk_request_fn(queue); cas_blk_queue_make_request(queue, _casdsk_exp_obj_make_rq_fn); if (exp_obj->ops->set_geometry) {