1
0
Fork 0

Merging upstream version 4.4.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-14 06:38:13 +01:00
parent d98b081a3d
commit dfe7ded19c
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
48 changed files with 181 additions and 105 deletions

View file

@ -1,3 +1,38 @@
# Release [mdadm-4.4](https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/log/?h=mdadm-4.4)
Features:
- Remobe custom bitmap file support from Yu Kuai.
- Custom device policies implementation from Mariusz Tkaczyk.
- Self encrypted drives (**SED**) support for IMSM metadata from Blazej Kucman.
- Support more than 4 disks for **IMSM** RAID10 from Mateusz Kusiak.
- Read **IMSM** license information from ACPI tables from Blazej Kucman.
- Support devnode in **--Incremental --remove** from Mariusz Tkaczyk.
- Printing **IMSM** license type in **--detail-platform** from Blazej Kucman.
- README.md from Mariusz Tkaczyk and Anna Sztukowska.
Fixes:
- Tests improvements from Xiao Ni and Kinga Stefaniuk.
- Mdmon's Checkpointing improvements from Mateusz Kusiak.
- Pass mdadm environment flags to systemd-env to enable tests from Mateusz Kusiak.
- Superblock 1.0 uuid printing fixes from Mariusz Tkaczyk.
- Find VMD bus manually if link is not available from Mariusz Tkaczyk.
- Unconditional devices count printing in --detail from Anna Sztukowska.
- Improve SIGTERM handling during reshape, from Mateusz Kusiak.
- **Monitor.c** renamed to **Mdmonitor.c** from Kinga Stefaniuk.
- Mdmonitor service documentation update from Mariusz Tkaczyk.
- Rework around writing to sysfs files from Mariusz Tkaczyk.
- Drop of HOT_REMOVE_DISK ioctl in Manage in favour of sysfs from Mariusz Tkaczyk.
- Delegate disk removal to managemon from Mariusz Tkaczyk.
- Some clean-ups of legacy code and functionalities like **--auto=md** from Mariusz Tkaczyk.
- Manual clean-up, references to old kernels removed from Mariusz Tkaczyk.
- Various static code analysis fixes.
In this release we created github repository and allowed participation through
Github. It allowed us to use Github actions adn create CI. Currently, we have:
- Compilation tests with various gcc.
- **mdadm** tests.
- Checkpatch test.
# Release [mdadm-4.3](https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/log/?h=mdadm-4.3) # Release [mdadm-4.3](https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/log/?h=mdadm-4.3)
Features: Features:

View file

@ -28,10 +28,10 @@
#include "mdadm.h" #include "mdadm.h"
#ifndef VERSION #ifndef VERSION
#define VERSION "4.3" #define VERSION "4.4"
#endif #endif
#ifndef VERS_DATE #ifndef VERS_DATE
#define VERS_DATE "2024-02-15" #define VERS_DATE "2024-11-07"
#endif #endif
#ifndef EXTRAVERSION #ifndef EXTRAVERSION
#define EXTRAVERSION "" #define EXTRAVERSION ""

View file

@ -19,7 +19,7 @@ check all nobitmap
mdadm --grow $md0 --bitmap=internal mdadm --grow $md0 --bitmap=internal
[ $? -eq '0' ] || [ $? -eq '0' ] ||
die "$NODE1: change bitmap 'none' to 'internal' failed." die "$NODE1: change bitmap 'none' to 'internal' failed."
sleep 1 sleep 2
mdadm -X $dev0 $dev1 &> /dev/null mdadm -X $dev0 $dev1 &> /dev/null
[ $? -eq '0' ] || [ $? -eq '0' ] ||
die "$NODE1: create 'internal' bitmap failed." die "$NODE1: create 'internal' bitmap failed."
@ -37,7 +37,7 @@ mdadm --grow $md0 --bitmap=clustered
[ $? -eq '0' ] || [ $? -eq '0' ] ||
die "$NODE1: change bitmap 'none' to 'clustered' failed." die "$NODE1: change bitmap 'none' to 'clustered' failed."
ssh $NODE2 mdadm -A $md0 $dev0 $dev1 ssh $NODE2 mdadm -A $md0 $dev0 $dev1
sleep 1 sleep 2
for ip in $NODES for ip in $NODES
do do
ssh $ip "mdadm -X $dev0 $dev1 | grep -q 'Cluster name'" || ssh $ip "mdadm -X $dev0 $dev1 | grep -q 'Cluster name'" ||

View file

