diff --git a/configure.d/1_bdev_open_by_path.conf b/configure.d/1_bdev_open_by_path.conf index 6c5dd6cac..4782fa06b 100644 --- a/configure.d/1_bdev_open_by_path.conf +++ b/configure.d/1_bdev_open_by_path.conf @@ -14,15 +14,18 @@ check() { if compile_module $cur_name "blkdev_get_by_path(NULL, 0, NULL);" "linux/blkdev.h" then 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 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 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 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 echo $cur_name X >> $config_file_path fi @@ -31,29 +34,50 @@ check() { apply() { case "$1" in "1") + # Related kernel commit 0718afd47f70cf46877c39c25d06b786e1a3f36c 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)" 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") + # Before 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)" ;; + ((struct block_device *)handle)" + add_define "cas_bdev_release(handle, mode, holder) \\ + blkdev_put((struct block_device *)handle, mode)" ;; "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_define "cas_bdev_open_by_path(path, mode, holder) \\ bdev_open_by_path(path, mode, holder, NULL)" add_define "cas_bdev_get_from_handle(handle) \\ - (handle->bdev)" ;; - "4") + (handle->bdev)" + 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_define "cas_bdev_open_by_path(path, mode, holder) \\ bdev_file_open_by_path(path, mode, holder, NULL)" 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 esac diff --git a/configure.d/1_bdev_release.conf b/configure.d/1_bdev_release.conf deleted file mode 100644 index 1425ebf53..000000000 --- a/configure.d/1_bdev_release.conf +++ /dev/null @@ -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 $@