Kernel 6.0 support

This patch introduces kernel 6.0 support for Open CAS

Signed-off-by: Krzysztof Majzerowicz-Jaszcz <krzysztof.majzerowicz-jaszcz@intel.com>
This commit is contained in:
Krzysztof Majzerowicz-Jaszcz 2022-10-26 18:58:11 +02:00
parent 4bf7bbdd25
commit f1bf2eb909
8 changed files with 186 additions and 5 deletions

View File

@ -0,0 +1,45 @@
#!/bin/bash
#
# Copyright(c) 2012-2022 Intel Corporation
# SPDX-License-Identifier: BSD-3-Clause
#
. $(dirname $3)/conf_framework.sh
check() {
cur_name=$(basename $2)
config_file_path=$1
if compile_module $cur_name "blk_cleanup_disk(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_cleanup_disk(struct gendisk *gd)
{
blk_cleanup_disk(gd);
}"
;;
"2")
add_function "
static inline void cas_cleanup_disk(struct gendisk *gd)
{
put_disk(gd);
}"
;;
*)
exit 1
esac
}
conf_run $@

View File

@ -0,0 +1,45 @@
#!/bin/bash
#
# Copyright(c) 2012-2022 Intel Corporation
# SPDX-License-Identifier: BSD-3-Clause
#
. $(dirname $3)/conf_framework.sh
check() {
cur_name=$(basename $2)
config_file_path=$1
if compile_module $cur_name "blk_cleanup_queue(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_cleanup_queue(struct request_queue *q)
{
blk_cleanup_queue(q);
}"
;;
"2")
add_function "
static inline void cas_cleanup_queue(struct request_queue *q)
{
blk_mq_destroy_queue(q);
}"
;;
*)
exit 1
esac
}
conf_run $@

View File

@ -0,0 +1,46 @@
#!/bin/bash
#
# Copyright(c) 2012-2022 Intel Corporation
# SPDX-License-Identifier: BSD-3-Clause
#
. $(dirname $3)/conf_framework.sh
check() {
cur_name=$(basename $2)
config_file_path=$1
if compile_module $cur_name "struct request_queue q;blk_queue_discard(&q);" "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 int cas_has_discard_support(struct block_device *bd)
{
struct request_queue *q = bdev_get_queue(bd);
return (int)blk_queue_discard(q);
}"
;;
"2")
add_function "
static inline int cas_has_discard_support(struct block_device *bd)
{
return !!bdev_max_discard_sectors(bd);
}"
;;
*)
exit 1
esac
}
conf_run $@

View File

@ -36,7 +36,7 @@ apply() {
add_function "
static inline void cas_cleanup_mq_disk(struct cas_exp_obj *exp_obj)
{
blk_cleanup_disk(exp_obj->gd);
cas_cleanup_disk(exp_obj->gd);
}"
;;

View File

@ -0,0 +1,45 @@
#!/bin/bash
#
# Copyright(c) 2012-2022 Intel Corporation
# SPDX-License-Identifier: BSD-3-Clause
#
. $(dirname $3)/conf_framework.sh
check() {
cur_name=$(basename $2)
config_file_path=$1
if compile_module $cur_name "QUEUE_FLAG_DISCARD;" "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_set_discard_flag(struct request_queue *q)
{
CAS_QUEUE_FLAG_SET(QUEUE_FLAG_DISCARD, q);
}"
;;
"2")
add_function "
static inline void cas_set_discard_flag(struct request_queue *q)
{
(void)q;
}"
;;
*)
exit 1
esac
}
conf_run $@

View File

@ -535,7 +535,7 @@ int cas_exp_obj_destroy(struct cas_disk *dsk)
del_gendisk(exp_obj->gd);
if (exp_obj->queue)
blk_cleanup_queue(exp_obj->queue);
cas_cleanup_queue(exp_obj->queue);
blk_mq_free_tag_set(&exp_obj->tag_set);

View File

@ -218,7 +218,7 @@ void block_dev_submit_discard(struct ocf_io *io)
goto out;
}
if (!blk_queue_discard(q)) {
if (!cas_has_discard_support(bd)) {
/* Discard is not supported by bottom device, send completion
* to caller
*/

View File

@ -64,10 +64,10 @@ static void blkdev_set_discard_properties(ocf_cache_t cache,
core_q = bdev_get_queue(core_bd);
cache_q = bdev_get_queue(cache_bd);
CAS_QUEUE_FLAG_SET(QUEUE_FLAG_DISCARD, exp_q);
cas_set_discard_flag(exp_q);
CAS_SET_DISCARD_ZEROES_DATA(exp_q->limits, 0);
if (core_q && blk_queue_discard(core_q)) {
if (core_q && cas_has_discard_support(core_bd)) {
blk_queue_max_discard_sectors(exp_q, core_q->limits.max_discard_sectors);
exp_q->limits.discard_alignment =
bdev_discard_alignment(core_bd);