Commit a004bb70 authored by Michal Berger's avatar Michal Berger Committed by Tomasz Zawadzki
Browse files

scripts/setup: Refactor get_block_dev_from_bdf()



Split it into get_block_dev_from_nvme() and fetch block devices
based on their subsysnqn association rather than their direct
link to the ctrl - setups where block device points at a virtual
subsystem, even though the underlying target is pcie, seem to
be possible.

Change-Id: I86b1b2db3a7f69176dcdf9e978ff3abd6b0caaf0
Signed-off-by: default avatarMichal Berger <michal.berger@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/21492


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@samsung.com>
parent 3651a300
Loading
Loading
Loading
Loading
+22 −8
Original line number Diff line number Diff line
@@ -232,21 +232,35 @@ function linux_hugetlbfs_mounts() {

function get_block_dev_from_bdf() {
	local bdf=$1
	local block blocks=() ctrl
	local block blocks=() ctrl sub

	for block in /sys/block/*; do
		if [[ $block == *nvme* ]]; then
			ctrl=$(readlink -f "$block/device") ctrl=${ctrl##*/}
			if [[ -e /sys/class/nvme/$ctrl && $(< "/sys/class/nvme/$ctrl/address") == "$bdf" ]]; then
				blocks+=("${block##*/}")
			fi
		elif [[ $(readlink -f "$block/device") == *"/$bdf/"* ]]; then
	for block in /sys/block/!(nvme*); do
		if [[ $(readlink -f "$block/device") == *"/$bdf/"* ]]; then
			blocks+=("${block##*/}")
		fi
	done

	blocks+=($(get_block_dev_from_nvme "$bdf"))

	printf '%s\n' "${blocks[@]}"
}

function get_block_dev_from_nvme() {
	local bdf=$1 block ctrl sub

	for ctrl in /sys/class/nvme/nvme*; do
		[[ -e $ctrl/address && $(< "$ctrl/address") == "$bdf" ]] || continue
		sub=$(< "$ctrl/subsysnqn") && break
	done

	[[ -n $sub ]] || return 0

	for block in /sys/block/nvme*; do
		[[ -e $block/hidden && $(< "$block/hidden") == 1 ]] && continue
		[[ $(< "$block/device/subsysnqn") == "$sub" ]] && echo "${block##*/}"
	done
}

function get_used_bdf_block_devs() {
	local bdf=$1
	local blocks block blockp dev mount holder