#!/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 gendisk *disk = NULL; struct xarray xa; xa = disk->part_tbl;" "linux/blkdev.h" || compile_module $cur_name "struct gendisk *disk = NULL; struct xarray xa; xa = disk->part_tbl;" "linux/genhd.h" then echo $cur_name "1" >> $config_file_path elif compile_module $cur_name "struct gendisk *disk = NULL; struct disk_part_tbl *ptbl; ptbl = disk->part_tbl;" "linux/genhd.h" then echo $cur_name "2" >> $config_file_path else echo $cur_name "X" >> $config_file_path fi } apply() { case "$1" in "1") add_function " static inline int cas_blk_get_part_count(struct block_device *bdev) { struct block_device *part; unsigned long idx; int count = 0; xa_for_each(&bdev->bd_disk->part_tbl, idx, part) { count++; } return count; }" ;; "2") add_function " static inline int cas_blk_get_part_count(struct block_device *bdev) { struct disk_part_tbl *ptbl; int i, count = 0; rcu_read_lock(); ptbl = rcu_dereference(bdev->bd_disk->part_tbl); for (i = 0; i < ptbl->len; ++i) { if (rcu_access_pointer(ptbl->part[i])) count++; } rcu_read_unlock(); return count; }" ;; *) exit 1 esac } conf_run $@