@ -85,7 +85,7 @@ check_dlm()
crm configure clone base-clone base-group \ crm configure clone base-clone base-group \
meta interleave=true meta interleave=true
fi fi
sleep 1 sleep 2
for ip in $NODE1 $NODE2 for ip in $NODE1 $NODE2
do do
ssh $ip "pgrep dlm_controld > /dev/null" || { ssh $ip "pgrep dlm_controld > /dev/null" || {

View file

@ -5,7 +5,7 @@
.\" the Free Software Foundation; either version 2 of the License, or .\" the Free Software Foundation; either version 2 of the License, or
.\" (at your option) any later version. .\" (at your option) any later version.
.\" See file COPYING in distribution for details. .\" See file COPYING in distribution for details.
.TH MDADM 8 "" v4.3 .TH MDADM 8 "" v4.4
.SH NAME .SH NAME
mdadm \- manage MD devices mdadm \- manage MD devices
.I aka .I aka

View file

@ -1,5 +1,5 @@
.\" See file COPYING in distribution for details. .\" See file COPYING in distribution for details.
.TH MDMON 8 "" v4.3 .TH MDMON 8 "" v4.4
.SH NAME .SH NAME
mdmon \- monitor MD external metadata arrays mdmon \- monitor MD external metadata arrays

View file

@ -147,7 +147,7 @@ do
systemctl stop mdcheck_continue.timer systemctl stop mdcheck_continue.timer
exit 0; exit 0;
fi fi
sleep 120 sleep 220
done done
# We've waited, and there are still checks running. # We've waited, and there are still checks running.

24
test
View file

@ -46,12 +46,19 @@ md125=/dev/md125
mdp0=/dev/md_d0 mdp0=/dev/md_d0
mdp1=/dev/md_d1 mdp1=/dev/md_d1
SKIP=3
die() { die() {
echo -e "\n\tERROR: $* \n" echo -e "\n\tERROR: $* \n"
save_log fail save_log fail
exit 2 exit 2
} }
skip() {
echo -e "\n\tSKIPPING, REASON: $* \n"
exit $SKIP
}
ctrl_c() { ctrl_c() {
exitonerror=1 exitonerror=1
ctrl_c_error=1 ctrl_c_error=1
@ -142,11 +149,18 @@ do_test() {
succeed "succeeded\n" succeed "succeeded\n"
_fail=0 _fail=0
else else
print_time_elapsed $start_sec exit_code=$? # Capture the exit code from the script
save_log fail if [ $exit_code -eq $SKIP ]; then
_fail=1 warn "skipping"
if [ "$_broken" == "1" ]; then save_log
echo " (KNOWN BROKEN TEST: $_broken_msg)" _fail=0
else
print_time_elapsed $start_sec
save_log fail
_fail=1
if [ "$_broken" == "1" ]; then
echo " (KNOWN BROKEN TEST: $_broken_msg)"
fi
fi fi
fi fi
restore_system_speed_limit restore_system_speed_limit

View file

@ -8,7 +8,7 @@ check resync
mdadm $md0 --fail $dev2 mdadm $md0 --fail $dev2
check resync check resync
mdadm $md0 --fail $dev1 mdadm $md0 --fail $dev1
sleep 1 sleep 2
check nosync check nosync
check state U___ check state U___
mdadm $md0 --add $dev4 $dev3 mdadm $md0 --add $dev4 $dev3

View file

@ -7,7 +7,7 @@
mdadm -CR $md0 -l5 -n4 $dev0 $dev1 $dev2 $dev3 mdadm -CR $md0 -l5 -n4 $dev0 $dev1 $dev2 $dev3
check recovery check recovery
mdadm $md0 --fail $dev3 mdadm $md0 --fail $dev3
sleep 1 sleep 2
check nosync check nosync
check state UUU_ check state UUU_

View file

@ -33,7 +33,7 @@ do
mdadm $md0 --add $dev1 $dev5 mdadm $md0 --add $dev1 $dev5
mdadm $md0 --replace $dev0 mdadm $md0 --replace $dev0
sleep 1 sleep 2
mdadm $md0 --fail $dev2 mdadm $md0 --fail $dev2
check wait check wait
sum2=`sha1sum < $md0` sum2=`sha1sum < $md0`
@ -42,7 +42,7 @@ do
mdadm $md0 --remove $dev0 $dev2 mdadm $md0 --remove $dev0 $dev2
mdadm $md0 --add $dev0 $dev2 mdadm $md0 --add $dev0 $dev2
mdadm $md0 --replace $dev3 mdadm $md0 --replace $dev3
sleep 1 sleep 2
mdadm $md0 --fail $dev0 $dev2 mdadm $md0 --fail $dev0 $dev2
check wait check wait
sum3=`sha1sum < $md0` sum3=`sha1sum < $md0`

View file

@ -2,7 +2,7 @@
# make a raid5 array, byte swap the superblocks, then assemble... # make a raid5 array, byte swap the superblocks, then assemble...
mdadm -CR $md0 -e 0.90 -l5 -n4 $dev0 $dev1 $dev2 $dev3 mdadm -CR $md0 -e 0.90 -l5 -n4 $dev0 $dev1 $dev2 $dev3
sleep 4 sleep 6
mdadm -S $md0 mdadm -S $md0
mdadm -E --metadata=0 $dev1 > $targetdir/d1 mdadm -E --metadata=0 $dev1 > $targetdir/d1

View file

@ -8,11 +8,11 @@ testdev $md0 1 $mdsize1a 64
#mdadm -E $dev1 #mdadm -E $dev1
mdadm --grow $md0 --bitmap=internal --bitmap-chunk=4 --delay=1 || { mdadm -X $dev2 ; exit 1; } mdadm --grow $md0 --bitmap=internal --bitmap-chunk=4 --delay=1 || { mdadm -X $dev2 ; exit 1; }
sleep 4 sleep 6
dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
testdev $md0 1 $mdsize1a 64 testdev $md0 1 $mdsize1a 64
sleep 4 sleep 6
dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty1 -ne 0 -o $dirty2 -ne 0 ] if [ $dirty1 -ne 0 -o $dirty2 -ne 0 ]

View file

@ -8,11 +8,11 @@ testdev $md0 1 $mdsize1b 64
#mdadm -E $dev1 #mdadm -E $dev1
mdadm --grow $md0 --bitmap=internal --bitmap-chunk=4 --delay=1 mdadm --grow $md0 --bitmap=internal --bitmap-chunk=4 --delay=1
sleep 4 sleep 6
dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
testdev $md0 1 $mdsize1b 64 testdev $md0 1 $mdsize1b 64
sleep 4 sleep 6
dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty1 -ne 0 -o $dirty2 -ne 0 ] if [ $dirty1 -ne 0 -o $dirty2 -ne 0 ]

View file

@ -9,7 +9,7 @@ mdadm -S $md0
mdadm --assemble $md0 $dev1 $dev2 mdadm --assemble $md0 $dev1 $dev2
testdev $md0 1 $mdsize0 64 testdev $md0 1 $mdsize0 64
sleep 4 sleep 6
dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty1 -ne 0 ] if [ $dirty1 -ne 0 ]
@ -18,7 +18,7 @@ then echo >&2 "ERROR bad 'dirty' counts: $dirty1"
fi fi
mdadm $md0 -f $dev1 mdadm $md0 -f $dev1
testdev $md0 1 $mdsize0 64 testdev $md0 1 $mdsize0 64
sleep 4 sleep 6
total=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) bits.*/\1/p'` total=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) bits.*/\1/p'`
dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty2 -ne $total ] if [ $dirty2 -ne $total ]
@ -34,7 +34,7 @@ mdadm $md0 --add $dev1
check recovery check recovery
check wait check wait
sleep 4 sleep 6
dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty3 -ne 0 ] if [ $dirty3 -ne 0 ]

View file

@ -10,7 +10,7 @@ mdadm -S $md0
mdadm --assemble $md0 $dev1 $dev2 mdadm --assemble $md0 $dev1 $dev2
testdev $md0 1 $mdsize1b 64 testdev $md0 1 $mdsize1b 64
sleep 4 sleep 6
dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty1 -ne 0 ] if [ $dirty1 -ne 0 ]
@ -19,7 +19,7 @@ then echo >&2 "ERROR bad 'dirty' counts: $dirty1"
fi fi
mdadm $md0 -f $dev1 mdadm $md0 -f $dev1
testdev $md0 1 $mdsize1b 64 testdev $md0 1 $mdsize1b 64
sleep 4 sleep 6
total=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) bits.*/\1/p'` total=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) bits.*/\1/p'`
dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty2 -ne $total ] if [ $dirty2 -ne $total ]
@ -35,7 +35,7 @@ mdadm $md0 --add $dev1
check recovery check recovery
check wait check wait
sleep 4 sleep 6
dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty3 -ne 0 ] if [ $dirty3 -ne 0 ]

