configure/bio_max_vecs: adapt to kernel 5.12

The bio_alloc_bioset() function now BUG() if trying to allocate a bio
with more than BIO_MAX_VECS vectors.

A no-limit value (-1) is defined in order not to change old kernels'
behaviour.

Signed-off-by: Gal Hammer <gal.hammer@huawei.com>
Signed-off-by: Shai Fultheim <shai.fultheim@huawei.com>
This commit is contained in:
Gal Hammer 2022-02-09 17:49:08 +02:00
parent 3a8e3cf37c
commit 4ed8a59402
2 changed files with 32 additions and 1 deletions

View File

@ -0,0 +1,31 @@
#!/bin/bash
#
# Copyright(c) 2022 Intel Corporation
# SPDX-License-Identifier: BSD-3-Clause
#
. $(dirname $3)/conf_framework
check() {
cur_name=$(basename $2)
config_file_path=$1
if compile_module $cur_name "int n; n = BIO_MAX_VECS" "linux/bio.h"
then
echo $cur_name 1 >> $config_file_path
else
echo $cur_name 2 >> $config_file_path
fi
}
apply() {
case "$1" in
"1")
;;
"2")
add_define "BIO_MAX_VECS ((uint32_t)(-1))" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -90,7 +90,7 @@ static inline uint32_t cas_io_iter_size_done(struct bio_vec_iter *iter)
static inline uint32_t cas_io_iter_size_left(struct bio_vec_iter *iter) static inline uint32_t cas_io_iter_size_left(struct bio_vec_iter *iter)
{ {
if (iter->idx < iter->vec_size) if (iter->idx < iter->vec_size)
return iter->vec_size - iter->idx; return min(iter->vec_size - iter->idx, BIO_MAX_VECS);
return 0; return 0;
/* TODO UNITTEST */ /* TODO UNITTEST */
} }