Generate and apply config

Allows for faster configuration in known environments

Signed-off-by: Robert Baldyga <robert.baldyga@intel.com>
Signed-off-by: Michal Mielewczyk <michal.mielewczyk@intel.com>
This commit is contained in:
Robert Baldyga 2019-07-10 14:57:12 +02:00 committed by Michal Mielewczyk
parent e1055fe262
commit 13c51041ff
35 changed files with 1224 additions and 623 deletions

50
configure vendored
View File

@ -3,23 +3,51 @@
# Copyright(c) 2012-2019 Intel Corporation # Copyright(c) 2012-2019 Intel Corporation
# SPDX-License-Identifier: BSD-3-Clause-Clear # SPDX-License-Identifier: BSD-3-Clause-Clear
# #
which dirname 2>&1 > /dev/null || { echo >&2 "Eror: missing 'dirname' utility"; exit 1; }
which realpath 2>&1 > /dev/null || { echo >&2 "Eror: missing 'realpath' utility"; exit 1; } check_util() {
which $1 2>&1 > /dev/null || { echo >&2 "Error: missing '$1' utility"; exit 1; }
}
check_util dirname
check_util realpath
check_util basename
check_util awk
SCRIPTPATH=`dirname $0` SCRIPTPATH=`dirname $0`
SCRIPTPATH=`realpath $SCRIPTPATH` SCRIPTPATH=`realpath $SCRIPTPATH`
CONFIG_FILES=`ls $SCRIPTPATH/configure.d/*.conf | sort` CONFIG_FILES=`ls $SCRIPTPATH/configure.d/*.conf | sort`
FILES_COUNT=`echo $CONFIG_FILES | wc -w`
rm -f $SCRIPTPATH/modules/generated_defines.h generate_config() {
rm -f config.out
progress=0
for file in $CONFIG_FILES; do
progress=$((progress+1))
echo -ne "Generating configuration: $progress/$FILES_COUNT\033[0K\r"
CONF="$(/bin/bash $file "check")"
echo "$(basename $file) $CONF" >> config.out
done
echo ""
}
files_count=`echo $CONFIG_FILES | wc -w` generate_header() {
progress=0 rm -f $SCRIPTPATH/modules/generated_defines.h
progress=0
for file in $CONFIG_FILES; do
progress=$((progress+1))
echo -ne "Configuring OpenCAS: $progress/$FILES_COUNT\033[0K\r"
CONF=$(cat config.out | awk -v file=$(basename $file) '{ if ($1 == file) print $2 }')
/bin/bash $file "apply" "$CONF"
done
echo ""
}
for file in $CONFIG_FILES; do if [ -z "$1" ]; then
progress=$((progress+1)) generate_config
echo -ne "Configuring OpenCAS: $progress/$files_count\033[0K\r" CONFIG_FILE="config.out"
/bin/bash $file else
done CONFIG_FILE="$1"
echo -ne " \033[0K\r" fi
generate_header

View File

@ -6,11 +6,26 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "struct bio *b;blk_rq_append_bio(NULL, &b)" "linux/blkdev.h" check() {
then if compile_module "struct bio *b;blk_rq_append_bio(NULL, &b)" "linux/blkdev.h"
add_define "cas_blk_rq_append_bio(rq, bounce_bio) \\ then
blk_rq_append_bio(rq, &bounce_bio)" echo "1"
else else
add_define "cas_blk_rq_append_bio(rq, bounce_bio) \\ echo "2"
blk_rq_append_bio(rq, bounce_bio)" fi
fi }
apply() {
case "$1" in
"1")
add_define "cas_blk_rq_append_bio(rq, bounce_bio) \\
blk_rq_append_bio(rq, &bounce_bio)" ;;
"2")
add_define "cas_blk_rq_append_bio(rq, bounce_bio) \\
blk_rq_append_bio(rq, bounce_bio)" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,12 +6,29 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "lookup_bdev(\"some_path\")" "linux/fs.h" check() {
then if compile_module "lookup_bdev(\"some_path\")" "linux/fs.h"
add_define "CAS_LOOKUP_BDEV(PATH) \\ then
lookup_bdev(PATH)" echo "1"
elif compile_module "lookup_bdev(\"some_path\", 0)" "linux/fs.h" elif compile_module "lookup_bdev(\"some_path\", 0)" "linux/fs.h"
then then
add_define "CAS_LOOKUP_BDEV(PATH) \\ echo "2"
lookup_bdev(PATH, 0)" else
fi echo "X"
fi
}
apply() {
case "$1" in
"1")
add_define "CAS_LOOKUP_BDEV(PATH) \\
lookup_bdev(PATH)" ;;
"2")
add_define "CAS_LOOKUP_BDEV(PATH) \\
lookup_bdev(PATH, 0)" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,22 +6,41 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "bio_clone(NULL, 0)" "linux/bio.h" check() {
then if compile_module "bio_clone(NULL, 0)" "linux/bio.h"
add_function "static inline struct bio *cas_bio_clone(struct bio *bio, gfp_t gfp_mask) then
{ echo "1"
return bio_clone(bio, gfp_mask); elif compile_module "bio_clone_kmalloc(NULL, 0)" "linux/bio.h"
}" then
elif compile_module "bio_clone_kmalloc(NULL, 0)" "linux/bio.h" echo "2"
then elif compile_module "bio_clone_fast(NULL, 0, NULL)" "linux/bio.h"
add_function "static inline struct bio *cas_bio_clone(struct bio *bio, gfp_t gfp_mask) then
{ echo "3"
return bio_clone_kmalloc(bio, gfp_mask); else
}" echo "X"
elif compile_module "bio_clone_fast(NULL, 0, NULL)" "linux/bio.h" fi
then }
add_function "static inline struct bio *cas_bio_clone(struct bio *bio, gfp_t gfp_mask)
{ apply() {
return bio_clone_fast(bio, gfp_mask, NULL); case "$1" in
}" "1")
fi add_function "static inline struct bio *cas_bio_clone(struct bio *bio, gfp_t gfp_mask)
{
return bio_clone(bio, gfp_mask);
}" ;;
"2")
add_function "static inline struct bio *cas_bio_clone(struct bio *bio, gfp_t gfp_mask)
{
return bio_clone_kmalloc(bio, gfp_mask);
}" ;;
"3")
add_function "static inline struct bio *cas_bio_clone(struct bio *bio, gfp_t gfp_mask)
{
return bio_clone_fast(bio, gfp_mask, NULL);
}" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,26 +6,42 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "struct bio b;b.bi_end_io(NULL, 0)" "linux/bio.h" check() {
then if compile_module "struct bio b;b.bi_end_io(NULL, 0)" "linux/bio.h"
add_define "CAS_BIO_ENDIO(BIO, BYTES_DONE, ERROR) \\ then
bio_endio(BIO, ERROR)" echo "1"
add_define "CAS_DECLARE_BLOCK_CALLBACK(name, BIO, BYTES_DONE, ERROR) \\ elif compile_module "struct bio b;b.bi_end_io(NULL)" "linux/bio.h"
void name##_callback(BIO, ERROR)" then
add_define "CAS_BLOCK_CALLBACK_ERROR(BIO, ERROR) \\ echo "2"
ERROR" else
elif compile_module "struct bio b;b.bi_end_io(NULL)" "linux/bio.h" echo "X"
then fi
add_define "CAS_BIO_ENDIO(BIO, BYTES_DONE, ERROR) \\ }
({ CAS_BIO_OP_STATUS(BIO) = ERROR; bio_endio(BIO); })"
add_define "CAS_DECLARE_BLOCK_CALLBACK(name, BIO, BYTES_DONE, ERROR) \\ apply() {
void name##_callback(BIO)" add_define "CAS_REFER_BLOCK_CALLBACK(name) \\
add_define "CAS_BLOCK_CALLBACK_ERROR(BIO, ERROR) \\ name##_callback"
CAS_BIO_OP_STATUS(BIO)" add_define "CAS_BLOCK_CALLBACK_INIT(BIO) \\
fi {; }"
add_define "CAS_REFER_BLOCK_CALLBACK(name) \\ add_define "CAS_BLOCK_CALLBACK_RETURN(BIO) \\
name##_callback" { return; }"
add_define "CAS_BLOCK_CALLBACK_INIT(BIO) \\
{; }" case "$1" in
add_define "CAS_BLOCK_CALLBACK_RETURN(BIO) \\ "1")
{ return; }" add_define "CAS_BIO_ENDIO(BIO, BYTES_DONE, ERROR) \\
bio_endio(BIO, ERROR)"
add_define "CAS_DECLARE_BLOCK_CALLBACK(name, BIO, BYTES_DONE, ERROR) \\
void name##_callback(BIO, ERROR)"
add_define "CAS_BLOCK_CALLBACK_ERROR(BIO, ERROR) \\
ERROR" ;;
"2")
add_define "CAS_BIO_ENDIO(BIO, BYTES_DONE, ERROR) \\
({ CAS_BIO_OP_STATUS(BIO) = ERROR; bio_endio(BIO); })"
add_define "CAS_DECLARE_BLOCK_CALLBACK(name, BIO, BYTES_DONE, ERROR) \\
void name##_callback(BIO)"
add_define "CAS_BLOCK_CALLBACK_ERROR(BIO, ERROR) \\
CAS_BIO_OP_STATUS(BIO)" ;;
esac
}
conf_run $@