View file

@ -11,7 +11,7 @@ mdadm -S $md0
mdadm --assemble $md0 $dev1 $dev2 mdadm --assemble $md0 $dev1 $dev2
check bitmap check bitmap
testdev $md0 1 $mdsize11 64 testdev $md0 1 $mdsize11 64
sleep 4 sleep 6
dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty1 -ne 0 ] if [ $dirty1 -ne 0 ]
@ -20,7 +20,7 @@ then echo >&2 "ERROR bad 'dirty' counts: $dirty1"
fi fi
mdadm $md0 -f $dev1 mdadm $md0 -f $dev1
testdev $md0 1 $mdsize11 64 testdev $md0 1 $mdsize11 64
sleep 4 sleep 6
total=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) bits.*/\1/p'` total=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) bits.*/\1/p'`
dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty2 -ne $total ] if [ $dirty2 -ne $total ]
@ -35,7 +35,7 @@ mdadm --assemble -R $md0 $dev2
mdadm $md0 --add $dev1 mdadm $md0 --add $dev1
check recovery check recovery
check wait check wait
sleep 4 sleep 6
dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty3 -ne 0 ] if [ $dirty3 -ne 0 ]

View file

@ -10,7 +10,7 @@ mdadm -S $md0
mdadm --assemble $md0 $dev1 $dev2 mdadm --assemble $md0 $dev1 $dev2
testdev $md0 1 $mdsize12 64 testdev $md0 1 $mdsize12 64
sleep 4 sleep 6
dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty1 -ne 0 ] if [ $dirty1 -ne 0 ]
@ -19,7 +19,7 @@ then echo >&2 "ERROR bad 'dirty' counts: $dirty1"
fi fi
mdadm $md0 -f $dev1 mdadm $md0 -f $dev1
testdev $md0 1 $mdsize12 64 testdev $md0 1 $mdsize12 64
sleep 4 sleep 6
total=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) bits.*/\1/p'` total=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) bits.*/\1/p'`
dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty2 -ne $total ] if [ $dirty2 -ne $total ]
@ -35,7 +35,7 @@ mdadm $md0 --add $dev1
check recovery check recovery
check wait check wait
sleep 4 sleep 6
dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty3 -ne 0 ] if [ $dirty3 -ne 0 ]

View file

