Merge pull request #1481 from mmichal10/fput-sync

Close block devices in a synchronous manner
This commit is contained in:
Robert Baldyga 2024-07-31 08:45:33 +02:00 committed by GitHub
commit 6c0829d5ea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 32 additions and 58 deletions

View File

@ -14,15 +14,18 @@ check() {
if compile_module $cur_name "blkdev_get_by_path(NULL, 0, NULL);" "linux/blkdev.h" if compile_module $cur_name "blkdev_get_by_path(NULL, 0, NULL);" "linux/blkdev.h"
then then
echo $cur_name 1 >> $config_file_path echo $cur_name 1 >> $config_file_path
elif compile_module $cur_name "blkdev_get_by_path(NULL, 0, NULL, NULL);" "linux/blkdev.h" elif compile_module $cur_name "blkdev_get_by_path(NULL, 0, NULL, NULL);blkdev_put(NULL, FMODE_READ);" "linux/blkdev.h"
then then
echo $cur_name 2 >> $config_file_path echo $cur_name 2 >> $config_file_path
elif compile_module $cur_name "bdev_open_by_path(NULL, 0, NULL, NULL);" "linux/blkdev.h" elif compile_module $cur_name "blkdev_get_by_path(NULL, 0, NULL, NULL);blkdev_put(NULL, NULL);" "linux/blkdev.h"
then then
echo $cur_name 3 >> $config_file_path echo $cur_name 3 >> $config_file_path
elif compile_module $cur_name "bdev_file_open_by_path(NULL, 0, NULL, NULL);" "linux/blkdev.h" elif compile_module $cur_name "bdev_open_by_path(NULL, 0, NULL, NULL);" "linux/blkdev.h"
then then
echo $cur_name 4 >> $config_file_path echo $cur_name 4 >> $config_file_path
elif compile_module $cur_name "bdev_file_open_by_path(NULL, 0, NULL, NULL);" "linux/blkdev.h"
then
echo $cur_name 5 >> $config_file_path
else else
echo $cur_name X >> $config_file_path echo $cur_name X >> $config_file_path
fi fi
@ -31,29 +34,50 @@ check() {
apply() { apply() {
case "$1" in case "$1" in
"1") "1")
# Related kernel commit 0718afd47f70cf46877c39c25d06b786e1a3f36c
add_typedef "struct block_device *cas_bdev_handle_t;" add_typedef "struct block_device *cas_bdev_handle_t;"
add_define "cas_bdev_open_by_path(path, mode, holder) \\ add_define "cas_bdev_open_by_path(path, mode, holder) \\
blkdev_get_by_path(path, mode, holder)" blkdev_get_by_path(path, mode, holder)"
add_define "cas_bdev_get_from_handle(handle) \\ add_define "cas_bdev_get_from_handle(handle) \\
((struct block_device *)handle)" ;; ((struct block_device *)handle)"
add_define "cas_bdev_release(handle, mode, holder) \\
blkdev_put((struct block_device *)handle, mode)" ;;
"2") "2")
# Before kernel commit 2736e8eeb0ccdc71d1f4256c9c9a28f58cc43307
add_typedef "struct block_device *cas_bdev_handle_t;" add_typedef "struct block_device *cas_bdev_handle_t;"
add_define "cas_bdev_open_by_path(path, mode, holder) \\ add_define "cas_bdev_open_by_path(path, mode, holder) \\
blkdev_get_by_path(path, mode, holder, NULL)" blkdev_get_by_path(path, mode, holder, NULL)"
add_define "cas_bdev_get_from_handle(handle) \\ add_define "cas_bdev_get_from_handle(handle) \\
((struct block_device *)handle)" ;; ((struct block_device *)handle)"
add_define "cas_bdev_release(handle, mode, holder) \\
blkdev_put((struct block_device *)handle, mode)" ;;
"3") "3")
# From kernel commit 2736e8eeb0ccdc71d1f4256c9c9a28f58cc43307
add_typedef "struct block_device *cas_bdev_handle_t;"
add_define "cas_bdev_open_by_path(path, mode, holder) \\
blkdev_get_by_path(path, mode, holder, NULL)"
add_define "cas_bdev_get_from_handle(handle) \\
((struct block_device *)handle)"
add_define "cas_bdev_release(handle, mode, holder) \\
blkdev_put((struct block_device *)handle, holder)" ;;
"4")
# From kernel commit e719b4d156749f02eafed31a3c515f2aa9dcc72a
add_typedef "struct bdev_handle *cas_bdev_handle_t;" add_typedef "struct bdev_handle *cas_bdev_handle_t;"
add_define "cas_bdev_open_by_path(path, mode, holder) \\ add_define "cas_bdev_open_by_path(path, mode, holder) \\
bdev_open_by_path(path, mode, holder, NULL)" bdev_open_by_path(path, mode, holder, NULL)"
add_define "cas_bdev_get_from_handle(handle) \\ add_define "cas_bdev_get_from_handle(handle) \\
(handle->bdev)" ;; (handle->bdev)"
"4") add_define "cas_bdev_release(handle, mode, holder) \\
bdev_release(handle)" ;;
"5")
# From kernel commit e97d06a46526d9392cbdbd7eda193091e1af2723
add_typedef "struct file *cas_bdev_handle_t;" add_typedef "struct file *cas_bdev_handle_t;"
add_define "cas_bdev_open_by_path(path, mode, holder) \\ add_define "cas_bdev_open_by_path(path, mode, holder) \\
bdev_file_open_by_path(path, mode, holder, NULL)" bdev_file_open_by_path(path, mode, holder, NULL)"
add_define "cas_bdev_get_from_handle(handle) \\ add_define "cas_bdev_get_from_handle(handle) \\
file_bdev(handle)" ;; file_bdev(handle)"
add_define "cas_bdev_release(handle, mode, holder) \\
__fput_sync(handle)" ;;
*) *)
exit 1 exit 1
esac esac

View File

@ -1,50 +0,0 @@
#!/bin/bash
#
# Copyright(c) 2012-2022 Intel Corporation
# Copyright(c) 2024 Huawei Technologies
# 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 "blkdev_put(NULL, FMODE_READ);" "linux/blkdev.h"
then
echo $cur_name 1 >> $config_file_path
elif compile_module $cur_name "blkdev_put(NULL, NULL);" "linux/blkdev.h"
then
echo $cur_name 2 >> $config_file_path
elif compile_module $cur_name "bdev_release(NULL);" "linux/blkdev.h"
then
echo $cur_name 3 >> $config_file_path
elif compile_module $cur_name "bdev_file_open_by_path(NULL, 0, NULL, NULL);" "linux/blkdev.h"
then
echo $cur_name 4 >> $config_file_path
else
echo $cur_name X >> $config_file_path
fi
}
apply() {
case "$1" in
"1")
add_define "cas_bdev_release(handle, mode, holder) \\
blkdev_put((struct block_device *)handle, mode)" ;;
"2")
add_define "cas_bdev_release(handle, mode, holder) \\
blkdev_put((struct block_device *)handle, holder)" ;;
"3")
add_define "cas_bdev_release(handle, mode, holder) \\
bdev_release(handle)" ;;
"4")
add_define "cas_bdev_release(handle, mode, holder) \\
fput(handle)" ;;
*)
exit 1
esac
}
conf_run $@