View File

@ -5,29 +5,49 @@
# #
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
check() {
if compile_module "bio_op(NULL)" "linux/bio.h"
then
echo "1"
elif compile_module "REQ_OP_MASK" "linux/blk_types.h"
then
echo "2"
elif compile_module "REQ_OP_DISCARD" "linux/blk_types.h"
then
echo "3"
elif compile_module "REQ_DISCARD" "linux/blk_types.h"
then
echo "4"
else
echo "X"
fi
}
if compile_module "bio_op(NULL)" "linux/bio.h" apply() {
then case "$1" in
add_define "CAS_IS_DISCARD(bio) \\ "1")
(bio_op(bio) == REQ_OP_DISCARD)" add_define "CAS_IS_DISCARD(bio) \\
add_define "CAS_BIO_DISCARD \\ (bio_op(bio) == REQ_OP_DISCARD)"
(REQ_OP_DISCARD)" add_define "CAS_BIO_DISCARD \\
elif compile_module "REQ_OP_MASK" "linux/blk_types.h" (REQ_OP_DISCARD)" ;;
then "2")
add_define "CAS_IS_DISCARD(bio) \\ add_define "CAS_IS_DISCARD(bio) \\
(((CAS_BIO_OP_FLAGS(bio)) & REQ_OP_MASK) == REQ_OP_DISCARD)" (((CAS_BIO_OP_FLAGS(bio)) & REQ_OP_MASK) == REQ_OP_DISCARD)"
add_define "CAS_BIO_DISCARD \\ add_define "CAS_BIO_DISCARD \\
((REQ_OP_WRITE | REQ_OP_DISCARD))" ((REQ_OP_WRITE | REQ_OP_DISCARD))" ;;
elif compile_module "REQ_OP_DISCARD" "linux/blk_types.h" "3")
then add_define "CAS_IS_DISCARD(bio) \\
add_define "CAS_IS_DISCARD(bio) \\ ((CAS_BIO_OP_FLAGS(bio)) & REQ_OP_DISCARD)"
((CAS_BIO_OP_FLAGS(bio)) & REQ_OP_DISCARD)" add_define "CAS_BIO_DISCARD \\
add_define "CAS_BIO_DISCARD \\ ((REQ_OP_WRITE | REQ_OP_DISCARD))" ;;
((REQ_OP_WRITE | REQ_OP_DISCARD))" "4")
elif compile_module "REQ_DISCARD" "linux/blk_types.h" add_define "CAS_IS_DISCARD(bio) \\
then ((CAS_BIO_OP_FLAGS(bio)) & REQ_DISCARD)"
add_define "CAS_IS_DISCARD(bio) \\ add_define "CAS_BIO_DISCARD \\
((CAS_BIO_OP_FLAGS(bio)) & REQ_DISCARD)" (REQ_WRITE | REQ_DISCARD)" ;;
add_define "CAS_BIO_DISCARD \\ *)
(REQ_WRITE | REQ_DISCARD)" exit 1
fi esac
}
conf_run $@

View File

