mirror of
https://github.com/systemd/systemd
synced 2026-03-28 09:44:50 +01:00
Compare commits
No commits in common. "f782eee68aea996c68b8cfeba5f288dae7fc876f" and "73bf0f2ace1472ceb72295e0fe5e425998af8a86" have entirely different histories.
f782eee68a
...
73bf0f2ace
@ -433,11 +433,6 @@ int read_virtual_file(const char *filename, size_t max_size, char **ret_contents
|
|||||||
}
|
}
|
||||||
|
|
||||||
n_retries--;
|
n_retries--;
|
||||||
} else if (n_retries > 1) {
|
|
||||||
/* Files in /proc are generally smaller than the page size so let's start with a page size
|
|
||||||
* buffer from malloc and only use the max buffer on the final try. */
|
|
||||||
size = MIN3(page_size() - 1, READ_VIRTUAL_BYTES_MAX, max_size);
|
|
||||||
n_retries = 1;
|
|
||||||
} else {
|
} else {
|
||||||
size = MIN(READ_VIRTUAL_BYTES_MAX, max_size);
|
size = MIN(READ_VIRTUAL_BYTES_MAX, max_size);
|
||||||
n_retries = 0;
|
n_retries = 0;
|
||||||
|
|||||||
@ -1267,14 +1267,11 @@ int server_process_datagram(
|
|||||||
/* We use NAME_MAX space for the SELinux label here. The kernel currently enforces no limit, but
|
/* We use NAME_MAX space for the SELinux label here. The kernel currently enforces no limit, but
|
||||||
* according to suggestions from the SELinux people this will change and it will probably be
|
* according to suggestions from the SELinux people this will change and it will probably be
|
||||||
* identical to NAME_MAX. For now we use that, but this should be updated one day when the final
|
* identical to NAME_MAX. For now we use that, but this should be updated one day when the final
|
||||||
* limit is known.
|
* limit is known. */
|
||||||
*
|
|
||||||
* Here, we need to explicitly initialize the buffer with zero, as glibc has a bug in
|
|
||||||
* __convert_scm_timestamps(), which assumes the buffer is initialized. See #20741. */
|
|
||||||
CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(struct ucred)) +
|
CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(struct ucred)) +
|
||||||
CMSG_SPACE_TIMEVAL +
|
CMSG_SPACE_TIMEVAL +
|
||||||
CMSG_SPACE(sizeof(int)) + /* fd */
|
CMSG_SPACE(sizeof(int)) + /* fd */
|
||||||
CMSG_SPACE(NAME_MAX) /* selinux label */) control = {};
|
CMSG_SPACE(NAME_MAX) /* selinux label */) control;
|
||||||
|
|
||||||
union sockaddr_union sa = {};
|
union sockaddr_union sa = {};
|
||||||
|
|
||||||
|
|||||||
@ -148,9 +148,8 @@ int icmp6_send_router_solicitation(int s, const struct ether_addr *ether_addr) {
|
|||||||
int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *ret_dst,
|
int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *ret_dst,
|
||||||
triple_timestamp *ret_timestamp) {
|
triple_timestamp *ret_timestamp) {
|
||||||
|
|
||||||
/* This needs to be initialized with zero. See #20741. */
|
|
||||||
CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(int)) + /* ttl */
|
CMSG_BUFFER_TYPE(CMSG_SPACE(sizeof(int)) + /* ttl */
|
||||||
CMSG_SPACE_TIMEVAL) control = {};
|
CMSG_SPACE_TIMEVAL) control;
|
||||||
struct iovec iov = {};
|
struct iovec iov = {};
|
||||||
union sockaddr_union sa = {};
|
union sockaddr_union sa = {};
|
||||||
struct msghdr msg = {
|
struct msghdr msg = {
|
||||||
|
|||||||
@ -416,8 +416,7 @@ static int manager_receive_response(sd_event_source *source, int fd, uint32_t re
|
|||||||
.iov_base = &ntpmsg,
|
.iov_base = &ntpmsg,
|
||||||
.iov_len = sizeof(ntpmsg),
|
.iov_len = sizeof(ntpmsg),
|
||||||
};
|
};
|
||||||
/* This needs to be initialized with zero. See #20741. */
|
CMSG_BUFFER_TYPE(CMSG_SPACE_TIMESPEC) control;
|
||||||
CMSG_BUFFER_TYPE(CMSG_SPACE_TIMESPEC) control = {};
|
|
||||||
union sockaddr_union server_addr;
|
union sockaddr_union server_addr;
|
||||||
struct msghdr msghdr = {
|
struct msghdr msghdr = {
|
||||||
.msg_iov = &iov,
|
.msg_iov = &iov,
|
||||||
|
|||||||
@ -1,13 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# vi: ts=4 sw=4 tw=0 et:
|
# vi: ts=4 sw=4 tw=0 et:
|
||||||
#
|
|
||||||
# TODO:
|
|
||||||
# * iSCSI
|
|
||||||
# * LVM over iSCSI (?)
|
|
||||||
# * SW raid (mdadm)
|
|
||||||
# * LUKS -> MD (mdadm) -> LVM
|
|
||||||
# * BTRFS
|
|
||||||
# * MD BTRFS
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
TEST_DESCRIPTION="systemd-udev storage tests"
|
TEST_DESCRIPTION="systemd-udev storage tests"
|
||||||
@ -38,11 +30,6 @@ test_append_files() {
|
|||||||
install_multipath
|
install_multipath
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Configure LVM
|
|
||||||
if command -v lvm; then
|
|
||||||
install_lvm
|
|
||||||
fi
|
|
||||||
|
|
||||||
for i in {0..127}; do
|
for i in {0..127}; do
|
||||||
dd if=/dev/zero of="${TESTDIR:?}/disk$i.img" bs=1M count=1
|
dd if=/dev/zero of="${TESTDIR:?}/disk$i.img" bs=1M count=1
|
||||||
echo "device$i" >"${TESTDIR:?}/disk$i.img"
|
echo "device$i" >"${TESTDIR:?}/disk$i.img"
|
||||||
@ -259,31 +246,6 @@ testcase_simultaneous_events() {
|
|||||||
test_run_one "${1:?}"
|
test_run_one "${1:?}"
|
||||||
}
|
}
|
||||||
|
|
||||||
testcase_lvm_basic() {
|
|
||||||
if ! command -v lvm; then
|
|
||||||
echo "Missing lvm tools, skipping the test..."
|
|
||||||
return 77
|
|
||||||
fi
|
|
||||||
|
|
||||||
local qemu_opts=("-device ahci,id=ahci0")
|
|
||||||
local diskpath
|
|
||||||
|
|
||||||
# Attach 4 SATA disks to the VM (and set their model and serial fields
|
|
||||||
# to something predictable, so we can refer to them later)
|
|
||||||
for i in {0..3}; do
|
|
||||||
diskpath="${TESTDIR:?}/lvmbasic${i}.img"
|
|
||||||
dd if=/dev/zero of="$diskpath" bs=1M count=32
|
|
||||||
qemu_opts+=(
|
|
||||||
"-device ide-hd,bus=ahci0.$i,drive=drive$i,model=foobar,serial=deadbeeflvm$i"
|
|
||||||
"-drive format=raw,cache=unsafe,file=$diskpath,if=none,id=drive$i"
|
|
||||||
)
|
|
||||||
done
|
|
||||||
|
|
||||||
KERNEL_APPEND="systemd.setenv=TEST_FUNCTION_NAME=${FUNCNAME[0]} ${USER_KERNEL_APPEND:-}"
|
|
||||||
QEMU_OPTIONS="${qemu_opts[*]} ${USER_QEMU_OPTIONS:-}"
|
|
||||||
test_run_one "${1:?}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Allow overriding which tests should be run from the "outside", useful for manual
|
# Allow overriding which tests should be run from the "outside", useful for manual
|
||||||
# testing (make -C test/... TESTCASES="testcase1 testcase2")
|
# testing (make -C test/... TESTCASES="testcase1 testcase2")
|
||||||
if [[ -v "TESTCASES" && -n "$TESTCASES" ]]; then
|
if [[ -v "TESTCASES" && -n "$TESTCASES" ]]; then
|
||||||
|
|||||||
@ -410,7 +410,7 @@ run_qemu() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
kernel_params+=(
|
kernel_params+=(
|
||||||
"root=LABEL=systemd_boot"
|
"root=/dev/sda1"
|
||||||
"rw"
|
"rw"
|
||||||
"raid=noautodetect"
|
"raid=noautodetect"
|
||||||
"rd.luks=0"
|
"rd.luks=0"
|
||||||
@ -896,7 +896,6 @@ install_modules() {
|
|||||||
install_dmevent() {
|
install_dmevent() {
|
||||||
instmods dm_crypt =crypto
|
instmods dm_crypt =crypto
|
||||||
inst_binary dmeventd
|
inst_binary dmeventd
|
||||||
image_install "${ROOTLIBDIR:?}"/system/dm-event.{service,socket}
|
|
||||||
if get_bool "$LOOKS_LIKE_DEBIAN"; then
|
if get_bool "$LOOKS_LIKE_DEBIAN"; then
|
||||||
# dmsetup installs 55-dm and 60-persistent-storage-dm on Debian/Ubuntu
|
# dmsetup installs 55-dm and 60-persistent-storage-dm on Debian/Ubuntu
|
||||||
# and since buster/bionic 95-dm-notify.rules
|
# and since buster/bionic 95-dm-notify.rules
|
||||||
@ -936,20 +935,6 @@ install_multipath() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
install_lvm() {
|
|
||||||
image_install lvm
|
|
||||||
image_install "${ROOTLIBDIR:?}"/system/lvm2-lvmpolld.{service,socket}
|
|
||||||
image_install "${ROOTLIBDIR:?}"/system/{blk-availability,lvm2-monitor,lvm2-pvscan@}.service
|
|
||||||
image_install "${ROOTLIBDIR:?}"/system-generators/lvm2-activation-generator
|
|
||||||
image_install -o "/lib/tmpfiles.d/lvm2.conf"
|
|
||||||
if get_bool "$LOOKS_LIKE_DEBIAN"; then
|
|
||||||
inst_rules 56-lvm.rules 69-lvm-metad.rules
|
|
||||||
else
|
|
||||||
inst_rules 11-dm-lvm.rules 69-dm-lvm-metad.rules
|
|
||||||
fi
|
|
||||||
mkdir -p "${initdir:?}/etc/lvm"
|
|
||||||
}
|
|
||||||
|
|
||||||
install_compiled_systemd() {
|
install_compiled_systemd() {
|
||||||
dinfo "Install compiled systemd"
|
dinfo "Install compiled systemd"
|
||||||
|
|
||||||
@ -1135,9 +1120,9 @@ EOF
|
|||||||
|
|
||||||
udevadm settle
|
udevadm settle
|
||||||
|
|
||||||
local label=(-L systemd_boot)
|
local label=(-L systemd)
|
||||||
# mkfs.reiserfs doesn't know -L. so, use --label instead
|
# mkfs.reiserfs doesn't know -L. so, use --label instead
|
||||||
[[ "$FSTYPE" == "reiserfs" ]] && label=(--label systemd_boot)
|
[[ "$FSTYPE" == "reiserfs" ]] && label=(--label systemd)
|
||||||
if ! mkfs -t "${FSTYPE}" "${label[@]}" "${LOOPDEV}p1" -q; then
|
if ! mkfs -t "${FSTYPE}" "${label[@]}" "${LOOPDEV}p1" -q; then
|
||||||
dfatal "Failed to mkfs -t ${FSTYPE}"
|
dfatal "Failed to mkfs -t ${FSTYPE}"
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
@ -6,7 +6,7 @@ mkdir -p /run/udev/rules.d/
|
|||||||
|
|
||||||
rm -f /run/udev/rules.d/50-testsuite.rules
|
rm -f /run/udev/rules.d/50-testsuite.rules
|
||||||
udevadm control --reload
|
udevadm control --reload
|
||||||
udevadm trigger --settle /dev/sda
|
udevadm trigger /dev/sda
|
||||||
|
|
||||||
while : ; do
|
while : ; do
|
||||||
(
|
(
|
||||||
@ -24,7 +24,7 @@ SUBSYSTEM=="block", KERNEL=="sda", OPTIONS="log_level=debug"
|
|||||||
ACTION!="remove", SUBSYSTEM=="block", KERNEL=="sda", ENV{SYSTEMD_WANTS}="foobar.service"
|
ACTION!="remove", SUBSYSTEM=="block", KERNEL=="sda", ENV{SYSTEMD_WANTS}="foobar.service"
|
||||||
EOF
|
EOF
|
||||||
udevadm control --reload
|
udevadm control --reload
|
||||||
udevadm trigger --settle /dev/sda
|
udevadm trigger /dev/sda
|
||||||
|
|
||||||
while : ; do
|
while : ; do
|
||||||
(
|
(
|
||||||
@ -42,7 +42,7 @@ SUBSYSTEM=="block", KERNEL=="sda", OPTIONS="log_level=debug"
|
|||||||
ACTION!="remove", SUBSYSTEM=="block", KERNEL=="sda", ENV{SYSTEMD_WANTS}="waldo.service"
|
ACTION!="remove", SUBSYSTEM=="block", KERNEL=="sda", ENV{SYSTEMD_WANTS}="waldo.service"
|
||||||
EOF
|
EOF
|
||||||
udevadm control --reload
|
udevadm control --reload
|
||||||
udevadm trigger --settle /dev/sda
|
udevadm trigger /dev/sda
|
||||||
|
|
||||||
while : ; do
|
while : ; do
|
||||||
(
|
(
|
||||||
@ -58,7 +58,7 @@ done
|
|||||||
rm /run/udev/rules.d/50-testsuite.rules
|
rm /run/udev/rules.d/50-testsuite.rules
|
||||||
|
|
||||||
udevadm control --reload
|
udevadm control --reload
|
||||||
udevadm trigger --settle /dev/sda
|
udevadm trigger /dev/sda
|
||||||
|
|
||||||
while : ; do
|
while : ; do
|
||||||
(
|
(
|
||||||
|
|||||||
@ -8,10 +8,10 @@ setup() {
|
|||||||
mkdir -p "${test_rule%/*}"
|
mkdir -p "${test_rule%/*}"
|
||||||
cp -f /etc/udev/udev.conf /etc/udev/udev.conf.bckp
|
cp -f /etc/udev/udev.conf /etc/udev/udev.conf.bckp
|
||||||
cat >"${test_rule}" <<EOF
|
cat >"${test_rule}" <<EOF
|
||||||
ACTION=="add", SUBSYSTEM=="mem", KERNEL=="null", OPTIONS="log_level=debug"
|
SUBSYSTEM=="net", KERNEL=="lo", OPTIONS="log_level=debug"
|
||||||
ACTION=="add", SUBSYSTEM=="mem", KERNEL=="null", PROGRAM=="/bin/sleep 60"
|
SUBSYSTEM=="net", KERNEL=="lo", PROGRAM=="/bin/sleep 60"
|
||||||
EOF
|
EOF
|
||||||
echo "event_timeout=10" >>/etc/udev/udev.conf
|
echo "event_timeout=30" >>/etc/udev/udev.conf
|
||||||
echo "timeout_signal=SIGABRT" >>/etc/udev/udev.conf
|
echo "timeout_signal=SIGABRT" >>/etc/udev/udev.conf
|
||||||
|
|
||||||
systemctl restart systemd-udevd.service
|
systemctl restart systemd-udevd.service
|
||||||
@ -28,13 +28,13 @@ teardown() {
|
|||||||
run_test() {
|
run_test() {
|
||||||
since="$(date +%T)"
|
since="$(date +%T)"
|
||||||
|
|
||||||
udevadm trigger -w --action add /dev/null
|
echo add >/sys/class/net/lo/uevent
|
||||||
|
|
||||||
for _ in {1..20}; do
|
for _ in {1..20}; do
|
||||||
|
sleep 5
|
||||||
if coredumpctl --since "$since" --no-legend --no-pager | grep /bin/udevadm ; then
|
if coredumpctl --since "$since" --no-legend --no-pager | grep /bin/udevadm ; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
sleep .5
|
|
||||||
done
|
done
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@ -15,34 +15,42 @@ ACTION=="change", SUBSYSTEM=="mem", KERNEL=="null", TAG+="changed"
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
udevadm control --reload
|
udevadm control --reload
|
||||||
udevadm trigger --settle --action add /dev/null
|
udevadm trigger -c add /dev/null
|
||||||
|
|
||||||
test -f /run/udev/tags/added/c1:3
|
while test ! -f /run/udev/tags/added/c1:3 ||
|
||||||
test ! -f /run/udev/tags/changed/c1:3
|
test -f /run/udev/tags/changed/c1:3 ||
|
||||||
udevadm info /dev/null | grep -q 'E: TAGS=.*:added:.*'
|
! udevadm info /dev/null | grep -q 'E: TAGS=.*:added:.*' ||
|
||||||
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:added:.*'
|
! udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:added:.*' ||
|
||||||
udevadm info /dev/null | grep -q 'E: TAGS=.*:changed:.*' && { echo 'unexpected TAGS='; exit 1; }
|
udevadm info /dev/null | grep -q 'E: TAGS=.*:changed:.*' ||
|
||||||
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:changed:.*' && { echo 'unexpected CURRENT_TAGS='; exit 1; }
|
|
||||||
|
|
||||||
udevadm trigger --settle --action change /dev/null
|
|
||||||
|
|
||||||
test -f /run/udev/tags/added/c1:3
|
|
||||||
test -f /run/udev/tags/changed/c1:3
|
|
||||||
udevadm info /dev/null | grep -q 'E: TAGS=.*:added:.*'
|
|
||||||
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:added:.*' && { echo 'unexpected CURRENT_TAGS='; exit 1; }
|
|
||||||
udevadm info /dev/null | grep -q 'E: TAGS=.*:changed:.*'
|
|
||||||
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:changed:.*'
|
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:changed:.*'
|
||||||
|
do
|
||||||
|
sleep .5
|
||||||
|
done
|
||||||
|
|
||||||
udevadm trigger --settle --action add /dev/null
|
|
||||||
|
|
||||||
test -f /run/udev/tags/added/c1:3
|
|
||||||
test -f /run/udev/tags/changed/c1:3
|
|
||||||
udevadm info /dev/null | grep -q 'E: TAGS=.*:added:.*'
|
|
||||||
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:added:.*'
|
|
||||||
udevadm info /dev/null | grep -q 'E: TAGS=.*:changed:.*'
|
|
||||||
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:changed:.*' && { echo 'unexpected CURRENT_TAGS='; exit 1; }
|
|
||||||
|
|
||||||
rm /run/udev/rules.d/50-testsuite.rules
|
|
||||||
udevadm control --reload
|
udevadm control --reload
|
||||||
|
udevadm trigger -c change /dev/null
|
||||||
|
|
||||||
|
while test ! -f /run/udev/tags/added/c1:3 ||
|
||||||
|
test ! -f /run/udev/tags/changed/c1:3 ||
|
||||||
|
! udevadm info /dev/null | grep -q 'E: TAGS=.*:added:.*' ||
|
||||||
|
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:added:.*' ||
|
||||||
|
! udevadm info /dev/null | grep -q 'E: TAGS=.*:changed:.*' ||
|
||||||
|
! udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:changed:.*'
|
||||||
|
do
|
||||||
|
sleep .5
|
||||||
|
done
|
||||||
|
|
||||||
|
udevadm control --reload
|
||||||
|
udevadm trigger -c add /dev/null
|
||||||
|
|
||||||
|
while test ! -f /run/udev/tags/added/c1:3 ||
|
||||||
|
test ! -f /run/udev/tags/changed/c1:3 ||
|
||||||
|
! udevadm info /dev/null | grep -q 'E: TAGS=.*:added:.*' ||
|
||||||
|
! udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:added:.*' ||
|
||||||
|
! udevadm info /dev/null | grep -q 'E: TAGS=.*:changed:.*' ||
|
||||||
|
udevadm info /dev/null | grep -q 'E: CURRENT_TAGS=.*:changed:.*'
|
||||||
|
do
|
||||||
|
sleep .5
|
||||||
|
done
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@ -10,13 +10,15 @@ ACTION=="add", SUBSYSTEM=="mem", KERNEL=="null", IMPORT{program}="/bin/echo -e H
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
udevadm control --reload
|
udevadm control --reload
|
||||||
udevadm trigger --settle --action add /dev/null
|
udevadm trigger -c add /dev/null
|
||||||
|
|
||||||
test -f /run/udev/data/c1:3
|
while : ; do
|
||||||
udevadm info /dev/null | grep -q 'E: HOGE=aa\\x20\\x20\\x20bb'
|
test -f /run/udev/data/c1:3 &&
|
||||||
udevadm info /dev/null | grep -q 'E: FOO=\\x20aaa\\x20'
|
udevadm info /dev/null | grep -q 'E: HOGE=aa\\x20\\x20\\x20bb' &&
|
||||||
|
udevadm info /dev/null | grep -q 'E: FOO=\\x20aaa\\x20' &&
|
||||||
|
break
|
||||||
|
|
||||||
rm /run/udev/rules.d/50-testsuite.rules
|
sleep .5
|
||||||
udevadm control --reload
|
done
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@ -21,15 +21,20 @@ function check() {
|
|||||||
systemctl restart systemd-udevd.service
|
systemctl restart systemd-udevd.service
|
||||||
udevadm control --ping
|
udevadm control --ping
|
||||||
udevadm settle
|
udevadm settle
|
||||||
|
sleep 1
|
||||||
check_validity
|
check_validity
|
||||||
|
|
||||||
for ((j=0;j<2;j++)); do
|
for ((j=0;j<2;j++)); do
|
||||||
udevadm trigger -w --action add --subsystem-match=block
|
udevadm trigger -w --action add --subsystem-match=block
|
||||||
|
udevadm settle
|
||||||
|
sleep 1
|
||||||
check_validity
|
check_validity
|
||||||
done
|
done
|
||||||
|
|
||||||
for ((j=0;j<2;j++)); do
|
for ((j=0;j<2;j++)); do
|
||||||
udevadm trigger -w --action change --subsystem-match=block
|
udevadm trigger -w --action change --subsystem-match=block
|
||||||
|
udevadm settle
|
||||||
|
sleep 1
|
||||||
check_validity
|
check_validity
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
@ -65,5 +70,6 @@ rm /run/udev/rules.d/00-debug.rules
|
|||||||
rm /run/udev/rules.d/50-testsuite.rules
|
rm /run/udev/rules.d/50-testsuite.rules
|
||||||
|
|
||||||
udevadm control --reload
|
udevadm control --reload
|
||||||
|
udevadm trigger -w --action add --subsystem-match=block
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@ -5,27 +5,11 @@ set -eux
|
|||||||
set -o pipefail
|
set -o pipefail
|
||||||
|
|
||||||
# Check if all symlinks under /dev/disk/ are valid
|
# Check if all symlinks under /dev/disk/ are valid
|
||||||
# shellcheck disable=SC2120
|
|
||||||
helper_check_device_symlinks() {
|
helper_check_device_symlinks() {
|
||||||
# Disable verbose logging only for this function (and reset the signal handler
|
local dev link target
|
||||||
# when leaving the function)
|
|
||||||
set +x; trap "trap - RETURN; set -x" RETURN
|
|
||||||
|
|
||||||
local dev link path paths target
|
|
||||||
|
|
||||||
[[ $# -gt 0 ]] && paths=("$@") || paths=("/dev/disk")
|
|
||||||
|
|
||||||
# Check if all given paths are valid
|
|
||||||
for path in "${paths[@]}"; do
|
|
||||||
if ! test -e "$path"; then
|
|
||||||
echo >&2 "Path '$path' doesn't exist"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
while read -r link; do
|
while read -r link; do
|
||||||
target="$(readlink -f "$link")"
|
target="$(readlink -f "$link")"
|
||||||
echo "$link -> $target"
|
|
||||||
# Both checks should do virtually the same thing, but check both to be
|
# Both checks should do virtually the same thing, but check both to be
|
||||||
# on the safe side
|
# on the safe side
|
||||||
if [[ ! -e "$link" || ! -e "$target" ]]; then
|
if [[ ! -e "$link" || ! -e "$target" ]]; then
|
||||||
@ -39,7 +23,7 @@ helper_check_device_symlinks() {
|
|||||||
echo >&2 "ERROR: symlink '$link' points to '$target' but '$dev' was expected"
|
echo >&2 "ERROR: symlink '$link' points to '$target' but '$dev' was expected"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
done < <(find "${paths[@]}" -type l)
|
done < <(find /dev/disk -type l)
|
||||||
}
|
}
|
||||||
|
|
||||||
testcase_megasas2_basic() {
|
testcase_megasas2_basic() {
|
||||||
@ -193,92 +177,6 @@ EOF
|
|||||||
rm -f "$partscript"
|
rm -f "$partscript"
|
||||||
}
|
}
|
||||||
|
|
||||||
testcase_lvm_basic() {
|
|
||||||
local i part
|
|
||||||
local vgroup="MyTestGroup$RANDOM"
|
|
||||||
local devices=(
|
|
||||||
/dev/disk/by-id/ata-foobar_deadbeeflvm{0..3}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Make sure all the necessary soon-to-be-LVM devices exist
|
|
||||||
ls -l "${devices[@]}"
|
|
||||||
|
|
||||||
# Add all test devices into a volume group, create two logical volumes,
|
|
||||||
# and check if necessary symlinks exist (and are valid)
|
|
||||||
lvm pvcreate -y "${devices[@]}"
|
|
||||||
lvm pvs
|
|
||||||
lvm vgcreate "$vgroup" -y "${devices[@]}"
|
|
||||||
lvm vgs
|
|
||||||
lvm vgchange -ay "$vgroup"
|
|
||||||
lvm lvcreate -y -L 4M "$vgroup" -n mypart1
|
|
||||||
lvm lvcreate -y -L 8M "$vgroup" -n mypart2
|
|
||||||
lvm lvs
|
|
||||||
udevadm settle
|
|
||||||
test -e "/dev/$vgroup/mypart1"
|
|
||||||
test -e "/dev/$vgroup/mypart2"
|
|
||||||
mkfs.ext4 -L mylvpart1 "/dev/$vgroup/mypart1"
|
|
||||||
udevadm settle
|
|
||||||
test -e "/dev/disk/by-label/mylvpart1"
|
|
||||||
helper_check_device_symlinks "/dev/disk" "/dev/$vgroup"
|
|
||||||
|
|
||||||
# Disable the VG and check symlinks...
|
|
||||||
lvm vgchange -an "$vgroup"
|
|
||||||
udevadm settle
|
|
||||||
test ! -e "/dev/$vgroup"
|
|
||||||
test ! -e "/dev/disk/by-label/mylvpart1"
|
|
||||||
helper_check_device_symlinks "/dev/disk"
|
|
||||||
|
|
||||||
# reenable the VG and check the symlinks again if all LVs are properly activated
|
|
||||||
lvm vgchange -ay "$vgroup"
|
|
||||||
udevadm settle
|
|
||||||
test -e "/dev/$vgroup/mypart1"
|
|
||||||
test -e "/dev/$vgroup/mypart2"
|
|
||||||
test -e "/dev/disk/by-label/mylvpart1"
|
|
||||||
helper_check_device_symlinks "/dev/disk" "/dev/$vgroup"
|
|
||||||
|
|
||||||
# Same as above, but now with more "stress"
|
|
||||||
for i in {1..100}; do
|
|
||||||
lvm vgchange -an "$vgroup"
|
|
||||||
lvm vgchange -ay "$vgroup"
|
|
||||||
|
|
||||||
if ((i % 10 == 0)); then
|
|
||||||
udevadm settle
|
|
||||||
test -e "/dev/$vgroup/mypart1"
|
|
||||||
test -e "/dev/$vgroup/mypart2"
|
|
||||||
test -e "/dev/disk/by-label/mylvpart1"
|
|
||||||
helper_check_device_symlinks "/dev/disk" "/dev/$vgroup"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Remove the first LV
|
|
||||||
lvm lvremove -y "$vgroup/mypart1"
|
|
||||||
udevadm settle
|
|
||||||
test ! -e "/dev/$vgroup/mypart1"
|
|
||||||
test -e "/dev/$vgroup/mypart2"
|
|
||||||
helper_check_device_symlinks "/dev/disk" "/dev/$vgroup"
|
|
||||||
|
|
||||||
# Create & remove LVs in a loop, i.e. with more "stress"
|
|
||||||
for i in {1..50}; do
|
|
||||||
# 1) Create 16 logical volumes
|
|
||||||
for part in {0..15}; do
|
|
||||||
lvm lvcreate -y -L 4M "$vgroup" -n "looppart$part"
|
|
||||||
done
|
|
||||||
|
|
||||||
# 2) Immediately remove them
|
|
||||||
lvm lvremove -y "$vgroup"/looppart{0..15}
|
|
||||||
|
|
||||||
# 3) On every 10th iteration settle udev and check if all partitions are
|
|
||||||
# indeed gone, and if all symlinks are still valid
|
|
||||||
if ((i % 10 == 0)); then
|
|
||||||
udevadm settle
|
|
||||||
for part in {0..15}; do
|
|
||||||
test ! -e "/dev/$vgroup/looppart$part"
|
|
||||||
done
|
|
||||||
helper_check_device_symlinks "/dev/disk" "/dev/$vgroup"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
: >/failed
|
: >/failed
|
||||||
|
|
||||||
udevadm settle
|
udevadm settle
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user