@@ -9,7 +9,8 @@ TESTS =\
create.sh \
clear.sh \
dax-errors.sh \
- btt-check.sh
+ btt-check.sh \
+ label-compat.sh
check_PROGRAMS =\
libndctl \
new file mode 100755
@@ -0,0 +1,61 @@
+#!/bin/bash -x
+NDCTL="../ndctl/ndctl"
+BUS="-b nfit_test.0"
+BUS1="-b nfit_test.1"
+rc=77
+
+set -e
+
+err() {
+ echo "test/label-compat.sh: failed at line $1"
+ exit $rc
+}
+
+check_min_kver()
+{
+ local ver="$1"
+ : "${KVER:=$(uname -r)}"
+
+ [ -n "$ver" ] || return 1
+ [[ "$ver" == "$(echo -e "$ver\n$KVER" | sort -V | head -1)" ]]
+}
+
+check_min_kver "4.11" || { echo "kernel $KVER may not provide reliable isetcookie values"; exit $rc; }
+
+set -e
+trap 'err $LINENO' ERR
+
+# setup (reset nfit_test dimms)
+modprobe nfit_test
+$NDCTL disable-region $BUS all
+$NDCTL zero-labels $BUS all
+
+# grab the largest pmem region on $BUS
+query=". | sort_by(.available_size) | reverse | .[0].dev"
+region=$($NDCTL list $BUS -t pmem -Ri | jq -r "$query")
+
+# we assume that $region is comprised of 4 dimms
+query=". | .regions[0].mappings | sort_by(.dimm) | .[].dimm"
+dimms=$($NDCTL list -DRi -r $region | jq -r "$query" | xargs)
+i=1
+for d in $dimms
+do
+ $NDCTL write-labels $d -i nmem${i}.bin
+ i=$((i+1))
+done
+
+$NDCTL enable-region $BUS all
+
+len=$($NDCTL list -r 7 -N | jq -r "length")
+
+if [ -z $len ]; then
+ rc=1
+ echo "failed to find legacy isetcookie namespace"
+ exit 1
+fi
+
+$NDCTL disable-region $BUS all
+$NDCTL disable-region $BUS1 all
+modprobe -r nfit_test
+
+exit 0
Per the realization that Linux was incompatible with other implementations of the interleave-set-cookie algorithm [1], add a regression test to check for compatibility with the original Linux implementation. This also serves as a unit test for the new 'write-labels' command. [1]: commit 86ef58a4e35e ("nfit, libnvdimm: fix interleave set cookie calculation") Reported-by: Nicholas Moulin <nicholas.w.moulin@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com> --- test/Makefile.am | 3 ++ test/label-compat.sh | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ test/nmem1.bin | Bin test/nmem2.bin | Bin test/nmem3.bin | Bin test/nmem4.bin | Bin 6 files changed, 63 insertions(+), 1 deletion(-) create mode 100755 test/label-compat.sh create mode 100644 test/nmem1.bin create mode 100644 test/nmem2.bin create mode 100644 test/nmem3.bin create mode 100644 test/nmem4.bin diff --git a/test/nmem1.bin b/test/nmem1.bin new file mode 100644 index 0000000000000000000000000000000000000000..1ef8dfd802e6735073230f7e6a8ec3365c555f39 GIT binary patch literal 131072 zcmeIuF=_%)6a~;f8HFss71*ZH(nc^kg++!y8aoS{Y{4D51|i#+WC@m5B1%lY=x?Hh z*l6IqVYs{p19MN=dnw*td;MZOEC<CXoJ@ASq<lE+>pX-kK6$tOH5*JeKewHe-@f!v zp6MT}?aLh|<#7#v`qyLsr{QF?`=|ZiTg%S0@!XwP&5zmlqDnQd&Byp*Exy}b$Uay3 zeod1kQ>MElK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 J2oSg<fnS9n8x8;f literal 0 HcmV?d00001 diff --git a/test/nmem2.bin b/test/nmem2.bin new file mode 100644 index 0000000000000000000000000000000000000000..adf45b5c586667e77f83f74b0574adc7369f0df4 GIT binary patch literal 131072 zcmeIuF=_%)6a~;f8HFss71*ZH(nc^kg++!y8aoS{Y{4D51|i#+WC@m5B1%lY=x?Hh z*l6IqUtHdUfw`yby%cY+y?!wsmV;sxP9{5EQa&8^bsj<%U*2th%?6Xr&u!=Aw=X@E zXZpu#`*Md#d0fMv{`J`ZX*k*J{%QaB*0M8gJa^|+^JDhCs8Y>q^D%x{i+I~z$Uay3 zeod1kQ>MElK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 J2oSg<fnS2?8xH^g literal 0 HcmV?d00001 diff --git a/test/nmem3.bin b/test/nmem3.bin new file mode 100644 index 0000000000000000000000000000000000000000..bf7334e28cbc26accbcfbb79bcedf8a8f7a9000b GIT binary patch literal 131072 zcmeIuF=_%)6a~;f8HFss71*ZH(nc^kg++!y8aoS{Y{4D51|i#+WC@m5B1%lY=x?Hh z*l6IqUtHdUfw`yby%cY+y?!wsmV;sxP9{5EQa&8^bsj<%U*2th%?6Xr&u!=Aw=X@E zXZpu#`*Md#d0fMv{`J`ZX*k*J{%QaB*0M8gJa^|+^JDhCs8Y>q^D%x{i%8pD$Uay3 zeod1kQ>MElK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 J2oSg<fnR{I8xQ~h literal 0 HcmV?d00001 diff --git a/test/nmem4.bin b/test/nmem4.bin new file mode 100644 index 0000000000000000000000000000000000000000..24485122e9d8ecfc25ab6b27449c76a2b4f527bf GIT binary patch literal 131072 zcmeIuF=_%)6a~;fnFv`xR$yxrOB=z&DW-4`Z0u6lxCM9Q8iZ_PbP1MLAt;WH=x;Pd zNRtTX{o?W-49q=6Z;*|Ky|?T=FZ$Uy+)Q%0#C$mKUug(Q{nBoGHSbThhrgYh-~Q>L z_@;kd?NshOF)wSl>ffmQxAMuhy3_vCmrZB({MucV&5!whUB;Tf&8Paq$B>3y6_Vv= zdRpT|$(Zpj2@oJafB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs K0Rja6k-!mtcpDJ_ literal 0 HcmV?d00001