@ -6,12 +6,30 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "struct bio b;b.bi_status" "linux/bio.h" check() {
then if compile_module "struct bio b;b.bi_status" "linux/bio.h"
add_define "CAS_BIO_OP_STATUS(bio) \\ then
bio->bi_status" echo "1"
elif compile_module "struct bio b;b.bi_error" "linux/bio.h" elif compile_module "struct bio b;b.bi_error" "linux/bio.h"
then then
add_define "CAS_BIO_OP_STATUS(bio) \\ echo "2"
bio->bi_error" else
fi echo "X"
fi
}
apply() {
case "$1" in
"1")
add_define "CAS_BIO_OP_STATUS(bio) \\
bio->bi_status" ;;
"2")
add_define "CAS_BIO_OP_STATUS(bio) \\
bio->bi_error" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,14 +6,31 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "struct bio b;b.bi_opf" "linux/bio.h" check() {
then if compile_module "struct bio b;b.bi_opf" "linux/bio.h"
add_define "CAS_BIO_OP_FLAGS_FORMAT \"0x%016X\"" then
add_define "CAS_BIO_OP_FLAGS(bio) \\ echo "1"
(bio)->bi_opf" elif compile_module "struct bio b;b.bi_rw" "linux/bio.h"
elif compile_module "struct bio b;b.bi_rw" "linux/bio.h" then
then echo "2"
add_define "CAS_BIO_OP_FLAGS_FORMAT \"0x%016lX\"" else
add_define "CAS_BIO_OP_FLAGS(bio) \\ echo "X"
(bio)->bi_rw" fi
fi }
apply() {
case "$1" in
"1")
add_define "CAS_BIO_OP_FLAGS_FORMAT \"0x%016X\""
add_define "CAS_BIO_OP_FLAGS(bio) \\
(bio)->bi_opf" ;;
"2")
add_define "CAS_BIO_OP_FLAGS_FORMAT \"0x%016lX\""
add_define "CAS_BIO_OP_FLAGS(bio) \\
(bio)->bi_rw" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,20 +6,37 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "struct bio b;b.bi_iter.bi_size" "linux/bio.h" check() {
then if compile_module "struct bio b;b.bi_iter.bi_size" "linux/bio.h"
add_define "CAS_BIO_BISIZE(bio) \\ then
bio->bi_iter.bi_size" echo "1"
add_define "CAS_BIO_BIIDX(bio) \\ elif compile_module "struct bio b;b.bi_size" "linux/bio.h"
bio->bi_iter.bi_idx" then
add_define "CAS_BIO_BISECTOR(bio) \\ echo "2"
bio->bi_iter.bi_sector" else
elif compile_module "struct bio b;b.bi_size" "linux/bio.h" echo "X"
then fi
add_define "CAS_BIO_BISIZE(bio) \\ }
bio->bi_size"
add_define "CAS_BIO_BIIDX(bio) \\ apply() {
bio->bi_idx" case "$1" in
add_define "CAS_BIO_BISECTOR(bio) \\ "1")
bio->bi_sector" add_define "CAS_BIO_BISIZE(bio) \\
fi bio->bi_iter.bi_size"
add_define "CAS_BIO_BIIDX(bio) \\
bio->bi_iter.bi_idx"
add_define "CAS_BIO_BISECTOR(bio) \\
bio->bi_iter.bi_sector" ;;
"2")
add_define "CAS_BIO_BISIZE(bio) \\
bio->bi_size"
add_define "CAS_BIO_BIIDX(bio) \\
bio->bi_idx"
add_define "CAS_BIO_BISECTOR(bio) \\
bio->bi_sector" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,11 +6,26 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "struct bio b;&bio_iovec(&b)" "linux/bio.h" check() {
then if compile_module "struct bio b;&bio_iovec(&b)" "linux/bio.h"
add_define "CAS_SEGMENT_BVEC(vec) \\ then
(&(vec))" echo "1"
else else
add_define "CAS_SEGMENT_BVEC(vec) \\ echo "2"
(vec)" fi
fi }
apply() {
case "$1" in
"1")
add_define "CAS_SEGMENT_BVEC(vec) \\
(&(vec))" ;;
"2")
add_define "CAS_SEGMENT_BVEC(vec) \\
(vec)" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,11 +6,26 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "blk_rq_set_block_pc(NULL)" "linux/blkdev.h" check() {
then if compile_module "blk_rq_set_block_pc(NULL)" "linux/blkdev.h"
add_define "cas_blk_rq_set_block_pc(rq) \\ then
blk_rq_set_block_pc(rq)" echo "1"
else else
add_define "cas_blk_rq_set_block_pc(rq) \\ echo "2"
{}" fi
fi }
apply() {
case "$1" in
"1")
add_define "cas_blk_rq_set_block_pc(rq) \\
blk_rq_set_block_pc(rq)" ;;
"2")
add_define "cas_blk_rq_set_block_pc(rq) \\
{}" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,11 +6,26 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "deamonize(\"some_name\", NULL)" "linux/sched.h" check() {
then if compile_module "deamonize(\"some_name\", NULL)" "linux/sched.h"
add_define "CAS_DAEMONIZE(name, arg...) \\ then
daemonize(name, ##arg)" echo "1"
else else
add_define "CAS_DAEMONIZE(name, arg...) \\ echo "2"
do { } while (0)" fi
fi }
apply() {
case "$1" in
"1")
add_define "CAS_DAEMONIZE(name, arg...) \\
daemonize(name, ##arg)" ;;
"2")
add_define "CAS_DAEMONIZE(name, arg...) \\
do { } while (0)" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,12 +6,29 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "struct dentry dentry;dentry.d_u.d_alias" "linux/dcache.h" check() {
then if compile_module "struct dentry dentry;dentry.d_u.d_alias" "linux/dcache.h"
add_define "CAS_ALIAS_NODE_TO_DENTRY(alias) \\ then
container_of(alias, struct dentry, d_u.d_alias)" echo "1"
elif compile_module "struct dentry dentry;dentry.d_alias" "linux/dcache.h" elif compile_module "struct dentry dentry;dentry.d_alias" "linux/dcache.h"
then then
add_define "CAS_ALIAS_NODE_TO_DENTRY(alias) \\ echo "2"
container_of(alias, struct dentry, d_alias)" else
fi echo "X"
fi
}
apply() {
case "$1" in
"1")
add_define "CAS_ALIAS_NODE_TO_DENTRY(alias) \\
container_of(alias, struct dentry, d_u.d_alias)" ;;
"2")
add_define "CAS_ALIAS_NODE_TO_DENTRY(alias) \\
container_of(alias, struct dentry, d_alias)" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,11 +6,26 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "struct queue_limits q;q.discard_zeroes_data" "linux/blkdev.h" check() {
then if compile_module "struct queue_limits q;q.discard_zeroes_data" "linux/blkdev.h"
add_define "CAS_SET_DISCARD_ZEROES_DATA(queue_limits, val) \\ then
queue_limits.discard_zeroes_data = val" echo "1"
else else
add_define "CAS_SET_DISCARD_ZEROES_DATA(queue_limits, val) \\ echo "2"
({})" fi
fi }
apply() {
case "$1" in
"1")
add_define "CAS_SET_DISCARD_ZEROES_DATA(queue_limits, val) \\
queue_limits.discard_zeroes_data = val" ;;
"2")
add_define "CAS_SET_DISCARD_ZEROES_DATA(queue_limits, val) \\
({})" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,16 +6,33 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "REQ_PREFLUSH" "linux/blk_types.h" check() {
then if compile_module "REQ_PREFLUSH" "linux/blk_types.h"
add_define "CAS_REQ_FLUSH \\ then
REQ_PREFLUSH" echo "1"
add_define "CAS_FLUSH_SUPPORTED \\ elif compile_module "REQ_FLUSH" "linux/blk_types.h"
1" then
elif compile_module "REQ_FLUSH" "linux/blk_types.h" echo "2"
then else
add_define "CAS_REQ_FLUSH \\ echo "X"
REQ_FLUSH" fi
add_define "CAS_FLUSH_SUPPORTED \\ }
1"
fi apply() {
case "$1" in
"1")
add_define "CAS_REQ_FLUSH \\
REQ_PREFLUSH"
add_define "CAS_FLUSH_SUPPORTED \\
1" ;;
"2")
add_define "CAS_REQ_FLUSH \\
REQ_FLUSH"
add_define "CAS_FLUSH_SUPPORTED \\
1" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,80 +6,100 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if check() {
compile_module "generic_start_io_acct(NULL, 0, 0, NULL)" "linux/bio.h" if compile_module "generic_start_io_acct(NULL, 0, 0, NULL)" "linux/bio.h"
then then
add_function " echo "1"
static inline void cas_generic_start_io_acct(struct request_queue *q, elif compile_module "generic_start_io_acct(0, 0, NULL)" "linux/bio.h"
int rw, unsigned long sectors, struct hd_struct *part) { then
generic_start_io_acct(q, rw, sectors, part); echo "2"
}" elif compile_module "part_round_stats(1, 1)" "linux/genhd.h"
add_function " then
static inline void cas_generic_end_io_acct(struct request_queue *q, echo "3"
int rw, struct hd_struct *part, unsigned long start_time) elif compile_module "part_round_stats(NULL, 1, 1)" "linux/genhd.h"
{ then
generic_end_io_acct(q, rw, part, start_time); echo "4"
}" else
elif compile_module "generic_start_io_acct(0, 0, NULL)" "linux/bio.h" echo "X"
then fi
add_function " }
static inline void cas_generic_start_io_acct(struct request_queue *q,
int rw, unsigned long sectors, struct hd_struct *part) apply() {
{ case "$1" in
generic_start_io_acct(rw, sectors, part); "1")
}" add_function "
add_function " static inline void cas_generic_start_io_acct(struct request_queue *q,
static inline void cas_generic_end_io_acct(struct request_queue *q, int rw, unsigned long sectors, struct hd_struct *part) {
int rw, struct hd_struct *part, unsigned long start_time) generic_start_io_acct(q, rw, sectors, part);
{ }"
generic_end_io_acct(rw, part, start_time); add_function "
}" static inline void cas_generic_end_io_acct(struct request_queue *q,
elif compile_module "part_round_stats(1, 1)" "linux/genhd.h" int rw, struct hd_struct *part, unsigned long start_time)
then {
add_function " generic_end_io_acct(q, rw, part, start_time);
static inline void cas_generic_start_io_acct(struct request_queue *q, }" ;;
int rw, unsigned long sectors, struct hd_struct *part) "2")
{ add_function "
int cpu = part_stat_lock(); static inline void cas_generic_start_io_acct(struct request_queue *q,
part_round_stats(cpu, part); int rw, unsigned long sectors, struct hd_struct *part)
part_stat_inc(cpu, part, ios[rw]); {
part_stat_add(cpu, part, sectors[rw], sectors); generic_start_io_acct(rw, sectors, part);
part_inc_in_flight(part, rw); }"
part_stat_unlock(); add_function "
}" static inline void cas_generic_end_io_acct(struct request_queue *q,
add_function " int rw, struct hd_struct *part, unsigned long start_time)
static inline void cas_generic_end_io_acct(struct request_queue *q, {
int rw, struct hd_struct *part, unsigned long start_time) generic_end_io_acct(rw, part, start_time);
{ }" ;;
unsigned long duration = jiffies - start_time; "3")
int cpu = part_stat_lock(); add_function "
part_stat_add(cpu, part, ticks[rw], duration); static inline void cas_generic_start_io_acct(struct request_queue *q,
part_round_stats(cpu, part); int rw, unsigned long sectors, struct hd_struct *part)
part_dec_in_flight(part, rw); {
part_stat_unlock(); int cpu = part_stat_lock();
}" part_round_stats(cpu, part);
elif compile_module "part_round_stats(NULL, 1, 1)" "linux/genhd.h" part_stat_inc(cpu, part, ios[rw]);
then part_stat_add(cpu, part, sectors[rw], sectors);
add_function " part_inc_in_flight(part, rw);
static inline void cas_generic_start_io_acct(struct request_queue *q, part_stat_unlock();
int rw, unsigned long sectors, struct hd_struct *part) }"
{ add_function "
int cpu = part_stat_lock(); static inline void cas_generic_end_io_acct(struct request_queue *q,
part_round_stats(NULL, cpu, part); int rw, struct hd_struct *part, unsigned long start_time)
part_stat_inc(cpu, part, ios[rw]); {
part_stat_add(cpu, part, sectors[rw], sectors); unsigned long duration = jiffies - start_time;
part_inc_in_flight(NULL, part, rw); int cpu = part_stat_lock();
part_stat_unlock(); part_stat_add(cpu, part, ticks[rw], duration);
}" part_round_stats(cpu, part);
add_function " part_dec_in_flight(part, rw);
static inline void cas_generic_end_io_acct(struct request_queue *q, part_stat_unlock();
int rw, struct hd_struct *part, unsigned long start_time) }" ;;
{ "4")
unsigned long duration = jiffies - start_time; add_function "
int cpu = part_stat_lock(); static inline void cas_generic_start_io_acct(struct request_queue *q,
part_stat_add(cpu, part, ticks[rw], duration); int rw, unsigned long sectors, struct hd_struct *part)
part_round_stats(NULL, cpu, part); {
part_dec_in_flight(NULL, part, rw); int cpu = part_stat_lock();
part_stat_unlock(); part_round_stats(NULL, cpu, part);
}" part_stat_inc(cpu, part, ios[rw]);
fi part_stat_add(cpu, part, sectors[rw], sectors);
part_inc_in_flight(NULL, part, rw);
part_stat_unlock();
}"
add_function "
static inline void cas_generic_end_io_acct(struct request_queue *q,
int rw, struct hd_struct *part, unsigned long start_time)
{
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_unlock();
}" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,27 +6,43 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
check() {
if compile_module "global_zone_page_state(1)" "linux/mm.h"
then
echo "1"
elif compile_module "global_page_state(1)" "linux/mm.h"
then
echo "2"
else
echo "X"
fi
}
if compile_module "global_zone_page_state(1)" "linux/mm.h" apply() {
then case "$1" in
add_function " "1")
static inline unsigned long cas_global_zone_page_state(enum zone_stat_item item) add_function "
{ static inline unsigned long cas_global_zone_page_state(enum zone_stat_item item)
return global_zone_page_state(item); {
}" return global_zone_page_state(item);
add_define "CAS_BIO_SET_DEV(bio, bdev) \\ }"
bio_set_dev(bio, bdev)" add_define "CAS_BIO_SET_DEV(bio, bdev) \\
add_define "CAS_BIO_GET_DEV(bio) \\ bio_set_dev(bio, bdev)"
bio->bi_disk" add_define "CAS_BIO_GET_DEV(bio) \\
elif compile_module "global_page_state(1)" "linux/mm.h" bio->bi_disk" ;;
then "2")
add_function " add_function "
static inline unsigned long cas_global_zone_page_state(enum zone_stat_item item) static inline unsigned long cas_global_zone_page_state(enum zone_stat_item item)
{ {
return global_page_state(item); return global_page_state(item);
}" }"
add_define "CAS_BIO_SET_DEV(bio, bdev) \\ add_define "CAS_BIO_SET_DEV(bio, bdev) \\
bio->bi_bdev = bdev" bio->bi_bdev = bdev"
add_define "CAS_BIO_GET_DEV(bio) \\ add_define "CAS_BIO_GET_DEV(bio) \\
bio->bi_bdev->bd_disk" bio->bi_bdev->bd_disk" ;;
fi *)
exit 1
esac
}
conf_run $@

