From patchwork Mon Jan 28 13:14:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shinichiro Kawasaki X-Patchwork-Id: 10783675 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 59E4D14E1 for ; Mon, 28 Jan 2019 13:15:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 43FA12A82A for ; Mon, 28 Jan 2019 13:15:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 34BDA2AA57; Mon, 28 Jan 2019 13:15:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 900902A82A for ; Mon, 28 Jan 2019 13:15:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726689AbfA1NPF (ORCPT ); Mon, 28 Jan 2019 08:15:05 -0500 Received: from esa3.hgst.iphmx.com ([216.71.153.141]:31555 "EHLO esa3.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726647AbfA1NPE (ORCPT ); Mon, 28 Jan 2019 08:15:04 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1548681304; x=1580217304; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=MWucZfUpjkQPgknBLy23wP0VcxkRxpCWH5oENFV06y4=; b=rAvKUMDQozq8rWzJfEoYywPBAnFvGDJchsBmSGouvXKSHst/bkl6Ikk8 MPmWs4YnbDRQO2kruT5MoSBOFd1Z1LCFrCkN9awm/kyfKn09vwfVy/502 G5pFfmygs24axJrQNY8bzc1PvyGOeioPOe8nVai8CuWe38jKqj+wVRu8C zDxCj3So7aw/Ub+QOgwvtEhdMH7UN9zfcQDzKigGj5M/O8yZe2Tr6Rusw CKLCUo6sUWaPynvY6qm1CChg2DNBO+5pgOiQAmsbLox5/GjJV/6tyBEKy FZEWI7nOpRvv8X9CoG3+cNO7o+lRAlyrWBT5E9f26q7hRAnMIdHXL7PLu Q==; X-IronPort-AV: E=Sophos;i="5.56,534,1539619200"; d="scan'208";a="104898833" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 28 Jan 2019 21:15:04 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP; 28 Jan 2019 04:54:07 -0800 Received: from shin_dev.dhcp.fujisawa.hgst.com (HELO shin_dev.fujisawa.hgst.com) ([10.149.52.166]) by uls-op-cesaip02.wdc.com with ESMTP; 28 Jan 2019 05:15:01 -0800 From: Shin'ichiro Kawasaki To: linux-block@vger.kernel.org, Omar Sandoval , Masato Suzuki , Shinichiro Kawasaki Cc: Omar Sandoval , Jens Axboe , Matias Bjorling , Hannes Reinecke , Mike Snitzer , "Martin K . Petersen" , Damien Le Moal , Chaitanya Kulkarni Subject: [PATCH blktests v4 01/12] config: Introduce RUN_ZONED_TESTS variable and CAN_BE_ZONED flag Date: Mon, 28 Jan 2019 22:14:44 +0900 Message-Id: <20190128131455.31997-2-shinichiro.kawasaki@wdc.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> References: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP To allow running tests using a null_blk device with the zoned mode disabled (current setup) as well as enabled, introduce the config the RUN_ZONED_TESTS config variable and the per-test flag CAN_BE_ZONED. RUN_ZONED_TESTS=1 indicates that tests run against null_blk will be executed twice, first with null_blk as a regular block device (RUN_FOR_ZONED=0) and a second time with null_blk set as a zoned block device (RUN_FOR_ZONED=1). This applies only to tests cases that have the variable CAN_BE_ZONED set to 1, indicating that the test case applies to zoned block devices. If CAN_BE_ZONED is not defined by a test case, the test is executed only with the regular null_blk device. _init_null_blk is modified to prepare null_blk as a zoned blocked device if RUN_FOR_ZONED is set and as a regular block device otherwise. To avoid "modprobe -r null_blk" failures, rmdir calls on all sysfs nullbX directories is added. When a zoned block device is specified in TEST_DEVS, failures of test cases that do not set CAN_BE_ZONED are avoided by automatically skipping the test. The new helper function _test_dev_is_zoned() is introduced to implement this. The use of the RUN_ZONED_TESTS variable requires that the kernel be compiled with CONFIG_BLK_DEV_ZONED enabled. Signed-off-by: Shin'ichiro Kawasaki --- Documentation/running-tests.md | 11 +++++++++++ check | 30 +++++++++++++++++++++++++++--- common/null_blk | 10 +++++++++- common/shellcheck | 2 +- new | 4 ++++ 5 files changed, 52 insertions(+), 5 deletions(-) diff --git a/Documentation/running-tests.md b/Documentation/running-tests.md index 8f32af3..675dac7 100644 --- a/Documentation/running-tests.md +++ b/Documentation/running-tests.md @@ -82,6 +82,17 @@ passing the `-d` command line option or setting the `DEVICE_ONLY` variable. DEVICE_ONLY=1 ``` +### Zoned Block Device + +To run test cases for zoned block devices, set the `RUN_ZONED_TESTS` variable. +When this variable is set and a test case can prepare a virtual device such as +`null_blk` with zoned mode, the test case is executed twice: first in non-zoned +mode and second in zoned mode. The use of the `RUN_ZONED_TESTS` variable +requires that the kernel be compiled with `CONFIG_BLK_DEV_ZONED` enabled. +```sh +RUN_ZONED_TESTS=1 +``` + ### Custom Setup The `config` file is really just a bash file that is sourced at the beginning diff --git a/check b/check index 6c6d9f5..5cf07dd 100755 --- a/check +++ b/check @@ -17,7 +17,7 @@ _found_test() { local test_name="$1" local explicit="$2" - unset DESCRIPTION QUICK TIMED requires device_requires test test_device + unset DESCRIPTION QUICK TIMED CAN_BE_ZONED requires device_requires test test_device # shellcheck disable=SC1090 if ! . "tests/${test_name}"; then @@ -182,11 +182,14 @@ _write_test_run() { _output_status() { local test="$1" local status="$2" + local zoned=" " + + if (( RUN_FOR_ZONED )); then zoned=" (zoned) "; fi if [[ -v DESCRIPTION ]]; then - printf '%-60s' "$test ($DESCRIPTION)" + printf '%-60s' "${test}${zoned}($DESCRIPTION)" else - printf '%-60s' "$test" + printf '%-60s' "${test}${zoned}" fi if [[ -z $status ]]; then echo @@ -391,10 +394,19 @@ _call_test() { fi } +_test_dev_is_zoned() { + if grep -qe "none" "${TEST_DEV_SYSFS}/queue/zoned" ; then + SKIP_REASON="${TEST_DEV} is not a zoned block device" + return 1 + fi + return 0 +} + _run_test() { TEST_NAME="$1" CHECK_DMESG=1 DMESG_FILTER="cat" + RUN_FOR_ZONED=0 # shellcheck disable=SC1090 . "tests/${TEST_NAME}" @@ -407,6 +419,11 @@ _run_test() { RESULTS_DIR="$OUTPUT/nodev" _call_test test + if (( RUN_ZONED_TESTS && CAN_BE_ZONED )); then + RESULTS_DIR="$OUTPUT/nodev_zoned" + RUN_FOR_ZONED=1 + _call_test test + fi else if [[ ${#TEST_DEVS[@]} -eq 0 ]]; then return 0 @@ -420,6 +437,12 @@ _run_test() { local ret=0 for TEST_DEV in "${TEST_DEVS[@]}"; do TEST_DEV_SYSFS="${TEST_DEV_SYSFS_DIRS["$TEST_DEV"]}" + if (( !CAN_BE_ZONED )) && _test_dev_is_zoned; then + SKIP_REASON="${TEST_DEV} is a zoned block device" + _output_notrun "$TEST_NAME => $(basename "$TEST_DEV")" + continue + fi + unset SKIP_REASON if declare -fF device_requires >/dev/null && ! device_requires; then _output_notrun "$TEST_NAME => $(basename "$TEST_DEV")" continue @@ -591,6 +614,7 @@ fi # Default configuration. : "${DEVICE_ONLY:=0}" : "${QUICK_RUN:=0}" +: "${RUN_ZONED_TESTS:=0}" : "${OUTPUT:=results}" if [[ -v EXCLUDE ]] && ! declare -p EXCLUDE | grep -q '^declare -a'; then # If EXCLUDE was not defined as an array, convert it to one. diff --git a/common/null_blk b/common/null_blk index 937ece0..2e300c2 100644 --- a/common/null_blk +++ b/common/null_blk @@ -9,7 +9,15 @@ _have_null_blk() { } _init_null_blk() { - if ! modprobe -r null_blk || ! modprobe null_blk "$@"; then + if [[ -d /sys/kernel/config/nullb ]]; then + find /sys/kernel/config/nullb -mindepth 1 -maxdepth 1 \ + -type d -delete + fi + + local zoned="" + if (( RUN_FOR_ZONED )); then zoned="zoned=1"; fi + + if ! modprobe -r null_blk || ! modprobe null_blk "$@" "${zoned}" ; then return 1 fi diff --git a/common/shellcheck b/common/shellcheck index 5f46c00..b9be7d2 100644 --- a/common/shellcheck +++ b/common/shellcheck @@ -6,5 +6,5 @@ # Suppress unused global variable warnings. _silence_sc2034() { - echo "$CGROUP2_DIR $CHECK_DMESG $DESCRIPTION $DMESG_FILTER $FIO_PERF_FIELDS $FIO_PERF_PREFIX $QUICK $SKIP_REASON ${TEST_RUN[*]} $TIMED" > /dev/null + echo "$CGROUP2_DIR $CHECK_DMESG $DESCRIPTION $DMESG_FILTER $FIO_PERF_FIELDS $FIO_PERF_PREFIX $QUICK $SKIP_REASON ${TEST_RUN[*]} $TIMED $CAN_BE_ZONED" > /dev/null } diff --git a/new b/new index 63e36cd..d7d5f7c 100755 --- a/new +++ b/new @@ -145,6 +145,10 @@ DESCRIPTION="" # Alternatively, you can filter out any unimportant messages in dmesg like so: # DMESG_FILTER="grep -v sysfs" +# TODO: if this test can be run for both regular block devices and zoned block +# devices, uncomment the line below. +# CAN_BE_ZONED=1 + # TODO: if this test has any extra requirements, it should define a requires() # function. If the test can be run, requires() should return 0. Otherwise, it # should return non-zero and set the \$SKIP_REASON variable. Usually, From patchwork Mon Jan 28 13:14:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shinichiro Kawasaki X-Patchwork-Id: 10783677 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CD1D414E1 for ; Mon, 28 Jan 2019 13:15:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BC6532A82A for ; Mon, 28 Jan 2019 13:15:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AFA452AA57; Mon, 28 Jan 2019 13:15:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 55F432A82A for ; Mon, 28 Jan 2019 13:15:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726713AbfA1NPJ (ORCPT ); Mon, 28 Jan 2019 08:15:09 -0500 Received: from esa3.hgst.iphmx.com ([216.71.153.141]:31555 "EHLO esa3.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726647AbfA1NPJ (ORCPT ); Mon, 28 Jan 2019 08:15:09 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1548681309; x=1580217309; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=xr1OyQaLlTmPYAsiFIzba9jjn+m6h3teH3K/mzCBlhc=; b=JKCHK+DWscbQLLdVI4CZb3+IHvYV8gG9kbYgEIR/ShC/hZnJObJDyeBv 3GtgtiosqjOTHepMd+NuBW8StW2CH/PXhtXW1bX7X0NeTjwX1EEmcSAKE F8/4bltSMPzEYystXACGIZ03mjGKCTnt2FzrmRdwSXwY/t+5x6HBfXZMP C4erXeCA6RWk10cKNZsQVTjAFrk+RQfuPTOTqoI3o4dE4qYIJXXABQ1Bl dTvHZAXxFoZKRZmv9xyv6kc8IKoiiD11n9cuGfRdAKyqn+N8kHKUMUOVj T0xx3s+fRtwA7m51Eriv4P02A1x/SQkE0u5MQVvNCtzQHGnJxljVxdgm1 g==; X-IronPort-AV: E=Sophos;i="5.56,534,1539619200"; d="scan'208";a="104898836" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 28 Jan 2019 21:15:08 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP; 28 Jan 2019 04:54:11 -0800 Received: from shin_dev.dhcp.fujisawa.hgst.com (HELO shin_dev.fujisawa.hgst.com) ([10.149.52.166]) by uls-op-cesaip02.wdc.com with ESMTP; 28 Jan 2019 05:15:05 -0800 From: Shin'ichiro Kawasaki To: linux-block@vger.kernel.org, Omar Sandoval , Masato Suzuki , Shinichiro Kawasaki Cc: Omar Sandoval , Jens Axboe , Matias Bjorling , Hannes Reinecke , Mike Snitzer , "Martin K . Petersen" , Damien Le Moal , Chaitanya Kulkarni Subject: [PATCH blktests v4 02/12] common: Introduce _have_fio_zbd_zonemode() helper function Date: Mon, 28 Jan 2019 22:14:45 +0900 Message-Id: <20190128131455.31997-3-shinichiro.kawasaki@wdc.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> References: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Fio zbd zone mode is necessary for zoned block devices. Introduce the helper function _have_fio_zbd_zonemode() to check that the installed fio version supports the option --zonemode=zbd. Signed-off-by: Shin'ichiro Kawasaki --- common/fio | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/common/fio b/common/fio index e407088..4c771fc 100644 --- a/common/fio +++ b/common/fio @@ -17,6 +17,15 @@ _have_fio() { return 0 } +_have_fio_zbd_zonemode() { + _have_fio || return $? + if ! fio --cmdhelp=zonemode 2>&1 | grep -q zbd ; then + SKIP_REASON="Fio version too old (does not support --zonemode=zbd)" + return 1 + fi + return 0 +} + declare -A FIO_TERSE_FIELDS FIO_TERSE_FIELDS=( # Read status From patchwork Mon Jan 28 13:14:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shinichiro Kawasaki X-Patchwork-Id: 10783679 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 541F31390 for ; Mon, 28 Jan 2019 13:15:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 442092A82A for ; Mon, 28 Jan 2019 13:15:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3846E2AA57; Mon, 28 Jan 2019 13:15:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D939D2A82A for ; Mon, 28 Jan 2019 13:15:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726682AbfA1NPM (ORCPT ); Mon, 28 Jan 2019 08:15:12 -0500 Received: from esa3.hgst.iphmx.com ([216.71.153.141]:31555 "EHLO esa3.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726647AbfA1NPM (ORCPT ); Mon, 28 Jan 2019 08:15:12 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1548681312; x=1580217312; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=0oktnb5c+ZxGU/792H6YJ1FgxEgeE8jHcYYjYH+9ZnY=; b=Yz0wapKjrbax2KKCuS8iPVIeNZrRozhXKSnDcWEF0hNW5W1WSBi2Vy7P MCcqwWzZpHjPkmpAGeQjAZaqguyZ7qQSfBcCEwO04p4YqHupcdYS+fOxO mRYUtOE4N0XrGrnat3zjxvgHVK5u7aXzb4t3gh1KL+oYMgIG0Sx1dRVBZ wzjHIeU2NFbzzVDrOssODwc2UlGv4nLW1nfY8BNLMK0Al5x5J4cOylkZ6 RivR2YP+Cofs/+hHcRgDE/1CtBRHDMdvWR5fsPRVqJUArEGzXMRi1JnCv XBs3ZnkGeoesghQIa57G9PJsQNPgMmrt0TMM5OiCjmDKsQBQ0Z6spDMSo A==; X-IronPort-AV: E=Sophos;i="5.56,534,1539619200"; d="scan'208";a="104898840" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 28 Jan 2019 21:15:12 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP; 28 Jan 2019 04:54:15 -0800 Received: from shin_dev.dhcp.fujisawa.hgst.com (HELO shin_dev.fujisawa.hgst.com) ([10.149.52.166]) by uls-op-cesaip02.wdc.com with ESMTP; 28 Jan 2019 05:15:09 -0800 From: Shin'ichiro Kawasaki To: linux-block@vger.kernel.org, Omar Sandoval , Masato Suzuki , Shinichiro Kawasaki Cc: Omar Sandoval , Jens Axboe , Matias Bjorling , Hannes Reinecke , Mike Snitzer , "Martin K . Petersen" , Damien Le Moal , Chaitanya Kulkarni Subject: [PATCH blktests v4 03/12] block/004: Adjust fio conditions for zoned block devices Date: Mon, 28 Jan 2019 22:14:46 +0900 Message-Id: <20190128131455.31997-4-shinichiro.kawasaki@wdc.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> References: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP For a random write pattern to a zoned block device, fio requires --direct=1 and --zonemode=zbd options as well as deadline I/O scheduler to be specified. Specify these options and set the I/O scheduler if the target device is a zoned block device. Before doing that, also make sure that the deadline scheduler is available and that fio supports the zbd zone mode. Set CAN_BE_ZONED flag to run this test case for zoned block devices. Signed-off-by: Shin'ichiro Kawasaki --- tests/block/004 | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/block/004 b/tests/block/004 index 4c14c4b..d181725 100755 --- a/tests/block/004 +++ b/tests/block/004 @@ -8,18 +8,32 @@ DESCRIPTION="run lots of flushes" TIMED=1 +CAN_BE_ZONED=1 requires() { _have_fio } +device_requires() { + ! _test_dev_is_zoned || _have_fio_zbd_zonemode +} + test_device() { echo "Running ${TEST_NAME}" + local directio="" + local zbdmode="" + + if _test_dev_is_zoned; then + _test_dev_queue_set scheduler deadline + directio="--direct=1" + zbdmode="--zonemode=zbd" + fi + FIO_PERF_FIELDS=("write iops") _fio_perf --bs=4k --rw=randwrite --norandommap --fsync=1 \ --number_ios=256 --numjobs=64 --name=flushes \ - --filename="$TEST_DEV" + ${directio} ${zbdmode} --filename="$TEST_DEV" echo "Test complete" } From patchwork Mon Jan 28 13:14:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shinichiro Kawasaki X-Patchwork-Id: 10783681 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1CF761390 for ; Mon, 28 Jan 2019 13:15:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0AFD12A82A for ; Mon, 28 Jan 2019 13:15:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F37BD2AA57; Mon, 28 Jan 2019 13:15:17 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8FA652A82A for ; Mon, 28 Jan 2019 13:15:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726765AbfA1NPR (ORCPT ); Mon, 28 Jan 2019 08:15:17 -0500 Received: from esa3.hgst.iphmx.com ([216.71.153.141]:31555 "EHLO esa3.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726647AbfA1NPQ (ORCPT ); Mon, 28 Jan 2019 08:15:16 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1548681316; x=1580217316; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=IzZu3HYUWRKzTUWViQ/t9rs1bLmUlw8NNEuIXkqUbeM=; b=kpxbVRlsbOVBrsRbkA9+fvoErQ3fhVt3WNP74H04cCGerF0wz2YNppfQ HB1DqIuykoWEm7kX95iZjnuLjLb0+hP/wmEpjFJ1Rk/nW3aQOjnfqrCpS 4mUs8aMVbz6dtU1x45SPd7BaZXnsTAhR5hJdCjnNUgRi1CCCiWofDuDe0 Io/GzYnlK/7pHsUsAacMgDFbH6RRJW67Sg4JL6B0lvlFjX+jXrxWf4eQh hWbbWFjO+JT2fxgquX4CelXuXNLYkb8nVXpOvG8k9VpHIQREhPRJcUz7x ciDTxhDIfqRdIYOtUThM1rK+D/2Kzg3iO+PNkqCRqMwiFk+fjMONqkNKt g==; X-IronPort-AV: E=Sophos;i="5.56,534,1539619200"; d="scan'208";a="104898848" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 28 Jan 2019 21:15:16 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP; 28 Jan 2019 04:54:19 -0800 Received: from shin_dev.dhcp.fujisawa.hgst.com (HELO shin_dev.fujisawa.hgst.com) ([10.149.52.166]) by uls-op-cesaip02.wdc.com with ESMTP; 28 Jan 2019 05:15:13 -0800 From: Shin'ichiro Kawasaki To: linux-block@vger.kernel.org, Omar Sandoval , Masato Suzuki , Shinichiro Kawasaki Cc: Omar Sandoval , Jens Axboe , Matias Bjorling , Hannes Reinecke , Mike Snitzer , "Martin K . Petersen" , Damien Le Moal , Chaitanya Kulkarni Subject: [PATCH blktests v4 04/12] block: Whitelist tests supporting zoned block devices Date: Mon, 28 Jan 2019 22:14:47 +0900 Message-Id: <20190128131455.31997-5-shinichiro.kawasaki@wdc.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> References: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Define CAN_BE_ZONED=1 in block/005, block/006, block/010, block/011, block/016, block/017, block/020, block/021 and block/023 as all these tests should execute without any problem against null_blk with zoned mode enabled or zoned block devices specified in TEST_DEVS. Signed-off-by: Shin'ichiro Kawasaki --- tests/block/005 | 1 + tests/block/006 | 1 + tests/block/010 | 1 + tests/block/011 | 1 + tests/block/016 | 1 + tests/block/017 | 1 + tests/block/020 | 1 + tests/block/021 | 1 + tests/block/023 | 1 + 9 files changed, 9 insertions(+) diff --git a/tests/block/005 b/tests/block/005 index 65eba22..8ab6791 100755 --- a/tests/block/005 +++ b/tests/block/005 @@ -8,6 +8,7 @@ DESCRIPTION="switch schedulers while doing IO" TIMED=1 +CAN_BE_ZONED=1 requires() { _have_fio diff --git a/tests/block/006 b/tests/block/006 index 630d478..0b8a3c0 100755 --- a/tests/block/006 +++ b/tests/block/006 @@ -12,6 +12,7 @@ DESCRIPTION="run null-blk in blocking mode" TIMED=1 +CAN_BE_ZONED=1 requires() { _have_null_blk && _have_module_param null_blk blocking && _have_fio diff --git a/tests/block/010 b/tests/block/010 index 76b301f..b81208e 100644 --- a/tests/block/010 +++ b/tests/block/010 @@ -12,6 +12,7 @@ DESCRIPTION="run I/O on null_blk with shared and non-shared tags" TIMED=1 +CAN_BE_ZONED=1 requires() { _have_null_blk && _have_module_param null_blk shared_tags && _have_fio diff --git a/tests/block/011 b/tests/block/011 index 8e10900..c3432a6 100755 --- a/tests/block/011 +++ b/tests/block/011 @@ -8,6 +8,7 @@ DESCRIPTION="disable PCI device while doing I/O" TIMED=1 +CAN_BE_ZONED=1 requires() { _have_fio && _have_program setpci diff --git a/tests/block/016 b/tests/block/016 index 10ec4ba..c70b7d0 100755 --- a/tests/block/016 +++ b/tests/block/016 @@ -11,6 +11,7 @@ DESCRIPTION="send a signal to a process waiting on a frozen queue" QUICK=1 +CAN_BE_ZONED=1 requires() { _have_null_blk diff --git a/tests/block/017 b/tests/block/017 index cea29be..e4a9259 100755 --- a/tests/block/017 +++ b/tests/block/017 @@ -11,6 +11,7 @@ DESCRIPTION="do I/O and check the inflight counter" QUICK=1 +CAN_BE_ZONED=1 requires() { _have_null_blk diff --git a/tests/block/020 b/tests/block/020 index a377ea2..39dde66 100755 --- a/tests/block/020 +++ b/tests/block/020 @@ -11,6 +11,7 @@ DESCRIPTION="run null-blk on different schedulers with only one hardware tag" QUICK=1 +CAN_BE_ZONED=1 requires() { _have_null_blk && _have_fio diff --git a/tests/block/021 b/tests/block/021 index 0ca5a17..a1bbf45 100755 --- a/tests/block/021 +++ b/tests/block/021 @@ -11,6 +11,7 @@ DESCRIPTION="read/write nr_requests on null-blk with different schedulers" QUICK=1 +CAN_BE_ZONED=1 requires() { _have_null_blk diff --git a/tests/block/023 b/tests/block/023 index b0739f7..0f20f4a 100755 --- a/tests/block/023 +++ b/tests/block/023 @@ -10,6 +10,7 @@ DESCRIPTION="do I/O on all null_blk queue modes" QUICK=1 +CAN_BE_ZONED=1 requires() { _have_null_blk From patchwork Mon Jan 28 13:14:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shinichiro Kawasaki X-Patchwork-Id: 10783683 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5ED8814E1 for ; Mon, 28 Jan 2019 13:15:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4D2722A82A for ; Mon, 28 Jan 2019 13:15:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 415642AA57; Mon, 28 Jan 2019 13:15:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D3B7C2A82A for ; Mon, 28 Jan 2019 13:15:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726647AbfA1NPU (ORCPT ); Mon, 28 Jan 2019 08:15:20 -0500 Received: from esa3.hgst.iphmx.com ([216.71.153.141]:31555 "EHLO esa3.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726774AbfA1NPU (ORCPT ); Mon, 28 Jan 2019 08:15:20 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1548681320; x=1580217320; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ohdlxYWk3A5VLZiAOv6jplzCsRw75TbVrcXQSY4UUX4=; b=hRqBnOf7ut+9lRsczpsSomadf1KswBmaqmVg0c5jx9UEiULd9+CSn9Vt imCjDCubTPMxGjqDUhRoorlVPLhyc1XrZnvY4tImxf9yfa8lFc0x5WmOm o4ABTf4pAqc38z2KauCwPdX3Xavg4g/lxS8kduhpr/VensepdMaBGvMsb 0wymCFYLj2PlUQeSvC8JrHbGd7ScFOxSiogeEpSI0SLx11NhA5LaVSUm4 f4ChAyrwIv8hxT2Z8dMCkmJpbY6jYGCrM6EIXZ7om0GMnTgE+UqFpm8eT hRkwe0w3+o9Q+pQdl8RQVAwbBroU+6JqIR3qezhKiMfYWWSX0Bhpwwbl0 w==; X-IronPort-AV: E=Sophos;i="5.56,534,1539619200"; d="scan'208";a="104898854" Received: from uls-op-cesaip01.wdc.com (HELO uls-op-cesaep01.wdc.com) ([199.255.45.14]) by ob1.hgst.iphmx.com with ESMTP; 28 Jan 2019 21:15:20 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep01.wdc.com with ESMTP; 28 Jan 2019 04:54:23 -0800 Received: from shin_dev.dhcp.fujisawa.hgst.com (HELO shin_dev.fujisawa.hgst.com) ([10.149.52.166]) by uls-op-cesaip02.wdc.com with ESMTP; 28 Jan 2019 05:15:17 -0800 From: Shin'ichiro Kawasaki To: linux-block@vger.kernel.org, Omar Sandoval , Masato Suzuki , Shinichiro Kawasaki Cc: Omar Sandoval , Jens Axboe , Matias Bjorling , Hannes Reinecke , Mike Snitzer , "Martin K . Petersen" , Damien Le Moal , Chaitanya Kulkarni Subject: [PATCH blktests v4 05/12] check: Introduce fallback_device() and cleanup_fallback_device() Date: Mon, 28 Jan 2019 22:14:48 +0900 Message-Id: <20190128131455.31997-6-shinichiro.kawasaki@wdc.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> References: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP These optional functions can be defined by a test case script. When defined and TEST_DEVS is empty, the fallback_device() is executed before runing the test case. The fallback_device() function intializes a virtual device to run the test case and return the device to be set in TEST_DEVS. After running the test case, cleanup_fallback_device() is executed to clean up the device. This feature allows to run test cases with test_device() function even if TEST_DEVS is not set in the config, using virtaul devices such as null_blk. Signed-off-by: Shin'ichiro Kawasaki --- check | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/check b/check index 5cf07dd..5d44ee3 100755 --- a/check +++ b/check @@ -17,7 +17,7 @@ _found_test() { local test_name="$1" local explicit="$2" - unset DESCRIPTION QUICK TIMED CAN_BE_ZONED requires device_requires test test_device + unset DESCRIPTION QUICK TIMED CAN_BE_ZONED requires device_requires test test_device fallback_device cleanup_fallback_device # shellcheck disable=SC1090 if ! . "tests/${test_name}"; then @@ -44,6 +44,16 @@ _found_test() { return 1 fi + if declare -fF fallback_device >/dev/null && ! declare -fF cleanup_fallback_device >/dev/null; then + _warning "${test_name} defines fallback_device() but not cleanup_fallback_device()" + return 1 + fi + + if declare -fF cleanup_fallback_device >/dev/null && ! declare -fF fallback_device >/dev/null; then + _warning "${test_name} defines cleanup_fallback_device() but not fallback_device()" + return 1 + fi + if (( QUICK && TIMED )); then _warning "${test_name} cannot be both QUICK and TIMED" return 1 @@ -407,6 +417,7 @@ _run_test() { CHECK_DMESG=1 DMESG_FILTER="cat" RUN_FOR_ZONED=0 + FALLBACK_DEVICE=0 # shellcheck disable=SC1090 . "tests/${TEST_NAME}" @@ -425,6 +436,22 @@ _run_test() { _call_test test fi else + if [[ ${#TEST_DEVS[@]} -eq 0 ]] && \ + declare -fF fallback_device >/dev/null; then + if ! test_dev=$(fallback_device); then + _warning "$TEST_NAME: fallback_device call failure" + return 0 + fi + if ! sysfs_dir="$(_find_sysfs_dir "$test_dev")"; then + _warning "$TEST_NAME: could not find sysfs directory for ${test_dev}" + cleanup_fallback_device + return 0 + fi + TEST_DEVS=( "${test_dev}" ) + TEST_DEV_SYSFS_DIRS["$test_dev"]="$sysfs_dir" + FALLBACK_DEVICE=1 + fi + if [[ ${#TEST_DEVS[@]} -eq 0 ]]; then return 0 fi @@ -452,6 +479,13 @@ _run_test() { ret=1 fi done + + if (( FALLBACK_DEVICE )); then + cleanup_fallback_device + unset TEST_DEV_SYSFS_DIRS["${TEST_DEVS[0]}"] + TEST_DEVS=() + fi + return $ret fi } From patchwork Mon Jan 28 13:14:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shinichiro Kawasaki X-Patchwork-Id: 10783685 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3646F14E1 for ; Mon, 28 Jan 2019 13:15:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 23F122A82A for ; Mon, 28 Jan 2019 13:15:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 17FFD2AA57; Mon, 28 Jan 2019 13:15:29 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A4F162A82A for ; Mon, 28 Jan 2019 13:15:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726766AbfA1NP2 (ORCPT ); Mon, 28 Jan 2019 08:15:28 -0500 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:60364 "EHLO esa1.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726749AbfA1NP2 (ORCPT ); Mon, 28 Jan 2019 08:15:28 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1548681327; x=1580217327; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=abHhg2wcbdF25eLMhxDmHJ2SklmyEaucqIIwjuf8MIk=; b=SeN5Mrtj7/sUeX5bgni6ijoSZ7PB1Tqjxl1rBuF0/obk69DsEqApeONn LuvWzZeF8KcSqsvW3TsxBuriFukmqiIV8MA9MMK41SecN2W4fJSYKleX/ Z76mHWHgHCsFyk/E9JFdfeXa7ywnPPHOcakq7CskZTxtt3I6S6qIF5osY YgWxFB+OR4eytrLXP9/byo/Ot6+mbFPMlImh/lo1gE4DO8xbbki/lHTBw hm/qK5l14KUlR4xbaq1/4xXWVPgfmaaQuIxYfZD27T1BmNRCogpPcp5Hi 79/LviCUGtoBF8cP/0oXZF9135z8/rr7bUDBR99LkhFCvT0Kix6HPXNCZ w==; X-IronPort-AV: E=Sophos;i="5.56,534,1539619200"; d="scan'208";a="204977732" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 28 Jan 2019 21:15:27 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP; 28 Jan 2019 04:56:28 -0800 Received: from shin_dev.dhcp.fujisawa.hgst.com (HELO shin_dev.fujisawa.hgst.com) ([10.149.52.166]) by uls-op-cesaip02.wdc.com with ESMTP; 28 Jan 2019 05:15:24 -0800 From: Shin'ichiro Kawasaki To: linux-block@vger.kernel.org, Omar Sandoval , Masato Suzuki , Shinichiro Kawasaki Cc: Omar Sandoval , Jens Axboe , Matias Bjorling , Hannes Reinecke , Mike Snitzer , "Martin K . Petersen" , Damien Le Moal , Chaitanya Kulkarni Subject: [PATCH blktests v4 06/12] src: Introduce zbdioctl program Date: Mon, 28 Jan 2019 22:14:49 +0900 Message-Id: <20190128131455.31997-7-shinichiro.kawasaki@wdc.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> References: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP zbdioctl implements calls to zoned block devices ioctls that are not supported currently by sys-utils blkzone utility, namely BLKGETZONESZ and BLKGETNRZONES. Reviewed-by: Chaitanya Kulkarni Signed-off-by: Shin'ichiro Kawasaki --- src/.gitignore | 1 + src/Makefile | 3 +- src/zbdioctl.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 src/zbdioctl.c diff --git a/src/.gitignore b/src/.gitignore index 8c95785..2108f56 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -6,3 +6,4 @@ /nbdsetsize /sg/dxfer-from-dev /sg/syzkaller1 +/zbdioctl diff --git a/src/Makefile b/src/Makefile index c4094b4..5a0556f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -5,7 +5,8 @@ C_TARGETS := \ sg/dxfer-from-dev \ sg/syzkaller1 \ nbdsetsize \ - loop_change_fd + loop_change_fd \ + zbdioctl CXX_TARGETS := \ discontiguous-io diff --git a/src/zbdioctl.c b/src/zbdioctl.c new file mode 100644 index 0000000..1ea72e8 --- /dev/null +++ b/src/zbdioctl.c @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: GPL-3.0+ +// Copyright (C) 2018 Western Digital Corporation or its affiliates. +#include +#include +#include +#include +#include +#include +#include +#include + +#if !defined(BLKGETZONESZ) || !defined(BLKGETNRZONES) + +int main(int argc, char **argv) +{ + return EXIT_FAILURE; +} + +#else + +struct request { + const char *name; + unsigned long code; +} requests[] = { + { "-s", BLKGETZONESZ}, + { "-n", BLKGETNRZONES}, + { NULL, 0}, +}; + +void usage(const char *progname) +{ + int i = 0; + + fprintf(stderr, "usage: %s \n", progname); + fprintf(stderr, " can be:\n"); + while (requests[i].name) { + fprintf(stderr, "\t%s\n", requests[i].name); + i++; + } + exit(EXIT_FAILURE); +} + +int main(int argc, char **argv) +{ + int i = 0, fd, ret; + unsigned int val; + unsigned long code = 0; + + if (argc != 3) + usage(argv[0]); + + while (requests[i].name) { + if (strcmp(argv[1], requests[i].name) == 0) { + code = requests[i].code; + break; + } + i++; + } + if (code == 0) + usage(argv[0]); + + fd = open(argv[2], O_RDWR); + if (fd < 0) { + perror("open"); + return EXIT_FAILURE; + } + + ret = ioctl(fd, code, &val); + if (ret < 0) { + perror("ioctl"); + close(fd); + return EXIT_FAILURE; + } + + printf("%u\n", val); + + close(fd); + + return EXIT_SUCCESS; +} + +#endif + From patchwork Mon Jan 28 13:14:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shinichiro Kawasaki X-Patchwork-Id: 10783687 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 09D6D1390 for ; Mon, 28 Jan 2019 13:15:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EBB882A82A for ; Mon, 28 Jan 2019 13:15:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DFADA2AA57; Mon, 28 Jan 2019 13:15:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 53FC32A82A for ; Mon, 28 Jan 2019 13:15:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726774AbfA1NPb (ORCPT ); Mon, 28 Jan 2019 08:15:31 -0500 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:60364 "EHLO esa1.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726772AbfA1NPb (ORCPT ); Mon, 28 Jan 2019 08:15:31 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1548681331; x=1580217331; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=lXVjGmULqipA7ROs8cuvjZ8HifiIlveKYNJgKpS3KdE=; b=QPwJWJX8sJbv4TupE4Oh0e7KumYPZs3mQlRnBcA7qySlqza2W6sdfv09 GyUtgZnWz0VjNMXUL5fdfHLYOq8OuYu+prtscXbCfS8UD3V4E/4jkPJo0 x8Dm/9yJeV3NoQTY3nro3hoSJg+jO/FCw5xG8zNJWCxbHZ0ibFiYrzXp/ azZTJck9aCozcQMi9WUhx84F90tYulGUJ1QHps94Vm3tYQAK+DEgyA0iW 9nYbG7MEwXU0RA4t6kN2KKWEu6sAXl3RHG4lqpcwkLnrvIge5tX9r5FSG POsxTaAQ98u7qxQZmNhkvKCWJ/niW7I+zeWbqA6VBQ9as3GiiOEa/qHME g==; X-IronPort-AV: E=Sophos;i="5.56,534,1539619200"; d="scan'208";a="204977749" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 28 Jan 2019 21:15:31 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP; 28 Jan 2019 04:56:32 -0800 Received: from shin_dev.dhcp.fujisawa.hgst.com (HELO shin_dev.fujisawa.hgst.com) ([10.149.52.166]) by uls-op-cesaip02.wdc.com with ESMTP; 28 Jan 2019 05:15:28 -0800 From: Shin'ichiro Kawasaki To: linux-block@vger.kernel.org, Omar Sandoval , Masato Suzuki , Shinichiro Kawasaki Cc: Omar Sandoval , Jens Axboe , Matias Bjorling , Hannes Reinecke , Mike Snitzer , "Martin K . Petersen" , Damien Le Moal , Chaitanya Kulkarni Subject: [PATCH blktests v4 07/12] tests: Introduce zbd test group Date: Mon, 28 Jan 2019 22:14:50 +0900 Message-Id: <20190128131455.31997-8-shinichiro.kawasaki@wdc.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> References: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Masato Suzuki The zoned block device (zbd) test group is used to gather all tests specific to zoned block devices (null_blk device with zoned mode enabled, SMR disks, dm-linear on top of zoned devices, etc). Execution of this group requires that the kernel be compiled with the block layer CONFIG_BLK_DEV_ZONED option enabled and also requires the null_blk driver to have zoned mode support (added in kernel 4.19). This group rc script implements _fallback_null_blk_zoned() helper function which initailize a null_blk device with zoned mode. Each of the zbd group test cases calls it in fallback_device() function. This allows the zbd group test cases fallback to the null_blk device even if the TEST_DEVS is empty. With this, all tests scripts can be written by only defining the test_device() function while allowing operation on both null_blk and user specified devices. Signed-off-by: Shin'ichiro Kawasaki Signed-off-by: Masato Suzuki --- tests/zbd/rc | 195 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 195 insertions(+) create mode 100644 tests/zbd/rc diff --git a/tests/zbd/rc b/tests/zbd/rc new file mode 100644 index 0000000..a6c7696 --- /dev/null +++ b/tests/zbd/rc @@ -0,0 +1,195 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2018 Western Digital Corporation or its affiliates. +# +# Tests for Zone Block Device. + +. common/rc +. common/null_blk + +# +# Test requirement check functions +# + +group_requires() { + _have_root || return $? + _have_program blkzone || return $? + _have_program dd || return $? + _have_kernel_option BLK_DEV_ZONED || return $? + _have_modules null_blk && _have_module_param null_blk zoned +} + +group_device_requires() { + _test_dev_is_zoned +} + +_fallback_null_blk_zoned() { + if ! _init_null_blk zone_size=4 gb=1 zoned=1 ; then + return 1 + fi + echo /dev/nullb0 +} + +# +# Zone types and conditions +# +export ZONE_TYPE_CONVENTIONAL=1 +export ZONE_TYPE_SEQ_WRITE_REQUIRED=2 +export ZONE_TYPE_SEQ_WRITE_PREFERRED=3 + +export ZONE_COND_EMPTY=1 +export ZONE_COND_IMPLICIT_OPEN=2 +export ZONE_COND_FULL=14 + +export ZONE_TYPE_ARRAY=( + [1]="CONVENTIONAL" + [2]="SEQ_WRITE_REQUIRED" + [3]="SEQ_WRITE_PREFERRED" +) + +export ZONE_COND_ARRAY=( + [0]="NOT_WP" + [1]="EMPTY" + [2]="IMPLICIT_OPEN" + [3]="EXPLICIT_OPEN" + [4]="CLOSE" + [13]="READ_ONLY" + [14]="FULL" + [15]="OFFLINE" +) + +# sysfs variable array indices +export SV_CAPACITY=0 +export SV_CHUNK_SECTORS=1 +export SV_PHYS_BLK_SIZE=2 +export SV_PHYS_BLK_SECTORS=3 +export SV_NR_ZONES=4 + +# +# Helper functions +# + +# Obtain zone related sysfs variables and keep in a global array until put +# function call. +_get_sysfs_variable() { + unset SYSFS_VARS + local _dir=${TEST_DEV_SYSFS} + SYSFS_VARS[$SV_CAPACITY]=$(<"${_dir}"/size) + SYSFS_VARS[$SV_CHUNK_SECTORS]=$(<"${_dir}"/queue/chunk_sectors) + SYSFS_VARS[$SV_PHYS_BLK_SIZE]=$(<"${_dir}"/queue/physical_block_size) + SYSFS_VARS[$SV_PHYS_BLK_SECTORS]=$((SYSFS_VARS[SV_PHYS_BLK_SIZE] / 512)) + + # If the nr_zones sysfs attribute exists, get its value. Otherwise, + # calculate its value based on the total capacity and zone size, taking + # into account that the last zone can be smaller than other zones. + if [[ -e ${TEST_DEV_SYSFS}/queue/nr_zones ]]; then + SYSFS_VARS[$SV_NR_ZONES]=$(<"${_dir}"/queue/nr_zones) + else + SYSFS_VARS[$SV_NR_ZONES]=$(( (SYSFS_VARS[SV_CAPACITY] - 1) \ + / SYSFS_VARS[SV_CHUNK_SECTORS] + 1 )) + fi +} + +_put_sysfs_variable() { + unset SYSFS_VARS +} + +# Issue zone report command and keep reported information in global arrays +# until put function call. +_get_blkzone_report() { + local target_dev=${1} + + # Initialize arrays to store parsed blkzone reports. + # Number of reported zones is set in REPORTED_COUNT. + # The arrays have REPORTED_COUNT+1 elements with additional one at tail + # to simplify loop operation. + ZONE_STARTS=() + ZONE_LENGTHS=() + ZONE_WPTRS=() + ZONE_CONDS=() + ZONE_TYPES=() + NR_CONV_ZONES=0 + REPORTED_COUNT=0 + + TMP_REPORT_FILE=${TMPDIR}/blkzone_report + if ! blkzone report "${target_dev}" > "${TMP_REPORT_FILE}"; then + echo "blkzone command failed" + return $? + fi + + local _IFS=$IFS + local -i loop=0 + IFS=$' ,:' + while read -r -a _tokens + do + ZONE_STARTS+=($((_tokens[1]))) + ZONE_LENGTHS+=($((_tokens[3]))) + ZONE_WPTRS+=($((_tokens[5]))) + ZONE_CONDS+=($((${_tokens[11]%\(*}))) + ZONE_TYPES+=($((${_tokens[13]%\(*}))) + if [[ ${ZONE_TYPES[-1]} -eq ${ZONE_TYPE_CONVENTIONAL} ]]; then + (( NR_CONV_ZONES++ )) + fi + (( loop++ )) + done < "${TMP_REPORT_FILE}" + IFS="$_IFS" + REPORTED_COUNT=${loop} + + if [[ ${REPORTED_COUNT} -eq 0 ]] ; then + echo "blkzone report returned no zone" + return 1 + fi + + # Set value to allow additioanl element access at array end + local -i max_idx=$((REPORTED_COUNT - 1)) + ZONE_STARTS+=( $((ZONE_STARTS[max_idx] + ZONE_LENGTHS[max_idx])) ) + ZONE_LENGTHS+=( "${ZONE_LENGTHS[max_idx]}" ) + ZONE_WPTRS+=( "${ZONE_WPTRS[max_idx]}" ) + ZONE_CONDS+=( "${ZONE_CONDS[max_idx]}" ) + ZONE_TYPES+=( "${ZONE_TYPES[max_idx]}" ) + + rm -f "${TMP_REPORT_FILE}" +} + +_put_blkzone_report() { + unset ZONE_STARTS + unset ZONE_LENGTHS + unset ZONE_WPTRS + unset ZONE_CONDS + unset ZONE_TYPES + unset REPORTED_COUNT + unset NR_CONV_ZONES +} + +# Issue reset zone command with zone count option. +# Call _get_blkzone_report() beforehand. +_reset_zones() { + local target_dev=${1} + local -i idx=${2} + local -i count=${3} + + if ! blkzone reset -o "${ZONE_STARTS[idx]}" -c "${count}" \ + "${target_dev}" >> "$FULL" 2>&1 ; then + echo "blkzone reset command failed" + return 1 + fi +} + +# Search zones and find two contiguous sequential required zones. +# Return index of the first zone of the found two zones. +# Call _get_blkzone_report() beforehand. +_find_two_contiguous_seq_zones() { + local -i type_seq=${ZONE_TYPE_SEQ_WRITE_REQUIRED} + + for ((idx = NR_CONV_ZONES; idx < REPORTED_COUNT; idx++)); do + if [[ ${ZONE_TYPES[idx]} -eq ${type_seq} && + ${ZONE_TYPES[idx+1]} -eq ${type_seq} ]]; then + echo "${idx}" + return 0 + fi + done + + echo "Contiguous sequential write required zones not found" + return 1 +} + From patchwork Mon Jan 28 13:14:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shinichiro Kawasaki X-Patchwork-Id: 10783689 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DFB811390 for ; Mon, 28 Jan 2019 13:15:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CF4A42A82A for ; Mon, 28 Jan 2019 13:15:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C321F2AA57; Mon, 28 Jan 2019 13:15:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 601282A82A for ; Mon, 28 Jan 2019 13:15:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726803AbfA1NPf (ORCPT ); Mon, 28 Jan 2019 08:15:35 -0500 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:60364 "EHLO esa1.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726784AbfA1NPf (ORCPT ); Mon, 28 Jan 2019 08:15:35 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1548681335; x=1580217335; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ZuAoGLlnQKEbYDiO6jPdNjX8klQL9nBbv/TjzQXA7Ec=; b=ZlMxAwzguLwHPqhm0U/u/SKikh4vzAYYe8+TF+0oHxM+GBeFIM1R6JB/ 7wyYeLoqCKX/9WDPxNCcGGwXgmUZXYn+thLLlaK2LDM3uxRf4f0K50aSz e6EyDWYd3VS8hxOKhRyCyevRes0FQTrirLf9ZJyuxNQiaBvWV8NKLNtUf msm/XBLbwChpsRWwGeK0yagjFyXZppnDa7xibWaavD4BD8p7i3G61yx8U WbbJGuPDxAGj+02gPWlmrjx01A+0WHv6stP9UZg8KgrZv2G6zygaWUww0 FEcKXlUaBhZjTEpgS6R/80odwQAqAobFagiLcGfY86m597jLJOVpffdFr w==; X-IronPort-AV: E=Sophos;i="5.56,534,1539619200"; d="scan'208";a="204977751" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 28 Jan 2019 21:15:35 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP; 28 Jan 2019 04:56:36 -0800 Received: from shin_dev.dhcp.fujisawa.hgst.com (HELO shin_dev.fujisawa.hgst.com) ([10.149.52.166]) by uls-op-cesaip02.wdc.com with ESMTP; 28 Jan 2019 05:15:32 -0800 From: Shin'ichiro Kawasaki To: linux-block@vger.kernel.org, Omar Sandoval , Masato Suzuki , Shinichiro Kawasaki Cc: Omar Sandoval , Jens Axboe , Matias Bjorling , Hannes Reinecke , Mike Snitzer , "Martin K . Petersen" , Damien Le Moal , Chaitanya Kulkarni Subject: [PATCH blktests v4 08/12] zbd/001: sysfs and ioctl consistency test Date: Mon, 28 Jan 2019 22:14:51 +0900 Message-Id: <20190128131455.31997-9-shinichiro.kawasaki@wdc.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> References: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Masato Suzuki Obtain a zoned block device attributes from sysfs and using ioctl calls and confirm the consistency of the values. Signed-off-by: Shin'ichiro Kawasaki Signed-off-by: Masato Suzuki --- tests/zbd/001 | 75 +++++++++++++++++++++++++++++++++++++++++++++++ tests/zbd/001.out | 2 ++ 2 files changed, 77 insertions(+) create mode 100755 tests/zbd/001 create mode 100644 tests/zbd/001.out diff --git a/tests/zbd/001 b/tests/zbd/001 new file mode 100755 index 0000000..ccb6e6c --- /dev/null +++ b/tests/zbd/001 @@ -0,0 +1,75 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2018 Western Digital Corporation or its affiliates. +# +# Check zoned block device sysfs and ioctl parameter availability and +# confirm consistency among them. + +. tests/zbd/rc + +DESCRIPTION="sysfs and ioctl" +QUICK=1 +CAN_BE_ZONED=1 + +requires() { + _have_src_program zbdioctl +} + +fallback_device() { + _fallback_null_blk_zoned +} + +cleanup_fallback_device() { + _exit_null_blk +} + +test_device() { + echo "Running ${TEST_NAME}" + + # Get and keep sysfs variables + _get_sysfs_variable "${TEST_DEV}" || return $? + local -i capacity=${SYSFS_VARS[$SV_CAPACITY]} + local -i chunk_sectors=${SYSFS_VARS[$SV_CHUNK_SECTORS]} + + # Calculate expected number of zones based on the total capacity and + # zone size, taking into account that the last zone can be smaller + # than other zones. + local -i nr_zones=$(( (capacity - 1) / chunk_sectors + 1 )) + + # Compare sysfs values and ioctl values + if [[ -e "${TEST_DEV_SYSFS}"/queue/nr_zones ]]; then + local -i sysfs_nr_zones=${SYSFS_VARS[$SV_NR_ZONES]} + local -i ioctl_nr_zones + local -i ioctl_zonesize + + ioctl_zonesize=$(src/zbdioctl -s "${TEST_DEV}") + if [[ ${chunk_sectors} -ne ${ioctl_zonesize} ]]; then + echo -n "ioctl zone size:${ioctl_zonesize} != " + echo "sysfs chunk_sectors:${chunk_sectors}" + return 1 + fi + + ioctl_nr_zones=$(src/zbdioctl -n "${TEST_DEV}") + if [[ ${nr_zones} -ne ${ioctl_nr_zones} ]]; then + echo -n "ioctl nr_zones:${ioctl_nr_zones} != " + echo "nr_zones:${nr_zones}" + return 1 + fi + + if [[ ${nr_zones} -ne ${sysfs_nr_zones} ]]; then + echo -n "sysfs nr_zones:${sysfs_nr_zones} != " + echo "nr_zones:${nr_zones}" + return 1 + fi + fi + + _put_sysfs_variable + { + echo "Capacity: ${capacity} sectors" + echo "Zone: ${chunk_sectors} sectors" + echo "Number of zones: ${nr_zones} zones" + } >> "$FULL" 2>&1 + + echo "Test complete" +} + diff --git a/tests/zbd/001.out b/tests/zbd/001.out new file mode 100644 index 0000000..7d72a8f --- /dev/null +++ b/tests/zbd/001.out @@ -0,0 +1,2 @@ +Running zbd/001 +Test complete From patchwork Mon Jan 28 13:14:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shinichiro Kawasaki X-Patchwork-Id: 10783691 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E95E414E1 for ; Mon, 28 Jan 2019 13:15:40 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D88CD2A82A for ; Mon, 28 Jan 2019 13:15:40 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CC7B02AA57; Mon, 28 Jan 2019 13:15:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5F3C22A82A for ; Mon, 28 Jan 2019 13:15:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726784AbfA1NPj (ORCPT ); Mon, 28 Jan 2019 08:15:39 -0500 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:60364 "EHLO esa1.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726749AbfA1NPj (ORCPT ); Mon, 28 Jan 2019 08:15:39 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1548681339; x=1580217339; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dh8QPHi3FD6QXaxoS9Vqy3f5Q2frQEsXR0qi8u8XpP0=; b=N/+LA7ALgNMZwiEiesdihXabJOwErrEbDRMi9o+zpe4gnb6HE5YNt4E1 6E6+19+qp75I7GWvHOP1a+SwVSL1nUS6Z0T/zgw6yjqRxEoasrvJqhjzt otd8+XPI15No9c6CrjGECdndPVhE7GUADlu6fo/EoxqCdNgncU8Cct5QD Fkek4O0SB1PYkkCDzclzQ0JZM38KI9fHG5uw7knUaJXqKmHBQStIXNEv6 dPZeJvIjhNYCa8gYWsDA3endgOMaeV4b5luDoHcJXfh1RGsNtptfJjWrK 2QCWpnVoI4X2YmwemhQmosMWzhl8nyRwwjOdLkBtGg6wTiEvKNrQ1lFuX g==; X-IronPort-AV: E=Sophos;i="5.56,534,1539619200"; d="scan'208";a="204977754" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 28 Jan 2019 21:15:39 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP; 28 Jan 2019 04:56:40 -0800 Received: from shin_dev.dhcp.fujisawa.hgst.com (HELO shin_dev.fujisawa.hgst.com) ([10.149.52.166]) by uls-op-cesaip02.wdc.com with ESMTP; 28 Jan 2019 05:15:36 -0800 From: Shin'ichiro Kawasaki To: linux-block@vger.kernel.org, Omar Sandoval , Masato Suzuki , Shinichiro Kawasaki Cc: Omar Sandoval , Jens Axboe , Matias Bjorling , Hannes Reinecke , Mike Snitzer , "Martin K . Petersen" , Damien Le Moal , Chaitanya Kulkarni Subject: [PATCH blktests v4 09/12] zbd/002: report zone test Date: Mon, 28 Jan 2019 22:14:52 +0900 Message-Id: <20190128131455.31997-10-shinichiro.kawasaki@wdc.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> References: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Masato Suzuki Get a report for all zones and confirm that the reported values are valid and consistent with regard to the device capacity and zone size. Signed-off-by: Masato Suzuki --- tests/zbd/002 | 108 ++++++++++++++++++++++++++++++++++++++++++++++ tests/zbd/002.out | 2 + 2 files changed, 110 insertions(+) create mode 100755 tests/zbd/002 create mode 100644 tests/zbd/002.out diff --git a/tests/zbd/002 b/tests/zbd/002 new file mode 100755 index 0000000..e197827 --- /dev/null +++ b/tests/zbd/002 @@ -0,0 +1,108 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2018 Western Digital Corporation or its affiliates. +# +# Issue report zone command and confirm consistency of reported values. + +. tests/zbd/rc + +DESCRIPTION="report zone" +CAN_BE_ZONED=1 + +fallback_device() { + _fallback_null_blk_zoned +} + +cleanup_fallback_device() { + _exit_null_blk +} + +_check_blkzone_report() { + # Utilize local variables as much as possible to speed up loop execution + local -i max_idx=$((REPORTED_COUNT - 1)) + local -i chunk_sectors=${SYSFS_VARS[$SV_CHUNK_SECTORS]} + local -i cur_start=${ZONE_STARTS[0]} + local -i next_start=0 + local -i len=0 + local -i wptr=0 + local -i cond=0 + local -i zone_type=0 + + # Confirm number of reported zones + if [[ ${REPORTED_COUNT} -ne ${SYSFS_VARS[$SV_NR_ZONES]} ]]; then + echo "The number of zones reported differ from sysfs nr_zones" + echo -n "Reported zones count: ${REPORTED_COUNT} " + echo "sysfs nr_zones: ${SYSFS_VARS[$SV_NR_ZONES]}" + return 1 + fi + + # Check consistency between last zone size and capacity + local -i last_zone_end=$((ZONE_STARTS[max_idx] + ZONE_LENGTHS[max_idx])) + if [[ ${last_zone_end} -gt ${SYSFS_VARS[$SV_CAPACITY]} ]]; then + echo "Last zone start sector + length exceeds capacity" + echo -n "Capacity: ${SYSFS_VARS[$SV_CAPACITY]}, " + echo "last zone start sector + length: ${last_zone_end}" + return 1 + fi + + # Check each zone parameter validity and that all zones are contiguous + for ((idx = 0; idx <= max_idx; idx++)); do + + next_start=${ZONE_STARTS[$((idx+1))]} + len=${ZONE_LENGTHS[$idx]} + wptr=${ZONE_WPTRS[$idx]} + cond=${ZONE_CONDS[$idx]} + zone_type=${ZONE_TYPES[$idx]} + + # Check two zones are contiguous + if [[ $((cur_start+len)) -ne ${next_start} ]]; then + echo -n "Zones are not contiguous at zone ${idx}. " + echo "cur:${cur_start}+${len}, next:${next_start}" + return 1 + fi + + # Check zone size + if [[ ${len} -ne ${chunk_sectors} && + ${idx} -ne ${max_idx} ]]; then + echo -n "Zone size is not same as chunk_sectors " + echo -n "at zone ${idx}. " + echo "size: ${len}, chunk_sectors: ${chunk_sectors}" + return 1 + fi + + # Check write pointer + if [[ ${wptr} -lt 0 || ${wptr} -gt ${len} ]]; then + echo -n "Write pointer is invalid at zone ${idx}. " + echo "wp:${wptr}" + return 1 + fi + + # Check zone condition + if [[ ! ${ZONE_COND_ARRAY[cond]} ]]; then + echo -n "Zone condition is incorrect at zone ${idx}. " + echo "condition: ${cond}" + return 1 + fi + + # Check zone type + if [[ ! ${ZONE_TYPE_ARRAY[zone_type]} ]]; then + echo -n "Zone type is incorrect at zone ${idx}. " + echo "type: ${zone_type}" + return 1 + fi + cur_start=${next_start} + done + return 0 +} + +test_device() { + echo "Running ${TEST_NAME}" + + _get_sysfs_variable "${TEST_DEV}" || return $? + _get_blkzone_report "${TEST_DEV}" || return $? + _check_blkzone_report || return $? + _put_blkzone_report + _put_sysfs_variable + + echo "Test complete" +} diff --git a/tests/zbd/002.out b/tests/zbd/002.out new file mode 100644 index 0000000..7317541 --- /dev/null +++ b/tests/zbd/002.out @@ -0,0 +1,2 @@ +Running zbd/002 +Test complete From patchwork Mon Jan 28 13:14:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shinichiro Kawasaki X-Patchwork-Id: 10783693 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B075814E1 for ; Mon, 28 Jan 2019 13:15:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9E2EF2A82A for ; Mon, 28 Jan 2019 13:15:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9216F2AA57; Mon, 28 Jan 2019 13:15:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2A3282A82A for ; Mon, 28 Jan 2019 13:15:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726805AbfA1NPn (ORCPT ); Mon, 28 Jan 2019 08:15:43 -0500 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:60364 "EHLO esa1.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726749AbfA1NPn (ORCPT ); Mon, 28 Jan 2019 08:15:43 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1548681343; x=1580217343; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=kcZXOWh1pVC/rkudT3LXS2yfQORUy01+AeeioeZH+lE=; b=NONyVKBJnXySEAWDqEZb9bvwRIVHR5gv/cPeyPv/taquwTfdhmWRtF6f HkyF7tiX8JTyTponu6Sj8GJ0+716xmxbAPWeNHEpQPM4zdUJPR0aNGVxG 9Cw4YFaHF6I/4DMzHxdYI+bWHma8g8CXDvivTpwiY0CNM5CfY4++besRj CU5rZLUT/LztGwkc83jhG5kmWKzIyuEq/5V41mjCZ+zs+l1Y+FhLulpx3 enIavznu9fAxRK69da+k/0qGMWfdE6sGm8lvi9n3SBihcO/8YQvE4wp4D 7LWK1UIQmiOGmMSXl0yJWLBl3C6Rj66p6a4FbS9c1T5E4LgjGdUxsQzPP Q==; X-IronPort-AV: E=Sophos;i="5.56,534,1539619200"; d="scan'208";a="204977757" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 28 Jan 2019 21:15:43 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP; 28 Jan 2019 04:56:44 -0800 Received: from shin_dev.dhcp.fujisawa.hgst.com (HELO shin_dev.fujisawa.hgst.com) ([10.149.52.166]) by uls-op-cesaip02.wdc.com with ESMTP; 28 Jan 2019 05:15:40 -0800 From: Shin'ichiro Kawasaki To: linux-block@vger.kernel.org, Omar Sandoval , Masato Suzuki , Shinichiro Kawasaki Cc: Omar Sandoval , Jens Axboe , Matias Bjorling , Hannes Reinecke , Mike Snitzer , "Martin K . Petersen" , Damien Le Moal , Chaitanya Kulkarni Subject: [PATCH blktests v4 10/12] zbd/003: Test sequential zones reset Date: Mon, 28 Jan 2019 22:14:53 +0900 Message-Id: <20190128131455.31997-11-shinichiro.kawasaki@wdc.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> References: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Masato Suzuki Test zone reset operation to make sure that the BLKRESETZONE ioctl call works as expected but also that the zone sector remapping that may be done for logical devices (partitions or dm-linear devices) is correct. Signed-off-by: Shin'ichiro Kawasaki Signed-off-by: Masato Suzuki --- tests/zbd/003 | 82 +++++++++++++++++++++++++++++++++++++++++++++++ tests/zbd/003.out | 2 ++ 2 files changed, 84 insertions(+) create mode 100755 tests/zbd/003 create mode 100644 tests/zbd/003.out diff --git a/tests/zbd/003 b/tests/zbd/003 new file mode 100755 index 0000000..079be02 --- /dev/null +++ b/tests/zbd/003 @@ -0,0 +1,82 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2018 Western Digital Corporation or its affiliates. +# +# Confirm that reset zone command for 2 contiguous sequential write +# requried zones works as expected. + +. tests/zbd/rc + +DESCRIPTION="reset sequential required zones" +QUICK=1 +CAN_BE_ZONED=1 + +requires() { + _have_program blkzone +} + +fallback_device() { + _fallback_null_blk_zoned +} + +cleanup_fallback_device() { + _exit_null_blk +} + +test_device() { + local -i zone_idx + local -a target_zones + local -i bs + + echo "Running ${TEST_NAME}" + + # Get physical block size as dd block size to meet zoned block device + # requirement + _get_sysfs_variable "${TEST_DEV}" || return $? + bs=${SYSFS_VARS[$SV_PHYS_BLK_SIZE]} + _put_sysfs_variable + + # Select 2 target zones so that reset zone range also get tested + _get_blkzone_report "${TEST_DEV}" || return $? + zone_idx=$(_find_two_contiguous_seq_zones) || return $? + target_zones=( "${zone_idx}" "$((zone_idx + 1))" ) + + # Reset the 2 target zones and write 4KB in each zone to increment + # their write pointer positions + _reset_zones "${TEST_DEV}" "${zone_idx}" "2" + for i in "${target_zones[@]}"; do + if ! dd bs=${bs} count=$(( 4096 / bs )) \ + if=/dev/zero of="${TEST_DEV}" oflag=direct \ + seek=$((ZONE_STARTS[i] * 512 / bs)) >> "$FULL" 2>&1 ; then + echo "dd failed" + fi + done + _put_blkzone_report + + # Check that the write pointers have moved by 8x512 B sectors + _get_blkzone_report "${TEST_DEV}" || return $? + for i in "${target_zones[@]}"; do + if [[ ${ZONE_WPTRS[$i]} -ne 8 ]]; then + echo -n "Unexpected write poiter position in zone ${i} " + echo "wp: ${ZONE_WPTRS[i]}" + return 1 + fi + done + + # Reset the 2 target zones + _reset_zones "${TEST_DEV}" "${zone_idx}" "2" + _put_blkzone_report + + # Check that the write pointers have moved back to position 0 + _get_blkzone_report "${TEST_DEV}" || return $? + for i in "${target_zones[@]}"; do + if [[ ${ZONE_WPTRS[i]} -ne 0 ]]; then + echo -n "Unexpected non-zero write poiter in zone ${i} " + echo "wp: ${ZONE_WPTRS[i]}" + return 1 + fi + done + _put_blkzone_report + + echo "Test complete" +} diff --git a/tests/zbd/003.out b/tests/zbd/003.out new file mode 100644 index 0000000..7326ae4 --- /dev/null +++ b/tests/zbd/003.out @@ -0,0 +1,2 @@ +Running zbd/003 +Test complete From patchwork Mon Jan 28 13:14:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shinichiro Kawasaki X-Patchwork-Id: 10783695 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2AE911390 for ; Mon, 28 Jan 2019 13:15:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1A1C32A82A for ; Mon, 28 Jan 2019 13:15:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0E0582AA57; Mon, 28 Jan 2019 13:15:51 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8879D2A82A for ; Mon, 28 Jan 2019 13:15:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726825AbfA1NPt (ORCPT ); Mon, 28 Jan 2019 08:15:49 -0500 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:60364 "EHLO esa1.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726749AbfA1NPs (ORCPT ); Mon, 28 Jan 2019 08:15:48 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1548681347; x=1580217347; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=o3ijVPlHOHweejMKpnpz1+JJdIfDikp98NdosZb2dsM=; b=oKIdCZOaq0uz7u5CKzhuYCY21VsPJtebSWM2SGFj6lD/Shg2MNJWw4Fr Zja3BjfEBabk3jDBLAhMN8Fnw9F9taf+n0/dG90x4XluB3f8WCncf2MXc GWzF6nUtBiiGwtSTQXK5+KrJ9jn6XpNsin8+g8Z3l1kp9Qep9C7KtdCry 1+/kSqdoZ7Xrp1BQeJLZKmO4e5O5WOJz5VtnPpQwFQNKE7nE1s5z2CcKX Ng02hWnfwGnwVcsNVTmswThbLR9hKx63PASC//qeUKg3kH5uFfekUtdAM kVcHQs2XE9wPVBittIekl6/XlNV958lSdMRJ4yWblw7ENHPNW5CoY/BSY w==; X-IronPort-AV: E=Sophos;i="5.56,534,1539619200"; d="scan'208";a="204977764" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 28 Jan 2019 21:15:47 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP; 28 Jan 2019 04:56:48 -0800 Received: from shin_dev.dhcp.fujisawa.hgst.com (HELO shin_dev.fujisawa.hgst.com) ([10.149.52.166]) by uls-op-cesaip02.wdc.com with ESMTP; 28 Jan 2019 05:15:44 -0800 From: Shin'ichiro Kawasaki To: linux-block@vger.kernel.org, Omar Sandoval , Masato Suzuki , Shinichiro Kawasaki Cc: Omar Sandoval , Jens Axboe , Matias Bjorling , Hannes Reinecke , Mike Snitzer , "Martin K . Petersen" , Damien Le Moal , Chaitanya Kulkarni Subject: [PATCH blktests v4 11/12] zbd/004: Check write split accross sequential zones Date: Mon, 28 Jan 2019 22:14:54 +0900 Message-Id: <20190128131455.31997-12-shinichiro.kawasaki@wdc.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> References: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Masato Suzuki Check that write operations spanning a zone boundary are correctly processed as 2 different write operations each fully within a single zone. Signed-off-by: Masato Suzuki --- tests/zbd/004 | 99 +++++++++++++++++++++++++++++++++++++++++++++++ tests/zbd/004.out | 2 + 2 files changed, 101 insertions(+) create mode 100755 tests/zbd/004 create mode 100644 tests/zbd/004.out diff --git a/tests/zbd/004 b/tests/zbd/004 new file mode 100755 index 0000000..ee7a6f0 --- /dev/null +++ b/tests/zbd/004 @@ -0,0 +1,99 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2018 Western Digital Corporation or its affiliates. +# +# Check kernel splits write operations across a zone border. Select two +# contiguous sequential write required zones and confirm write oprations +# across the two zones succeed. + +. tests/zbd/rc + +DESCRIPTION="write split across sequential zones" +QUICK=1 +CAN_BE_ZONED=1 + +fallback_device() { + _fallback_null_blk_zoned +} + +cleanup_fallback_device() { + _exit_null_blk +} + +_check_zone_cond() { + local -i idx=${1} + local -i cond=${2} + + if [[ ${ZONE_CONDS[idx]} -ne ${cond} ]]; then + echo -n "Zone ${idx} condition is not ${ZONE_COND_ARRAY[cond]} " + echo "cond: ${ZONE_COND_ARRAY[ZONE_CONDS[idx]]}" + return 1 + fi +} + +test_device() { + local -i idx + local -i phys_blk_size + local -i phys_blk_sectors + + echo "Running ${TEST_NAME}" + + # Get physical block size and sectors for dd. + _get_sysfs_variable "${TEST_DEV}" || return $? + phys_blk_size=${SYSFS_VARS[SV_PHYS_BLK_SIZE]} + phys_blk_sectors=${SYSFS_VARS[SV_PHYS_BLK_SECTORS]} + _put_sysfs_variable + + # Find target sequential required zones and reset write pointers + _get_blkzone_report "${TEST_DEV}" || return $? + idx=$(_find_two_contiguous_seq_zones) || return $? + _reset_zones "${TEST_DEV}" "${idx}" "2" + + # Confirm the zones are initialized + _put_blkzone_report + _get_blkzone_report "${TEST_DEV}" || return $? + _check_zone_cond "${idx}" "${ZONE_COND_EMPTY}" || return $? + _check_zone_cond "$((idx+1))" "${ZONE_COND_EMPTY}" || return $? + + # Fill first target zone, remaining a physical block to write. + # Set physical block size as dd block size to meet zoned block + # device requirement. + if ! dd bs=${phys_blk_size} \ + count=$(((ZONE_LENGTHS[idx] - phys_blk_sectors) \ + * 512 / phys_blk_size)) \ + if=/dev/zero of="${TEST_DEV}" oflag=direct \ + seek=$((ZONE_STARTS[idx] * 512 / phys_blk_size)) \ + >> "$FULL" 2>&1 ; then + echo "Fill zone failed" + return 1 + fi + + # Write across the zone border as a single block write. + # Specify count=1 to request one shot write, expecting kernel to split + # the request. Set dd block size as phys_blk_size * 2 to make count=1. + local -i start_sector=$((ZONE_STARTS[idx+1] - phys_blk_sectors)) + if ! dd bs=$((phys_blk_size * 2)) count=1 \ + if=/dev/zero of="${TEST_DEV}" oflag=seek_bytes,direct \ + seek=$((start_sector * 512)) >> "$FULL" 2>&1 ; then + echo "Fill zone failed" + return 1 + fi + + # Confirm the zone conditions are as expected + _put_blkzone_report + _get_blkzone_report "${TEST_DEV}" || return $? + _check_zone_cond "${idx}" "${ZONE_COND_FULL}" || return $? + _check_zone_cond "$((idx+1))" "${ZONE_COND_IMPLICIT_OPEN}" || return $? + if [[ ${ZONE_WPTRS[idx+1]} -ne ${phys_blk_sectors} ]]; then + echo -n "Unexpected write pointer for zone $((idx+1)) " + echo "wp: ${ZONE_WPTRS[idx+1]}" + return 1 + fi + + # Clean up + _reset_zones "${TEST_DEV}" "${idx}" "2" + _put_blkzone_report + + echo "Test complete" +} + diff --git a/tests/zbd/004.out b/tests/zbd/004.out new file mode 100644 index 0000000..dd4ea94 --- /dev/null +++ b/tests/zbd/004.out @@ -0,0 +1,2 @@ +Running zbd/004 +Test complete From patchwork Mon Jan 28 13:14:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shinichiro Kawasaki X-Patchwork-Id: 10783697 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BDF0014E1 for ; Mon, 28 Jan 2019 13:15:52 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A7F8B2A82A for ; Mon, 28 Jan 2019 13:15:52 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9BE162AA57; Mon, 28 Jan 2019 13:15:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3FB4E2A82A for ; Mon, 28 Jan 2019 13:15:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726862AbfA1NPv (ORCPT ); Mon, 28 Jan 2019 08:15:51 -0500 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:60364 "EHLO esa1.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726749AbfA1NPv (ORCPT ); Mon, 28 Jan 2019 08:15:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1548681351; x=1580217351; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=HhLivrf1ZOQNPDV2UpJ0kdP7WmFbE6YMCJKyYi+AggQ=; b=ptVvbjKM9ZkhuxxUC0kK0ek9VQLXx3yO1lzPzxEtsmM5qUQLyLQxsgwF BYGIEEbZQeQqC7OX0XmLYNouUGGQ0c54oFpRB5D8+GJGX6kUwa3H63/3T OCQ6YLJC3vw5GYIrG43XR1lKIDTQp8FjTZZPqwNPCk0B3eGXWGSOsSzAv tJ8pnijDUjCGgAdFcQzWxFzjKY4yocC4pn8gDatZsN5KHoo8YfooNS2a3 sPBKP/+VCtmsB0DqlCiUcap/68a9HPlH9FHIvCZERcmx7RahRySjnSHsW Zc0yOGpVzkcrKBtuNqm49aA+tCtsUZRzvPxdhSF/qYbgsDCXSYasSBFuo Q==; X-IronPort-AV: E=Sophos;i="5.56,534,1539619200"; d="scan'208";a="204977770" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 28 Jan 2019 21:15:51 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP; 28 Jan 2019 04:56:52 -0800 Received: from shin_dev.dhcp.fujisawa.hgst.com (HELO shin_dev.fujisawa.hgst.com) ([10.149.52.166]) by uls-op-cesaip02.wdc.com with ESMTP; 28 Jan 2019 05:15:48 -0800 From: Shin'ichiro Kawasaki To: linux-block@vger.kernel.org, Omar Sandoval , Masato Suzuki , Shinichiro Kawasaki Cc: Omar Sandoval , Jens Axboe , Matias Bjorling , Hannes Reinecke , Mike Snitzer , "Martin K . Petersen" , Damien Le Moal , Chaitanya Kulkarni Subject: [PATCH blktests v4 12/12] zbd/005: Test write ordering Date: Mon, 28 Jan 2019 22:14:55 +0900 Message-Id: <20190128131455.31997-13-shinichiro.kawasaki@wdc.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> References: <20190128131455.31997-1-shinichiro.kawasaki@wdc.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Masato Suzuki Run a high queue depth direct sequential write fio job to check that write requests are not being reordered when the deadline scheduler is used. This test allowed to catch a bug fixed with commit 80e02039721 "block: mq-deadline: Fix write completion handling". Signed-off-by: Masato Suzuki --- tests/zbd/005 | 67 +++++++++++++++++++++++++++++++++++++++++++++++ tests/zbd/005.out | 2 ++ 2 files changed, 69 insertions(+) create mode 100755 tests/zbd/005 create mode 100644 tests/zbd/005.out diff --git a/tests/zbd/005 b/tests/zbd/005 new file mode 100755 index 0000000..bc9cad5 --- /dev/null +++ b/tests/zbd/005 @@ -0,0 +1,67 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0+ +# Copyright (C) 2018 Western Digital Corporation or its affiliates. +# +# Run a high queue depth direct sequential write fio job to check that +# write requests are not being reordered when the deadline scheduler is +# used. This test allowed to catch a bug fixed with commit 80e02039721 +# "block: mq-deadline: Fix write completion handling". + +. tests/zbd/rc + +DESCRIPTION="write command ordering" +TIMED=1 +CAN_BE_ZONED=1 + +requires() { + _have_fio_zbd_zonemode +} + +fallback_device() { + _fallback_null_blk_zoned +} + +cleanup_fallback_device() { + _exit_null_blk +} + +_find_first_sequential_zone() { + for ((idx = NR_CONV_ZONES; idx < REPORTED_COUNT; idx++)); do + if [[ ${ZONE_TYPES[idx]} -eq ${ZONE_TYPE_SEQ_WRITE_REQUIRED} ]]; + then + echo "${idx}" + return 0 + fi + done + echo "Sequential write required zone not found" + + return 1 +} + +test_device() { + local -i zone_idx + local -i offset + + echo "Running ${TEST_NAME}" + + _get_sysfs_variable "${TEST_DEV}" || return $? + _get_blkzone_report "${TEST_DEV}" || return $? + + zone_idx=$(_find_first_sequential_zone) || return $? + offset=$((ZONE_STARTS[zone_idx] * 512)) + + blkzone reset -o "${ZONE_STARTS[zone_idx]}" "${TEST_DEV}" + + _test_dev_queue_set scheduler deadline + + : "${TIMEOUT:=30}" + FIO_PERF_FIELDS=("write io" "write iops") + _fio_perf --filename="${TEST_DEV}" --name zbdwo --rw=write --direct=1 \ + --ioengine=libaio --iodepth=128 --bs=256k \ + --offset="${offset}" + + _put_blkzone_report + _put_sysfs_variable + + echo "Test complete" +} diff --git a/tests/zbd/005.out b/tests/zbd/005.out new file mode 100644 index 0000000..3ff78c6 --- /dev/null +++ b/tests/zbd/005.out @@ -0,0 +1,2 @@ +Running zbd/005 +Test complete