@ -9,17 +9,17 @@ mdadm -CR $md0 -l1 -n2 -binternal --bitmap-chunk=4 -d1 $dev1 $dev2
check resync check resync
check wait check wait
testdev $md0 1 $mdsize1a 64 testdev $md0 1 $mdsize1a 64
sleep 4 sleep 6
mdadm $md0 -f $dev2 mdadm $md0 -f $dev2
sleep 1 sleep 2
mdadm $md0 -r $dev2 mdadm $md0 -r $dev2
mdadm $md0 -a $dev2 mdadm $md0 -a $dev2
#cat /proc/mdstat #cat /proc/mdstat
check nosync check nosync
mdadm $md0 -f $dev2 mdadm $md0 -f $dev2
sleep 1 sleep 2
mdadm $md0 -r $dev2 mdadm $md0 -r $dev2
testdev $md0 1 $mdsize1a 64 testdev $md0 1 $mdsize1a 64
mdadm $md0 -a $dev2 mdadm $md0 -a $dev2
@ -27,7 +27,7 @@ check wait
blockdev --flushbufs $dev1 $dev2 blockdev --flushbufs $dev1 $dev2
cmp --ignore-initial=$[64*512] --bytes=$[$mdsize0*1024] $dev1 $dev2 cmp --ignore-initial=$[64*512] --bytes=$[$mdsize0*1024] $dev1 $dev2
mdadm $md0 -f $dev2; sleep 1 mdadm $md0 -f $dev2; sleep 2
mdadm $md0 -r $dev2 mdadm $md0 -r $dev2
if dd if=/dev/zero of=$md0 ; then : ; fi if dd if=/dev/zero of=$md0 ; then : ; fi
blockdev --flushbufs $md0 # ensure writes have been sent. blockdev --flushbufs $md0 # ensure writes have been sent.

View file

@ -3,13 +3,14 @@
# readd should fail. # readd should fail.
# #
mdadm -B $md0 -l1 -n2 -d1 $dev1 $dev2 mdadm -B $md0 -l1 -n2 -d1 $dev1 $dev2
sleep 2
check resync check resync
check wait check wait
testdev $md0 1 $size 1 testdev $md0 1 $size 1
sleep 4 sleep 6
mdadm $md0 -f $dev2 mdadm $md0 -f $dev2
sleep 1 sleep 2
mdadm $md0 -r $dev2 mdadm $md0 -r $dev2
if mdadm $md0 --re-add $dev2; then if mdadm $md0 --re-add $dev2; then
err "re-add should fail" err "re-add should fail"

View file

@ -9,7 +9,7 @@ mdadm -S $md0
mdadm --assemble $md0 $dev1 $dev2 $dev3 mdadm --assemble $md0 $dev1 $dev2 $dev3
testdev $md0 2 $mdsize1 512 testdev $md0 2 $mdsize1 512
sleep 4 sleep 6
dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty1=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty1 -ne 0 ] if [ $dirty1 -ne 0 ]
@ -18,7 +18,7 @@ then echo >&2 "ERROR bad 'dirty' counts: $dirty1"
fi fi
mdadm $md0 -f $dev1 mdadm $md0 -f $dev1
testdev $md0 2 $mdsize1 512 testdev $md0 2 $mdsize1 512
sleep 4 sleep 6
dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty2=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty2 -lt 400 ] if [ $dirty2 -lt 400 ]
then then
@ -33,7 +33,7 @@ mdadm --zero $dev1 # force --add, not --re-add
mdadm $md0 --add $dev1 mdadm $md0 --add $dev1
check recovery check recovery
check wait check wait
sleep 4 sleep 6
dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'` dirty3=`mdadm -X $dev2 | sed -n -e 's/.*Bitmap.* \([0-9]*\) dirty.*/\1/p'`
if [ $dirty3 -ne 0 ] if [ $dirty3 -ne 0 ]

View file

@ -4,28 +4,28 @@ set -x -e
# then reshape back up to RAID5 and RAID5 # then reshape back up to RAID5 and RAID5
mdadm -CR $md0 -l6 -n5 $dev0 $dev1 $dev2 $dev3 $dev4 mdadm -CR $md0 -l6 -n5 $dev0 $dev1 $dev2 $dev3 $dev4
check wait; sleep 1 check wait; sleep 2
check raid6 check raid6
testdev $md0 3 19456 512 testdev $md0 3 19456 512
mdadm -G $md0 -l5 mdadm -G $md0 -l5
check wait; sleep 1 check wait; sleep 2
check raid5 check raid5
testdev $md0 3 19456 512 testdev $md0 3 19456 512
mdadm -G $md0 -l0 mdadm -G $md0 -l0
check wait; sleep 1 check wait; sleep 2
while ps auxf | grep "mdadm -G" | grep -v grep while ps auxf | grep "mdadm -G" | grep -v grep
do do
sleep 1 sleep 2
done done
check raid0 check raid0
testdev $md0 3 19456 512 testdev $md0 3 19456 512
mdadm -G $md0 -l5 --add $dev3 $dev4 mdadm -G $md0 -l5 --add $dev3 $dev4
check wait; sleep 1 check wait; sleep 2
check raid5 check raid5
check algorithm 2 check algorithm 2
testdev $md0 3 19456 512 testdev $md0 3 19456 512
mdadm -G $md0 -l 6 mdadm -G $md0 -l 6
check wait; sleep 1 check wait; sleep 2
check raid6 check raid6
check algorithm 2 check algorithm 2
testdev $md0 3 19456 512 testdev $md0 3 19456 512