View File

@ -6,20 +6,37 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "struct hlist_node list" "linux/types.h" check() {
then if compile_module "struct hlist_node list" "linux/types.h"
add_define "CAS_ALIAS_NODE_TYPE \\ then
struct hlist_node" echo "1"
add_define "CAS_DENTRY_LIST_EMPTY(head) \\ elif compile_module "struct list_head list" "linux/list.h"
hlist_empty(head)" then
add_define "CAS_INODE_FOR_EACH_DENTRY(pos, head) \\ echo "2"
hlist_for_each(pos, head)" else
elif compile_module "struct list_head list" "linux/list.h" echo "X"
then fi
add_define "CAS_ALIAS_NODE_TYPE \\ }
struct list_head"
add_define "CAS_DENTRY_LIST_EMPTY(head) \\ apply() {
list_empty(head)" case "$1" in
add_define "CAS_INODE_FOR_EACH_DENTRY(pos, head) \\ "1")
list_for_each(pos, head)" add_define "CAS_ALIAS_NODE_TYPE \\
fi struct hlist_node"
add_define "CAS_DENTRY_LIST_EMPTY(head) \\
hlist_empty(head)"
add_define "CAS_INODE_FOR_EACH_DENTRY(pos, head) \\
hlist_for_each(pos, head)" ;;
"2")
add_define "CAS_ALIAS_NODE_TYPE \\
struct list_head"
add_define "CAS_DENTRY_LIST_EMPTY(head) \\
list_empty(head)"
add_define "CAS_INODE_FOR_EACH_DENTRY(pos, head) \\
list_for_each(pos, head)" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,12 +6,29 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "struct file file;file.f_inode" "linux/fs.h" check() {
then if compile_module "struct file file;file.f_inode" "linux/fs.h"
add_define "CAS_FILE_INODE(file) \\ then
file->f_inode" echo "1"
elif compile_module "struct file file;file->f_dentry->d_inode" "linux/fs.h" elif compile_module "struct file file;file->f_dentry->d_inode" "linux/fs.h"
then then
add_define "CAS_FILE_INODE(file) \\ echo "2"
file->f_dentry->d_inode" else
fi echo "X"
fi
}
apply() {
case "$1" in
"1")
add_define "CAS_FILE_INODE(file) \\
file->f_inode" ;;
"2")
add_define "CAS_FILE_INODE(file) \\
file->f_dentry->d_inode" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,34 +6,51 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "vm_munmap(0, 0)" "linux/mm.h" check() {
then if compile_module "vm_munmap(0, 0)" "linux/mm.h"
add_function " then
echo "1"
elif compile_module "do_munmap(NULL, 0)" "linux/mm.h"
then
echo "2"
else
echo "X"
fi
}
apply() {
case "$1" in
"1")
add_function "
#include <uapi/asm-generic/mman-common.h> #include <uapi/asm-generic/mman-common.h>
static inline unsigned long cas_vm_mmap(struct file *file, static inline unsigned long cas_vm_mmap(struct file *file,
unsigned long addr, unsigned long len) unsigned long addr, unsigned long len)
{ {
return vm_mmap(file, addr, len, PROT_READ | PROT_WRITE, return vm_mmap(file, addr, len, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE, 0); MAP_ANONYMOUS | MAP_PRIVATE, 0);
}" }"
add_function " add_function "
static inline int cas_vm_munmap(unsigned long start, size_t len) static inline int cas_vm_munmap(unsigned long start, size_t len)
{ {
return vm_munmap(start, len); return vm_munmap(start, len);
}" }" ;;
elif compile_module "do_munmap(NULL, 0)" "linux/mm.h" "2")
then add_function "
add_function "
#include <asm-generic/mman-common.h> #include <asm-generic/mman-common.h>
static inline unsigned long cas_vm_mmap(struct file *file, static inline unsigned long cas_vm_mmap(struct file *file,
unsigned long addr, unsigned long len) unsigned long addr, unsigned long len)
{ {
return do_mmap_pgoff(file, addr, len, PROT_READ | PROT_WRITE, return do_mmap_pgoff(file, addr, len, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE, 0); MAP_ANONYMOUS | MAP_PRIVATE, 0);
}" }"
add_function " add_function "
static inline int cas_vm_munmap(unsigned long start, size_t len) static inline int cas_vm_munmap(unsigned long start, size_t len)
{ {
return do_munmap(current->mm, start, len); return do_munmap(current->mm, start, len);
}" }" ;;
fi *)
exit 1
esac
}
conf_run $@

View File

@ -6,11 +6,26 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "blk_queue_bounce(NULL, NULL);" "linux/blkdev.h" check() {
then if compile_module "blk_queue_bounce(NULL, NULL);" "linux/blkdev.h"
add_define "cas_blk_queue_bounce(q, bounce_bio) \\ then
blk_queue_bounce(q, bounce_bio)" echo "1"
else else
add_define "cas_blk_queue_bounce(q, bounce_bio) \\ echo "2"
({})" fi
fi }
apply() {
case "$1" in
"1")
add_define "cas_blk_queue_bounce(q, bounce_bio) \\
blk_queue_bounce(q, bounce_bio)" ;;
"2")
add_define "cas_blk_queue_bounce(q, bounce_bio) \\
({})" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,11 +6,26 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "struct request_queue q;q.limits.chunk_sectors" "linux/blkdev.h" check() {
then if compile_module "struct request_queue q;q.limits.chunk_sectors" "linux/blkdev.h"
add_define "CAS_SET_QUEUE_CHUNK_SECTORS(queue, chunk_size) \\ then
queue->limits.chunk_sectors = chunk_size" echo "1"
else else
add_define "CAS_SET_QUEUE_CHUNK_SECTORS(queue, chunk_size) \\ echo "2"
{;}" fi
fi }
apply() {
case "$1" in
"1")
add_define "CAS_SET_QUEUE_CHUNK_SECTORS(queue, chunk_size) \\
queue->limits.chunk_sectors = chunk_size" ;;
"2")
add_define "CAS_SET_QUEUE_CHUNK_SECTORS(queue, chunk_size) \\
{;}" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,11 +6,26 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "blk_queue_flag_set(0, NULL)" "linux/blkdev.h" check() {
then if compile_module "blk_queue_flag_set(0, NULL)" "linux/blkdev.h"
add_define "cas_queue_flag_set_unlocked(flag, request_queue) \\ then
blk_queue_flag_set(flag, request_queue)" echo "1"
else else
add_define "cas_queue_flag_set_unlocked(flag, request_queue) \\ echo "2"
queue_flag_set_unlocked(flag, request_queue)" fi
fi }
apply() {
case "$1" in
"1")
add_define "cas_queue_flag_set_unlocked(flag, request_queue) \\
blk_queue_flag_set(flag, request_queue)" ;;
"2")
add_define "cas_queue_flag_set_unlocked(flag, request_queue) \\
queue_flag_set_unlocked(flag, request_queue)" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -7,47 +7,66 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
# RHEL 7.3 # RHEL 7.3
if compile_module "struct queue_limits q;q.limits_aux" "linux/blkdev.h" check() {
then if compile_module "struct queue_limits q;q.limits_aux" "linux/blkdev.h"
add_function " then
static inline void cas_copy_queue_limits(struct request_queue *exp_q, echo "1"
struct request_queue *cache_q, struct request_queue *core_q) elif compile_module "struct queue_limits q;q.max_write_zeroes_sectors" "linux/blkdev.h"
{ then
struct queue_limits_aux *l_aux = exp_q->limits.limits_aux; echo "2"
exp_q->limits = cache_q->limits; elif compile_module "struct queue_limits q;q.max_write_same_sectors" "linux/blkdev.h"
exp_q->limits.limits_aux = l_aux; then
if (exp_q->limits.limits_aux && cache_q->limits.limits_aux) echo "3"
*exp_q->limits.limits_aux = *cache_q->limits.limits_aux; else
exp_q->limits.max_sectors = core_q->limits.max_sectors; echo "X"
exp_q->limits.max_hw_sectors = core_q->limits.max_hw_sectors; fi
exp_q->limits.max_segments = core_q->limits.max_segments; }
exp_q->limits.max_write_same_sectors = 0;
if (queue_virt_boundary(cache_q)) apply() {
queue_flag_set(QUEUE_FLAG_NOMERGES, cache_q); case "$1" in
}" "1")
elif compile_module "struct queue_limits q;q.max_write_zeroes_sectors" "linux/blkdev.h" add_function "
then static inline void cas_copy_queue_limits(struct request_queue *exp_q,
add_function " struct request_queue *cache_q, struct request_queue *core_q)
static inline void cas_copy_queue_limits(struct request_queue *exp_q, {
struct request_queue *cache_q, struct request_queue *core_q) struct queue_limits_aux *l_aux = exp_q->limits.limits_aux;
{ exp_q->limits = cache_q->limits;
exp_q->limits = cache_q->limits; exp_q->limits.limits_aux = l_aux;
exp_q->limits.max_sectors = core_q->limits.max_sectors; if (exp_q->limits.limits_aux && cache_q->limits.limits_aux)
exp_q->limits.max_hw_sectors = core_q->limits.max_hw_sectors; *exp_q->limits.limits_aux = *cache_q->limits.limits_aux;
exp_q->limits.max_segments = core_q->limits.max_segments; exp_q->limits.max_sectors = core_q->limits.max_sectors;
exp_q->limits.max_write_same_sectors = 0; exp_q->limits.max_hw_sectors = core_q->limits.max_hw_sectors;
exp_q->limits.max_write_zeroes_sectors = 0; exp_q->limits.max_segments = core_q->limits.max_segments;
}" exp_q->limits.max_write_same_sectors = 0;
elif compile_module "struct queue_limits q;q.max_write_same_sectors" "linux/blkdev.h" if (queue_virt_boundary(cache_q))
then queue_flag_set(QUEUE_FLAG_NOMERGES, cache_q);
add_function " }" ;;
static inline void cas_copy_queue_limits(struct request_queue *exp_q, "2")
struct request_queue *cache_q, struct request_queue *core_q) add_function "
{ static inline void cas_copy_queue_limits(struct request_queue *exp_q,
exp_q->limits = cache_q->limits; struct request_queue *cache_q, struct request_queue *core_q)
exp_q->limits.max_sectors = core_q->limits.max_sectors; {
exp_q->limits.max_hw_sectors = core_q->limits.max_hw_sectors; exp_q->limits = cache_q->limits;
exp_q->limits.max_segments = core_q->limits.max_segments; exp_q->limits.max_sectors = core_q->limits.max_sectors;
exp_q->limits.max_write_same_sectors = 0; exp_q->limits.max_hw_sectors = core_q->limits.max_hw_sectors;
}" exp_q->limits.max_segments = core_q->limits.max_segments;
fi exp_q->limits.max_write_same_sectors = 0;
exp_q->limits.max_write_zeroes_sectors = 0;
}" ;;
"3")
add_function "
static inline void cas_copy_queue_limits(struct request_queue *exp_q,
struct request_queue *cache_q, struct request_queue *core_q)
{
exp_q->limits = cache_q->limits;
exp_q->limits.max_sectors = core_q->limits.max_sectors;
exp_q->limits.max_hw_sectors = core_q->limits.max_hw_sectors;
exp_q->limits.max_segments = core_q->limits.max_segments;
exp_q->limits.max_write_same_sectors = 0;
}" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,25 +6,40 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "REQ_TYPE_FS" "linux/blkdev.h" check() {
then if compile_module "REQ_TYPE_FS" "linux/blkdev.h"
add_function " then
static inline int cas_is_rq_type_fs(struct request *rq) echo "1"
{ else
return rq->cmd_type == REQ_TYPE_FS; echo "2"
}" fi
else }
add_function "
static inline int cas_is_rq_type_fs(struct request *rq) apply() {
{ case "$1" in
switch (req_op(rq)){ "1")
case REQ_OP_READ: add_function "
case REQ_OP_WRITE: static inline int cas_is_rq_type_fs(struct request *rq)
case REQ_OP_FLUSH: {
case REQ_OP_DISCARD: return rq->cmd_type == REQ_TYPE_FS;
return true; }" ;;
default: "2")
return false; add_function "
} static inline int cas_is_rq_type_fs(struct request *rq)
}" {
fi switch (req_op(rq)){
case REQ_OP_READ:
case REQ_OP_WRITE:
case REQ_OP_FLUSH:
case REQ_OP_DISCARD:
return true;
default:
return false;
}
}" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -11,34 +11,55 @@
# * it takes one argument and retuns non-void # * it takes one argument and retuns non-void
# * it takes two arguments and returns non-void # * it takes two arguments and returns non-void
# * it takse two arguments and is void-type # * it takse two arguments and is void-type
if compile_module "submit_bio(NULL)" "linux/bio.h" check() {
then if compile_module "submit_bio(NULL)" "linux/bio.h"
add_function " then
static inline blk_qc_t cas_submit_bio(int rw, struct bio *bio) echo "1"
{ elif compile_module "submit_bio(NULL)" "linux/fs.h"
CAS_BIO_OP_FLAGS(bio) |= rw; then
return submit_bio(bio); echo "2"
}" elif compile_module "void *t=submit_bio(0, NULL)" "linux/fs.h"
elif compile_module "submit_bio(NULL)" "linux/fs.h" then
then echo "3"
add_function " elif compile_module "submit_bio(0, NULL)" "linux/fs.h"
static inline blk_qc_t cas_submit_bio(int rw, struct bio *bio) then
{ echo "4"
CAS_BIO_OP_FLAGS(bio) |= rw; else
return submit_bio(bio); echo "X"
}" fi
elif compile_module "void *t=submit_bio(0, NULL)" "linux/fs.h" }
then
add_function " apply() {
static inline blk_qc_t cas_submit_bio(int rw, struct bio *bio) case "$1" in
{ "1")
return submit_bio(rw, bio); add_function "
}" static inline blk_qc_t cas_submit_bio(int rw, struct bio *bio)
elif compile_module "submit_bio(0, NULL)" "linux/fs.h" {
then CAS_BIO_OP_FLAGS(bio) |= rw;
add_function " return submit_bio(bio);
static inline void cas_submit_bio(int rw, struct bio *bio) }" ;;
{ "2")
submit_bio(rw, bio); add_function "
}" static inline blk_qc_t cas_submit_bio(int rw, struct bio *bio)
fi {
CAS_BIO_OP_FLAGS(bio) |= rw;
return submit_bio(bio);
}" ;;
"3")
add_function "
static inline blk_qc_t cas_submit_bio(int rw, struct bio *bio)
{
return submit_bio(rw, bio);
}" ;;
"4")
add_function "
static inline void cas_submit_bio(int rw, struct bio *bio)
{
submit_bio(rw, bio);
}" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,8 +6,21 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "struct bio b;b.bi_write_hint" "linux/bio.h" check() {
then if compile_module "struct bio b;b.bi_write_hint" "linux/bio.h"
add_define "CAS_WLTH_SUPPORT \\ then
1" echo "1"
fi else
echo "X"
fi
}
apply() {
case "$1" in
"1")
add_define "CAS_WLTH_SUPPORT \\
1" ;;
esac
}
conf_run $@

