]> git.ipfire.org Git - thirdparty/dracut.git/blob - modules.d/95zfcp_rules/module-setup.sh
fc55e69ac267018010ca919c4cfeef58c69df9c2
[thirdparty/dracut.git] / modules.d / 95zfcp_rules / module-setup.sh
1 #!/bin/bash
2
3 # called by dracut
4 cmdline() {
5 is_zfcp() {
6 local _dev=$1
7 local _devpath=$(cd -P /sys/dev/block/$_dev ; echo $PWD)
8 local _sdev _scsiid _hostno _lun _wwpn _ccw _port_type
9 local _allow_lun_scan _is_npiv
10
11 _allow_lun_scan=$(cat /sys/module/zfcp/parameters/allow_lun_scan)
12 [ "${_devpath#*/sd}" == "$_devpath" ] && return 1
13 _sdev="${_devpath%%/block/*}"
14 [ -e ${_sdev}/fcp_lun ] || return 1
15 _scsiid="${_sdev##*/}"
16 _hostno="${_scsiid%%:*}"
17 [ -d /sys/class/fc_host/host${_hostno} ] || return 1
18 _port_type=$(cat /sys/class/fc_host/host${_hostno}/port_type)
19 case "$_port_type" in
20 NPIV*)
21 _is_npiv=1
22 ;;
23 esac
24 _ccw=$(cat ${_sdev}/hba_id)
25 if [ "$_is_npiv" ] && [ "$_allow_lun_scan" = "Y" ] ; then
26 echo "rd.zfcp=${_ccw}"
27 else
28 _lun=$(cat ${_sdev}/fcp_lun)
29 _wwpn=$(cat ${_sdev}/wwpn)
30 echo "rd.zfcp=${_ccw},${_wwpn},${_lun}"
31 fi
32 return 0
33 }
34 [[ $hostonly ]] || [[ $mount_needs ]] && {
35 for_each_host_dev_and_slaves_all is_zfcp
36 } | sort | uniq
37 }
38
39 # called by dracut
40 check() {
41 local _arch=$(uname -m)
42 local _ccw
43 [ "$_arch" = "s390" -o "$_arch" = "s390x" ] || return 1
44 require_binaries /usr/lib/udev/collect || return 1
45
46 [[ $hostonly ]] || [[ $mount_needs ]] && {
47 found=0
48 for _ccw in /sys/bus/ccw/devices/*/host* ; do
49 [ -d "$_ccw" ] || continue
50 found=$(($found+1));
51 done
52 [ $found -eq 0 ] && return 255
53 }
54 return 0
55 }
56
57 # called by dracut
58 depends() {
59 return 0
60 }
61
62 # called by dracut
63 install() {
64 inst_multiple /usr/lib/udev/collect
65 inst_hook cmdline 30 "$moddir/parse-zfcp.sh"
66 if [[ $hostonly_cmdline == "yes" ]] ; then
67 local _zfcp
68
69 for _zfcp in $(cmdline) ; do
70 printf "%s\n" "$_zfcp" >> "${initdir}/etc/cmdline.d/94zfcp.conf"
71 done
72 fi
73 if [[ $hostonly ]] ; then
74 inst_rules_wildcard 51-zfcp-*.rules
75 inst_rules_wildcard 41-s390x-zfcp-*.rules
76 fi
77 }