View file

@ -45,6 +45,7 @@ mdadm -CR $md2 -l1 -n2 $dev2 $dev3
mdadm -CR $md0 -l0 -n2 $md1 $md2 mdadm -CR $md0 -l0 -n2 $md1 $md2
mdadm -Ss mdadm -Ss
mdadm -As -c /dev/null mdadm -As -c /dev/null
cat /proc/mdstat # For logs
if [ $is_foreign == "yes" ]; then if [ $is_foreign == "yes" ]; then
# md127 is md1 # md127 is md1
testdev $md127 1 $mdsize1a 64 testdev $md127 1 $mdsize1a 64
@ -55,6 +56,6 @@ if [ $is_foreign == "yes" ]; then
else else
testdev $md1 1 $mdsize1a 64 testdev $md1 1 $mdsize1a 64
testdev $md2 1 $mdsize1a 64 testdev $md2 1 $mdsize1a 64
testdev $md0 2 $mdsize11a 512 testdev $md127 2 $mdsize11a 512
fi fi
mdadm -Ss mdadm -Ss

View file

@ -5,12 +5,7 @@
# put a partition on each, create an array, and see if we can # put a partition on each, create an array, and see if we can
# use autodetect to restart the array. # use autodetect to restart the array.
if lsmod | grep md_mod > /dev/null 2>&1 [if lsmod | grep md_mod > /dev/null 2>&1] || skip "md is a module - cannot test autodetect"
then
echo md is a module - cannot test autodetect
exit 0
fi
mdadm -CR -e 0 $mdp0 -l0 -f -n1 $dev0 mdadm -CR -e 0 $mdp0 -l0 -f -n1 $dev0
mdadm -CR -e 0 $mdp1 -l0 -f -n1 $dev1 mdadm -CR -e 0 $mdp1 -l0 -f -n1 $dev1
@ -23,6 +18,7 @@ sfdisk $mdp1 >&2 << END
END END
udevadm settle udevadm settle
mdadm -CR -e 0 $md0 -l1 -n2 ${mdp0}p1 ${mdp1}p1 mdadm -CR -e 0 $md0 -l1 -n2 ${mdp0}p1 ${mdp1}p1
sleep 2
check resync check resync
check raid1 check raid1
check wait check wait

View file