View File

@ -6,12 +6,29 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "WRITE" "linux/blk_types.h" check() {
then if compile_module "WRITE" "linux/blk_types.h"
add_define "CAS_RQ_DATA_DIR_WR \\ then
WRITE" echo "1"
elif compile_module "REQ_WRITE" "linux/blk_types.h" elif compile_module "REQ_WRITE" "linux/blk_types.h"
then then
add_define "CAS_RQ_DATA_DIR_WR \\ echo "2"
REQ_WRITE" else
fi echo "X"
fi
}
apply() {
case "$1" in
"1")
add_define "CAS_RQ_DATA_DIR_WR \\
WRITE" ;;
"2")
add_define "CAS_RQ_DATA_DIR_WR \\
REQ_WRITE" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,27 +6,48 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "WRITE_FUA" "linux/fs.h" check() {
then if compile_module "WRITE_FUA" "linux/fs.h"
add_define "CAS_WRITE_FUA \\ then
WRITE_FUA" if compile_module "BIO_FUA" "linux/bio.h"
if compile_module "BIO_FUA" "linux/bio.h" then
then echo "1"
add_define "CAS_IS_WRITE_FUA(flags) \\ else
((flags) & BIO_FUA)" echo "2"
else fi
add_define "CAS_IS_WRITE_FUA(flags) \\ elif compile_module "REQ_FUA" "linux/blk_types.h"
((flags) & REQ_FUA)" then
echo "3"
else
echo "4"
fi fi
elif compile_module "REQ_FUA" "linux/blk_types.h" }
then
add_define "CAS_IS_WRITE_FUA(flags) \\ apply() {
((flags) & REQ_FUA)" case "$1" in
add_define "CAS_WRITE_FUA \\ "1")
REQ_FUA" add_define "CAS_WRITE_FUA \\
else WRITE_FUA"
add_define "CAS_IS_WRITE_FUA(flags) \\ add_define "CAS_IS_WRITE_FUA(flags) \\
0" ((flags) & BIO_FUA)" ;;
add_define "CAS_WRITE_FUA \\ "2")
WRITE_BARRIER" add_define "CAS_WRITE_FUA \\
fi WRITE_FUA"
add_define "CAS_IS_WRITE_FUA(flags) \\
((flags) & REQ_FUA)" ;;
"3")
add_define "CAS_IS_WRITE_FUA(flags) \\
((flags) & REQ_FUA)"
add_define "CAS_WRITE_FUA \\
REQ_FUA" ;;
"4")
add_define "CAS_IS_WRITE_FUA(flags) \\
0"
add_define "CAS_WRITE_FUA \\
WRITE_BARRIER" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,16 +6,35 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "RQF_SOFTBARRIER" "linux/blkdev.h" check() {
then if compile_module "RQF_SOFTBARRIER" "linux/blkdev.h"
add_define "CAS_CHECK_BARRIER(bio) \\ then
((CAS_BIO_OP_FLAGS(bio) & RQF_SOFTBARRIER) != 0)" echo "1"
elif compile_module "REQ_SOFTBARRIER" "linux/blk_types.h" elif compile_module "REQ_SOFTBARRIER" "linux/blk_types.h"
then then
add_define "CAS_CHECK_BARRIER(bio) \\ echo "2"
((CAS_BIO_OP_FLAGS(bio) & REQ_SOFTBARRIER) != 0)" elif compile_module "BIO_RW_BARRIER" "linux/fs.h"
elif compile_module "BIO_RW_BARRIER" "linux/fs.h" then
then echo "3"
add_define "CAS_CHECK_BARRIER(bio) \\ else
(bio_rw_flagged((bio), BIO_RW_BARRIER))" echo "X"
fi fi
}
apply() {
case "$1" in
"1")
add_define "CAS_CHECK_BARRIER(bio) \\
((CAS_BIO_OP_FLAGS(bio) & RQF_SOFTBARRIER) != 0)" ;;
"2")
add_define "CAS_CHECK_BARRIER(bio) \\
((CAS_BIO_OP_FLAGS(bio) & REQ_SOFTBARRIER) != 0)" ;;
"3")
add_define "CAS_CHECK_BARRIER(bio) \\
(bio_rw_flagged((bio), BIO_RW_BARRIER))" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,27 +6,48 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "WRITE_FLUSH_FUA" "linux/fs.h" check() {
then if compile_module "WRITE_FLUSH_FUA" "linux/fs.h"
add_define "CAS_WRITE_FLUSH_FUA \\ then
WRITE_FLUSH_FUA" if compile_module "BIO_FUA" "linux/bio.h"
if compile_module "BIO_FUA" "linux/bio.h" then
then echo "1"
add_define "CAS_IS_WRITE_FLUSH_FUA(flags) \\ else
((BIO_FUA | BIO_FLUSH) == ((flags) & (BIO_FUA | BIO_FLUSH)))" echo "2"
else fi
add_define "CAS_IS_WRITE_FLUSH_FUA(flags) \\ elif compile_module "REQ_PREFLUSH" "linux/blk_types.h"
((REQ_FUA | CAS_REQ_FLUSH) == ((flags) & (REQ_FUA | CAS_REQ_FLUSH)))" then
echo "3"
else
echo "4"
fi fi
elif compile_module "REQ_PREFLUSH" "linux/blk_types.h" }
then
add_define "CAS_IS_WRITE_FLUSH_FUA(flags) \\ apply() {
((REQ_PREFLUSH | REQ_FUA) == ((flags) & (REQ_PREFLUSH |REQ_FUA)))" case "$1" in
add_define "CAS_WRITE_FLUSH_FUA \\ "1")
(REQ_PREFLUSH | REQ_FUA)" add_define "CAS_WRITE_FLUSH_FUA \\
else WRITE_FLUSH_FUA"
add_define "CAS_IS_WRITE_FLUSH_FUA(flags) \\ add_define "CAS_IS_WRITE_FLUSH_FUA(flags) \\
0" ((BIO_FUA | BIO_FLUSH) == ((flags) & (BIO_FUA | BIO_FLUSH)))" ;;
add_define "CAS_WRITE_FLUSH_FUA \\ "2")
WRITE_BARRIER" add_define "CAS_WRITE_FLUSH_FUA \\
fi WRITE_FLUSH_FUA"
add_define "CAS_IS_WRITE_FLUSH_FUA(flags) \\
((REQ_FUA | CAS_REQ_FLUSH) == ((flags) & (REQ_FUA | CAS_REQ_FLUSH)))" ;;
"3")
add_define "CAS_IS_WRITE_FLUSH_FUA(flags) \\
((REQ_PREFLUSH | REQ_FUA) == ((flags) & (REQ_PREFLUSH |REQ_FUA)))"
add_define "CAS_WRITE_FLUSH_FUA \\
(REQ_PREFLUSH | REQ_FUA)" ;;
"4")
add_define "CAS_IS_WRITE_FLUSH_FUA(flags) \\
0"
add_define "CAS_WRITE_FLUSH_FUA \\
WRITE_BARRIER" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,34 +6,49 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "blk_make_request(NULL, NULL, 0)" "linux/blkdev.h" check() {
then if compile_module "blk_make_request(NULL, NULL, 0)" "linux/blkdev.h"
add_function " then
static inline struct request *cas_blk_make_request(struct request_queue *q, echo "1"
struct bio *bio, gfp_t gfp_mask) else
{ echo "2"
return blk_make_request(q, bio, gfp_mask); fi
}" }
else
add_function " apply() {
static inline struct request *cas_blk_make_request(struct request_queue *q, case "$1" in
struct bio *bio, gfp_t gfp_mask) "1")
{ add_function "
struct request *rq = blk_get_request(q, bio_data_dir(bio), gfp_mask); static inline struct request *cas_blk_make_request(struct request_queue *q,
if (IS_ERR(rq)) struct bio *bio, gfp_t gfp_mask)
return rq; {
cas_blk_rq_set_block_pc(rq); return blk_make_request(q, bio, gfp_mask);
rq->q = q; }" ;;
for_each_bio(bio) { "2")
struct bio *bounce_bio = bio; add_function "
int ret; static inline struct request *cas_blk_make_request(struct request_queue *q,
cas_blk_queue_bounce(q, &bounce_bio); struct bio *bio, gfp_t gfp_mask)
ret = cas_blk_rq_append_bio(rq, bounce_bio); {
if (unlikely(ret)) { struct request *rq = blk_get_request(q, bio_data_dir(bio), gfp_mask);
blk_put_request(rq); if (IS_ERR(rq))
return ERR_PTR(ret); return rq;
cas_blk_rq_set_block_pc(rq);
rq->q = q;
for_each_bio(bio) {
struct bio *bounce_bio = bio;
int ret;
cas_blk_queue_bounce(q, &bounce_bio);
ret = cas_blk_rq_append_bio(rq, bounce_bio);
if (unlikely(ret)) {
blk_put_request(rq);
return ERR_PTR(ret);
}
} }
} return rq;
return rq; }" ;;
}" *)
fi exit 1
esac
}
conf_run $@

