mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
When we have identified the current event subject to represent the re-IPL target, we record its WWID for future identification in a stateful ID-file (per default: /run/udev/chreiplzfcpmp-ipl-volume-id). In addition to the WWID, we also record the current re-IPL triplet (<Dev-Bus-ID>:<WWPN>:<LUN>), so that when that changes - e.g. due to an operator manually changing the re-IPL target -, we know that the recorded WWID is stale. This record may be used in cases when the current re-IPL target is completely gone from the system, so we can't used it as comparison object for when events arrive for paths that go to the same volume, but don't have the same I_T_L nexus. They however have the same WWID. We may use these (new) paths as replacement for the one that is completely gone. The new helper `chreipl-fcp-mpath-record-volume-identifier` uses the kernel scsi-device attribute `wwid` as source for the WWID (verbatim). As with reading the re-IPL firmware information, when writing to the ID-file, a lock is taken via `flock`, to prevent overlapping writes/reads to the file. Reviewed-by: Steffen Maier <maier@linux.ibm.com> Signed-off-by: Benjamin Block <bblock@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
56 lines
2.1 KiB
Makefile
56 lines
2.1 KiB
Makefile
# SPDX-License-Identifier: MIT
|
|
#
|
|
# chreipl-fcp-mpath: use multipath information to change FCP IPL target
|
|
# (C) Copyright IBM Corp. 2021
|
|
#
|
|
# Uses the following system-utilities (and shell-builtins):
|
|
# Utilities list in GNU Make Conventions:
|
|
# https://www.gnu.org/software/make/manual/make.html#Utilities-in-Makefiles
|
|
# GNU coreutils:
|
|
# - mktemp
|
|
|
|
#
|
|
## Paths and Build Variables
|
|
#
|
|
|
|
# https://www.gnu.org/software/make/manual/make.html#Directory-Variables
|
|
CHREIPLZFCPMPDIR = $(USRLIBDIR)/chreipl-fcp-mpath
|
|
UDEVDIR = $(USRLIBDIR)/udev
|
|
UDEVRULESDIR = $(UDEVDIR)/rules.d
|
|
UDEVRUNDIR = /run/udev
|
|
DEBUGOUTDIR = $(UDEVRUNDIR)
|
|
|
|
INSTALL_EXEC = $(INSTALL) -g $(GROUP) -o $(OWNER) --preserve-timestamps
|
|
INSTALL_DATA = $(INSTALL_EXEC) --mode=0644
|
|
|
|
# used for data exchange and synchronization across the different helpers
|
|
chreiplzfcpmp-id-file = $(UDEVRUNDIR)/chreiplzfcpmp-ipl-volume-id
|
|
# file used to implement mutual exclusion when accessing firmware IPL info:
|
|
# - this should be something that is (practically) always available, so we
|
|
# dont have to worry about fallbacks or error-handling;
|
|
# - at the same time, it should not be used by anything else with flock(2) to
|
|
# hold a lock for long periods.
|
|
chreiplzfcpmp-fwlock-file = /sys/firmware/reipl
|
|
|
|
.DELETE_ON_ERROR:
|
|
|
|
# export build-time definitions to the scripts/built-components
|
|
define chreiplzfcpmp-sed-buildvar-replace =
|
|
tmpout=$$(mktemp -p ./ .make.tmp.XXXXXXXXXXXXXXXX) && { \
|
|
$(SED) -E \
|
|
-e 's|@DEBUG@|$(if $(filter 1,$(D)),true,false)|g' \
|
|
-e 's|@chreiplzfcpmp-id-file@|$(chreiplzfcpmp-id-file)|g' \
|
|
-e 's|@chreiplzfcpmp-fwlock-file@|$(chreiplzfcpmp-fwlock-file)|g' \
|
|
-e 's|@chreiplzfcpmp-lib@|$(CHREIPLZFCPMPDIR)/chreipl-fcp-mpath-common.sh|g' \
|
|
-e 's|@debugoutdir@|$(DEBUGOUTDIR)|g' \
|
|
$(1) > $${tmpout} \
|
|
&& mv $${tmpout} $(2) \
|
|
|| { rm $${tmpout}; false; } \
|
|
; }
|
|
endef
|
|
|
|
.PHONY: clean-mk-temp
|
|
clean: clean-mk-temp
|
|
clean-mk-temp:
|
|
rm -f .make.tmp.[[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]]
|