@ -12,7 +12,7 @@ checkgeo() {
shift shift
sleep 0.5 sleep 0.5
check wait check wait
sleep 1 sleep 2
for attr in level raid_disks chunk_size layout for attr in level raid_disks chunk_size layout
do do
if [ $# -gt 0 ] ; then if [ $# -gt 0 ] ; then

View file

@ -23,9 +23,9 @@ checkgeo() {
# level raid_disks chunk_size layout # level raid_disks chunk_size layout
dev=$1 dev=$1
shift shift
sleep 15 sleep 25
check wait check wait
sleep 1 sleep 2
for attr in level raid_disks chunk_size layout for attr in level raid_disks chunk_size layout
do do
if [ $# -gt 0 ] ; then if [ $# -gt 0 ] ; then

View file

@ -0,0 +1,7 @@
Fails in multiple ways.
There are issues with RAID6:
- R5 -> R6 migration makes md unresponsive
- R6 -> R5 migration fails
Not worth investigating this now, marking as broken to clear the CI.

View file

@ -58,7 +58,7 @@ l5[4]=parity-first
l5[5]=parity-last l5[5]=parity-last
for layout in 0 1 2 3 4 5 0 for layout in 0 1 2 3 4 5 0
do do
mdadm -G $md0 --layout=${l5[$layout]} --backup-file $bu mdadm -G $md0 --layout=${l5[$layout]}
checkgeo md0 raid5 5 $[512*1024] $layout checkgeo md0 raid5 5 $[512*1024] $layout
dotest 4 dotest 4
done done
@ -85,7 +85,7 @@ l6[19]=right-symmetric-6
l6[20]=parity-first-6 l6[20]=parity-first-6
for layout in 0 1 2 3 4 5 8 9 10 16 17 18 19 20 0 for layout in 0 1 2 3 4 5 8 9 10 16 17 18 19 20 0
do do
mdadm -G $md0 --layout=${l6[$layout]} --backup-file $bu mdadm -G $md0 --layout=${l6[$layout]}
checkgeo md0 raid6 5 $[512*1024] $layout checkgeo md0 raid6 5 $[512*1024] $layout
dotest 3 dotest 3
done done

View file

@ -38,7 +38,7 @@ do
if [[ $(echo check > /sys/block/md0/md/sync_action) != 0 ]]; then if [[ $(echo check > /sys/block/md0/md/sync_action) != 0 ]]; then
break; break;
fi fi
sleep 1 sleep 2
done done
if [[ i == max ]]; then if [[ i == max ]]; then

View file

@ -5,6 +5,9 @@
# shaped md arrays. # shaped md arrays.
set -x set -x
dir="." dir="."
[ -e $dir/test_stripe ] || skip "test_stripes binary has not been compiled, skipping"
layouts=(la ra ls rs) layouts=(la ra ls rs)
for level in 5 6 for level in 5 6
do do

View file

@ -12,12 +12,23 @@ imsm_check_hold() {
} }
imsm_check_removal() { imsm_check_removal() {
if ! mdadm --remove $1 $2 ; then local ret=5
echo "$2 removal from $1 should have succeeded" >&2 local success=0
cat /proc/mdstat >&2
mdadm -E $2 for ((i=1; i<=ret; i++)); do
exit 1 if mdadm --remove "$1" "$2"; then
fi success=1
break
fi
sleep 2
done
if [ $success -ne 1 ]; then
echo "$2 removal from $1 should have succeeded" >&2
cat /proc/mdstat >&2
mdadm -E "$2"
exit 1
fi
} }
export IMSM_DEVNAME_AS_SERIAL=1 export IMSM_DEVNAME_AS_SERIAL=1

View file

@ -16,7 +16,7 @@ mdadm --wait $member0 || true
mdadm --wait $member1 || true mdadm --wait $member1 || true
mdadm -Ss mdadm -Ss
sleep 1 sleep 2
# Add all devices except those for $member0 # Add all devices except those for $member0
mdadm -I $dev10 mdadm -I $dev10

View file

@ -0,0 +1,5 @@
Fails due to segmentation fault at assemble.
Too much effort to diagnose this now, marking as broken to make CI clear.
++ /usr/sbin/mdadm -A /dev/md/ddf0 /dev/loop8 /dev/loop9 /dev/loop10 /dev/loop11 /dev/loop12
./test: line 76: 101955 Segmentation fault (core dumped) $mdadm "$@" 2> $targetdir/stderr

View file

@ -17,7 +17,7 @@ set -- $(get_raiddisks $member0)
fail0=$1 fail0=$1
mdadm $member0 --fail $fail0 mdadm $member0 --fail $fail0
sleep 1 sleep 2
mdadm $container --remove $fail0 mdadm $container --remove $fail0
set -- $(get_raiddisks $member0) set -- $(get_raiddisks $member0)
@ -27,7 +27,7 @@ good0=$1
# We re-add the disk now # We re-add the disk now
mdadm $container --add $fail0 mdadm $container --add $fail0
sleep 1 sleep 2
mdadm --wait $member0 || true mdadm --wait $member0 || true
ret=0 ret=0

View file

@ -16,7 +16,7 @@ set -- $(get_raiddisks $member0)
fail0=$1 fail0=$1
mdadm $member0 --fail $fail0 mdadm $member0 --fail $fail0
sleep 1 sleep 2
set -- $(get_raiddisks $member0) set -- $(get_raiddisks $member0)
case $1 in MISSING) shift;; esac case $1 in MISSING) shift;; esac
good0=$1 good0=$1
@ -44,7 +44,7 @@ mdadm $container --remove $fail0
# We re-add the disk now # We re-add the disk now
mdadm $container --add $fail0 mdadm $container --add $fail0
sleep 1 sleep 2
mdadm --wait $member0 || true mdadm --wait $member0 || true
set -- $(get_raiddisks $member0) set -- $(get_raiddisks $member0)

View file

@ -18,7 +18,7 @@ set -- $(get_raiddisks $member0)
fail0=$1 fail0=$1
mdadm $member0 --fail $fail0 mdadm $member0 --fail $fail0
sleep 1 sleep 2
mdadm $container --remove $fail0 mdadm $container --remove $fail0
set -- $(get_raiddisks $member0) set -- $(get_raiddisks $member0)
@ -27,7 +27,7 @@ good0=$1
mdadm -Ss mdadm -Ss
sleep 1 sleep 2
# Now simulate incremental assembly # Now simulate incremental assembly
mdadm -I $good0 mdadm -I $good0
mdadm -IRs || true mdadm -IRs || true
@ -38,7 +38,7 @@ mke2fs -F $member0
# We re-add the disk now # We re-add the disk now
mdadm $container --add $fail0 mdadm $container --add $fail0
sleep 1 sleep 2
mdadm --wait $member0 || true mdadm --wait $member0 || true
ret=0 ret=0

View file

@ -23,7 +23,7 @@ sum0=$(sha1sum $member0)
sum1=$(sha1sum $member1) sum1=$(sha1sum $member1)
mdadm --fail $member1 $dev11 mdadm --fail $member1 $dev11
sleep 1 sleep 2
mdadm --fail $member1 $dev12 mdadm --fail $member1 $dev12
# We will have 4 resync procedures, 2 spares for 2 arrays. # We will have 4 resync procedures, 2 spares for 2 arrays.

View file

@ -23,7 +23,7 @@ sha_0a=$(sha1_sum $member0)
sha_1a=$(sha1_sum $member1) sha_1a=$(sha1_sum $member1)
mdadm -Ss mdadm -Ss
sleep 1 sleep 2
# Add all devices except those for $member0 # Add all devices except those for $member0
mdadm -I $dev10 mdadm -I $dev10
@ -35,7 +35,7 @@ e2fsck -fy $member1
sha_1b=$(sha1_sum $member1) sha_1b=$(sha1_sum $member1)
mdadm -Ss mdadm -Ss
sleep 1 sleep 2
# Seq number should be different now # Seq number should be different now
seq8a=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p') seq8a=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p')
@ -64,7 +64,7 @@ sha_0c=$(sha1_sum $member0)
sha_1c=$(sha1_sum $member1) sha_1c=$(sha1_sum $member1)
mdadm -Ss mdadm -Ss
sleep 1 sleep 2
seq8c=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p') seq8c=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p')
seq10c=$(mdadm -E $dev10 | sed -n 's/^ *Seq : //p') seq10c=$(mdadm -E $dev10 | sed -n 's/^ *Seq : //p')
@ -103,7 +103,7 @@ if mdadm -A $container $dev8 $dev9 $dev10 $dev11; then
sha_0d=$(sha1_sum $member0) sha_0d=$(sha1_sum $member0)
sha_1d=$(sha1_sum $member1) sha_1d=$(sha1_sum $member1)
mdadm -Ss mdadm -Ss
sleep 1 sleep 2
seq8d=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p') seq8d=$(mdadm -E $dev8 | sed -n 's/^ *Seq : //p')
seq10d=$(mdadm -E $dev10 | sed -n 's/^ *Seq : //p') seq10d=$(mdadm -E $dev10 | sed -n 's/^ *Seq : //p')
if [ x$sha_0a != x$sha_0d ]; then if [ x$sha_0a != x$sha_0d ]; then