View File

@ -6,33 +6,50 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "blk_queue_write_cache(NULL, 0, 0)" "linux/blkdev.h" check() {
then if compile_module "blk_queue_write_cache(NULL, 0, 0)" "linux/blkdev.h"
add_define "CAS_CHECK_QUEUE_FLUSH(q) \\ then
test_bit(QUEUE_FLAG_WC, &(q)->queue_flags)" echo "1"
add_define "CAS_CHECK_QUEUE_FUA(q) \\ elif compile_module "struct request_queue rq;rq.flush_flags" "linux/blkdev.h"
test_bit(QUEUE_FLAG_FUA, &(q)->queue_flags)" then
add_function " echo "2"
static inline void cas_set_queue_flush_fua(struct request_queue *q, else
bool flush, bool fua) echo "X"
{ fi
blk_queue_write_cache(q, flush, fua); }
}"
elif compile_module "struct request_queue rq;rq.flush_flags" "linux/blkdev.h" apply() {
then case "$1" in
add_define "CAS_CHECK_QUEUE_FLUSH(q) \\ "1")
((q)->flush_flags & CAS_REQ_FLUSH)" add_define "CAS_CHECK_QUEUE_FLUSH(q) \\
add_define "CAS_CHECK_QUEUE_FUA(q) \\ test_bit(QUEUE_FLAG_WC, &(q)->queue_flags)"
((q)->flush_flags & REQ_FUA)" add_define "CAS_CHECK_QUEUE_FUA(q) \\
add_function "static inline void cas_set_queue_flush_fua(struct request_queue *q, test_bit(QUEUE_FLAG_FUA, &(q)->queue_flags)"
add_function "
static inline void cas_set_queue_flush_fua(struct request_queue *q,
bool flush, bool fua) bool flush, bool fua)
{ {
unsigned int flags = 0; blk_queue_write_cache(q, flush, fua);
if (flush) }" ;;
flags |= CAS_REQ_FLUSH; "2")
if (fua) add_define "CAS_CHECK_QUEUE_FLUSH(q) \\
flags |= REQ_FUA; ((q)->flush_flags & CAS_REQ_FLUSH)"
if (flags) add_define "CAS_CHECK_QUEUE_FUA(q) \\
blk_queue_flush(q, flags); ((q)->flush_flags & REQ_FUA)"
}" add_function "static inline void cas_set_queue_flush_fua(struct request_queue *q,
fi bool flush, bool fua)
{
unsigned int flags = 0;
if (flush)
flags |= CAS_REQ_FLUSH;
if (fua)
flags |= REQ_FUA;
if (flags)
blk_queue_flush(q, flags);
}" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -6,33 +6,56 @@
. `dirname $0`/conf_framework . `dirname $0`/conf_framework
if compile_module "WRITE_FLUSH" "linux/fs.h" check() {
then if compile_module "WRITE_FLUSH" "linux/fs.h"
add_define "CAS_RQ_IS_FLUSH(rq) \\ then
((rq)->cmd_flags & CAS_REQ_FLUSH)" if compile_module "BIO_FLUSH" "linux/bio.h"
add_define "CAS_WRITE_FLUSH \\ then
WRITE_FLUSH" echo "1"
if compile_module "BIO_FLUSH" "linux/bio.h" else
then echo "2"
add_define "CAS_IS_WRITE_FLUSH(flags) \\ fi
((flags) & BIO_FLUSH)" elif compile_module "REQ_PREFLUSH" "linux/blk_types.h"
else then
add_define "CAS_IS_WRITE_FLUSH(flags) \\ echo "3"
((flags) & CAS_REQ_FLUSH)" else
echo "4"
fi fi
elif compile_module "REQ_PREFLUSH" "linux/blk_types.h" }
then
add_define "CAS_RQ_IS_FLUSH(rq) \\ apply() {
((rq)->cmd_flags & REQ_PREFLUSH)" case "$1" in
add_define "CAS_WRITE_FLUSH \\ "1")
(REQ_OP_WRITE | REQ_PREFLUSH)" add_define "CAS_RQ_IS_FLUSH(rq) \\
add_define "CAS_IS_WRITE_FLUSH(flags) \\ ((rq)->cmd_flags & CAS_REQ_FLUSH)"
(CAS_WRITE_FLUSH == ((flags) & CAS_WRITE_FLUSH))" add_define "CAS_WRITE_FLUSH \\
else WRITE_FLUSH"
add_define "CAS_RQ_IS_FLUSH(rq) \\ add_define "CAS_IS_WRITE_FLUSH(flags) \\
0" ((flags) & BIO_FLUSH)" ;;
add_define "CAS_IS_WRITE_FLUSH(flags) \\ "2")
(WRITE_BARRIER == ((flags) & WRITE_BARRIER))" add_define "CAS_RQ_IS_FLUSH(rq) \\
add_define "CAS_WRITE_FLUSH \\ ((rq)->cmd_flags & CAS_REQ_FLUSH)"
WRITE_BARRIER" add_define "CAS_WRITE_FLUSH \\
fi WRITE_FLUSH"
add_define "CAS_IS_WRITE_FLUSH(flags) \\
((flags) & CAS_REQ_FLUSH)" ;;
"3")
add_define "CAS_RQ_IS_FLUSH(rq) \\
((rq)->cmd_flags & REQ_PREFLUSH)"
add_define "CAS_WRITE_FLUSH \\
(REQ_OP_WRITE | REQ_PREFLUSH)"
add_define "CAS_IS_WRITE_FLUSH(flags) \\
(CAS_WRITE_FLUSH == ((flags) & CAS_WRITE_FLUSH))" ;;
"4")
add_define "CAS_RQ_IS_FLUSH(rq) \\
0"
add_define "CAS_IS_WRITE_FLUSH(flags) \\
(WRITE_BARRIER == ((flags) & WRITE_BARRIER))"
add_define "CAS_WRITE_FLUSH \\
WRITE_BARRIER" ;;
*)
exit 1
esac
}
conf_run $@

View File

@ -60,4 +60,11 @@ kernel_not_supp_fail() {
exit 1 exit 1
} }
conf_run() {
case "$1" in
"check") check ;;
"apply") apply $2 ;;
esac
}
IFS='?' IFS='?'