On Thu, Apr 27, 2017 at 3:39 PM, Vishal Verma <[email protected]> wrote:
> Runing an Address Range Scrub on a region with a BTT namespace would
> cause a kernel null pointer dereference. This tests we don't regress
> that.
>
> Cc: Toshi Kani <[email protected]>
> Cc: Dan Williams <[email protected]>
> Signed-off-by: Vishal Verma <[email protected]>
> ---
>  test/Makefile.am      |  3 +-
>  test/btt-ars-panic.sh | 93 
> +++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 95 insertions(+), 1 deletion(-)
>  create mode 100755 test/btt-ars-panic.sh
>
> diff --git a/test/Makefile.am b/test/Makefile.am
> index 9353a34..4d31a88 100644
> --- a/test/Makefile.am
> +++ b/test/Makefile.am
> @@ -12,7 +12,8 @@ TESTS =\
>         daxdev-errors.sh \
>         btt-check.sh \
>         label-compat.sh \
> -       blk-exhaust.sh
> +       blk-exhaust.sh \
> +       btt-ars-panic.sh
>
>  check_PROGRAMS =\
>         libndctl \
> diff --git a/test/btt-ars-panic.sh b/test/btt-ars-panic.sh
> new file mode 100755
> index 0000000..725d260
> --- /dev/null
> +++ b/test/btt-ars-panic.sh
> @@ -0,0 +1,93 @@
> +#!/bin/bash -E
> +
> +[ -f "../ndctl/ndctl" ] && [ -x "../ndctl/ndctl" ] && ndctl="../ndctl/ndctl"
> +[ -f "./ndctl/ndctl" ] && [ -x "./ndctl/ndctl" ] && ndctl="./ndctl/ndctl"
> +[ -z "$ndctl" ] && echo "Couldn't find an ndctl binary" && exit 1
> +bus="nfit_test.0"
> +json2var="s/[{}\",]//g; s/:/=/g"
> +dev=""
> +mode=""
> +size=""
> +sector_size=""
> +blockdev=""
> +rc=77
> +
> +trap 'err $LINENO' ERR
> +
> +# sample json:
> +# {
> +#   "dev":"namespace5.0",
> +#   "mode":"sector",
> +#   "size":32440320,
> +#   "uuid":"51805176-e124-4635-ae17-0e6a4a16671a",
> +#   "sector_size":4096,
> +#   "blockdev":"pmem5s"
> +# }
> +
> +# $1: Line number
> +# $2: exit code
> +err()
> +{
> +       [ -n "$2" ] && rc="$2"
> +       echo "test/btt-ars-panic: 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.12" || { echo "kernel $KVER is known to panic after an 
> ARS"; exit "$rc"; }
> +
> +create()
> +{
> +       json=$($ndctl create-namespace -b "$bus" -t pmem -m sector)
> +       eval "$(echo "$json" | sed -e "$json2var")"
> +       [ -n "$dev" ] || err "$LINENO" 2
> +       [ "$mode" = "sector" ] || err "$LINENO" 2
> +       [ -n "$size" ] || err "$LINENO" 2
> +       [ -n "$sector_size" ] || err "$LINENO" 2
> +       [ -n "$blockdev" ] || err "$LINENO" 2
> +       [ $size -gt 0 ] || err "$LINENO" 2
> +}
> +
> +reset()
> +{
> +       $ndctl disable-region -b "$bus" all
> +       $ndctl zero-labels -b "$bus" all
> +       $ndctl enable-region -b "$bus" all
> +}
> +
> +run_ars_scrub()
> +{
> +       query=".dev"
> +       ndbus=$($ndctl list -b $bus -t pmem | jq -r "$query")
> +       scrub_file="/sys/bus/nd/devices/$ndbus/nfit/scrub"
> +       echo "starting scrub: $scrub_file"
> +       echo 1 > "$scrub_file"
> +       sleep 3
> +}
> +
> +test_pass()
> +{
> +       # If the test failed, there would have been a kernel null pointer
> +       # dereference, and a subsequent ndctl disable-region would hang
> +       $ndctl disable-region all &

Test looks good. This line makes me think we need something like
"ndctl wait-scrub-bus".
_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

Reply via email to