View file

@ -54,7 +54,7 @@ clean_up_test()
kill -9 $pid kill -9 $pid
kill -9 $action_pid kill -9 $action_pid
sleep 1 sleep 2
if ps $action_pid | tail -1 | awk '{print $3}' | grep D; then if ps $action_pid | tail -1 | awk '{print $3}' | grep D; then
die "thread that is writing sysfs is stuck in D state, deadlock is triggered" die "thread that is writing sysfs is stuck in D state, deadlock is triggered"
@ -62,7 +62,7 @@ clean_up_test()
mdadm -S $md0 mdadm -S $md0
} }
cat /sys/kernel/debug/fail_make_request/times || die "fault injection is not enabled" cat /sys/kernel/debug/fail_make_request/times || skip "fault injection is not enabled"
trap 'clean_up_test' EXIT trap 'clean_up_test' EXIT

View file

@ -36,7 +36,7 @@ clean_up_test()
pkill -9 fio pkill -9 fio
kill -9 $pid kill -9 $pid
sleep 1 sleep 2
if ps $pid | tail -1 | awk '{print $3}' | grep D; then if ps $pid | tail -1 | awk '{print $3}' | grep D; then
die "thread that is writing sysfs is stuck in D state, deadlock is triggered" die "thread that is writing sysfs is stuck in D state, deadlock is triggered"

View file

@ -2,7 +2,7 @@ devs="$dev0 $dev1 $dev2"
set_up_test() set_up_test()
{ {
mdadm -Cv -R -n 3 -l5 $md0 $devs --assume-clean --size=50M || die "create array failed" mdadm -Cv -R -n 3 -l5 $md0 $devs --assume-clean --size=10M || die "create array failed"
mdadm -a $md0 $dev3 $dev4 || die "failed to bind new disk to array" mdadm -a $md0 $dev3 $dev4 || die "failed to bind new disk to array"
echo 1000 > /sys/block/md0/md/sync_speed_max echo 1000 > /sys/block/md0/md/sync_speed_max
} }
@ -18,13 +18,13 @@ set_up_test || die "set up test failed"
# trigger reshape # trigger reshape
mdadm --grow -l 6 $md0 mdadm --grow -l 6 $md0
sleep 1 sleep 2
# set up replacement # set up replacement
echo frozen > /sys/block/md0/md/sync_action echo frozen > /sys/block/md0/md/sync_action
echo want_replacement > /sys/block/md0/md/rd0/state echo want_replacement > /sys/block/md0/md/rd0/state
echo reshape > /sys/block/md0/md/sync_action echo reshape > /sys/block/md0/md/sync_action
sleep 1 sleep 2
# reassemeble array # reassemeble array
mdadm -S $md0 || die "can't stop array" mdadm -S $md0 || die "can't stop array"

View file

@ -2,10 +2,10 @@ devs="$dev0 $dev1 $dev2"
set_up_test() set_up_test()
{ {
mdadm -Cv -R -n 3 -l5 $md0 $devs --size=50M || die "create array failed" mdadm -Cv -R -n 3 -l5 $md0 $devs --size=10M || die "create array failed"
mdadm -a $md0 $dev3 || die "failed to bind new disk to array" mdadm -a $md0 $dev3 || die "failed to bind new disk to array"
mkfs.xfs -f $md0 || die "mkfs failed" mkfs.ext4 -F $md0 || die "mkfs failed"
xfs_ncheck $md0 || die "check fs failed" e2fsck -pvf $md0 || die "check fs failed"
} }
clean_up_test() clean_up_test()
@ -20,7 +20,7 @@ set_up_test || die "set up test failed"
# trigger reshape # trigger reshape
echo 1000 > /sys/block/md0/md/sync_speed_max echo 1000 > /sys/block/md0/md/sync_speed_max
mdadm --grow -l 6 $md0 mdadm --grow -l 6 $md0
sleep 1 sleep 2
# stop and start reshape # stop and start reshape
echo frozen > /sys/block/md0/md/sync_action echo frozen > /sys/block/md0/md/sync_action
@ -30,6 +30,6 @@ echo reshape > /sys/block/md0/md/sync_action
mdadm -W $md0 mdadm -W $md0
# check if data is corrupted # check if data is corrupted
xfs_ncheck $md0 || die "data is corrupted after reshape" e2fsck -vn $md0 || die "data is corrupted after reshape"
exit 0 exit 0

View file

@ -2,7 +2,7 @@ devs="$dev0 $dev1 $dev2"
set_up_test() set_up_test()
{ {
mdadm -Cv -R -n 3 -l5 $md0 $devs --size=50M || die "create array failed" mdadm -Cv -R -n 3 -l5 $md0 $devs --size=10M || die "create array failed"
mdadm -a $md0 $dev3 || die "failed to bind new disk to array" mdadm -a $md0 $dev3 || die "failed to bind new disk to array"
echo 1000 > /sys/block/md0/md/sync_speed_max echo 1000 > /sys/block/md0/md/sync_speed_max
} }
@ -19,7 +19,7 @@ set_up_test || die "set up test failed"
# trigger reshape # trigger reshape
mdadm --grow -l 6 $md0 mdadm --grow -l 6 $md0
sleep 1 sleep 2
# stop reshape # stop reshape
echo frozen > /sys/block/md0/md/sync_action echo frozen > /sys/block/md0/md/sync_action

View file

@ -2,7 +2,7 @@ devs="$dev0 $dev1 $dev2"
set_up_test() set_up_test()
{ {
mdadm -Cv -R -n 3 -l5 $md0 $devs --assume-clean --size=50M || die "create array failed" mdadm -Cv -R -n 3 -l5 $md0 $devs --assume-clean --size=10M || die "create array failed"
mdadm -a $md0 $dev3 $dev4 || die "failed to bind new disk to array" mdadm -a $md0 $dev3 $dev4 || die "failed to bind new disk to array"
echo 1000 > /sys/block/md0/md/sync_speed_max echo 1000 > /sys/block/md0/md/sync_speed_max
} }
@ -18,12 +18,12 @@ set_up_test || die "set up test failed"
# set up replacement # set up replacement
echo want_replacement > /sys/block/md0/md/rd0/state echo want_replacement > /sys/block/md0/md/rd0/state
sleep 1 sleep 2
# trigger reshape # trigger reshape
echo frozen > /sys/block/md0/md/sync_action echo frozen > /sys/block/md0/md/sync_action
mdadm --grow -l 6 $md0 mdadm --grow -l 6 $md0
sleep 1 sleep 2
# reassemeble array # reassemeble array
mdadm -S $md0 || die "can't stop array" mdadm -S $md0 || die "can't stop array"

View file

@ -0,0 +1,5 @@
There are multiple issues with this test:
- kernel version dependent
- can fail in multiple ways
Marking this test as broken, so it's not executed by CI.

View file

@ -3,10 +3,8 @@ sha1_sum() {
} }
get_rootdev() { get_rootdev() {
local dev=$(stat -c %D /) local part=$(grep ' / ' /proc/mounts | awk '{print $1}')
local maj=$(expr $dev : '\(..*\)..') local bd=/dev/$(lsblk -no PKNAME $part)
local min=${dev#$maj}
local bd=/dev/$(basename $(readlink /sys/dev/block/$((0x$maj)):$((0x$min))))
[ -b $bd ] || exit 1 [ -b $bd ] || exit 1
echo $bd echo $bd
} }

View file

@ -59,7 +59,7 @@ save_log() {
array=($(mdadm -Ds | cut -d' ' -f2)) array=($(mdadm -Ds | cut -d' ' -f2))
[ "$1" == "fail" ] && [ "$1" == "fail" ] &&
fail "FAILED" fail "FAILED"
echo " - see $logdir/$_basename.log and $logdir/$logfile for details\n" echo " - see $logdir/$_basename.log and $logdir/$logfile for details"
if [ $DEVTYPE == 'lvm' ] if [ $DEVTYPE == 'lvm' ]
then then
# not supported lvm type yet # not supported lvm type yet
@ -209,7 +209,7 @@ wait_for_reshape_end() {
do do
sync_action=$(grep -Ec '(resync|recovery|reshape|check|repair) *=' /proc/mdstat) sync_action=$(grep -Ec '(resync|recovery|reshape|check|repair) *=' /proc/mdstat)
if (( "$sync_action" != 0 )); then if (( "$sync_action" != 0 )); then
sleep 1 sleep 2
continue continue
elif [[ $(pgrep -f "mdadm --grow --continue" > /dev/null) != "" ]]; then elif [[ $(pgrep -f "mdadm --grow --continue" > /dev/null) != "" ]]; then
echo "Grow continue did not finish but reshape is done" >&2 echo "Grow continue did not finish but reshape is done" >&2
@ -381,7 +381,7 @@ check() {
do do
sync_action=$(grep -Ec '(resync|recovery|reshape|check|repair) *=' /proc/mdstat) sync_action=$(grep -Ec '(resync|recovery|reshape|check|repair) *=' /proc/mdstat)
if (( "$sync_action" == 0 )); then if (( "$sync_action" == 0 )); then
sleep 1 sleep 2
iterations=$(( $iterations + 1 )) iterations=$(( $iterations + 1 ))
continue continue
else else
@ -445,7 +445,7 @@ no_errors() {
# basic device test # basic device test
testdev() { testdev() {
[ -b $1 ] || die "$1 isn't a block device." lsblk -no name $1 || die "$1 isn't a block device."
[ "$DEVTYPE" == "disk" ] && return 0 [ "$DEVTYPE" == "disk" ] && return 0
udevadm settle udevadm settle
dev=$1 dev=$1