From patchwork Tue Mar 18 07:26:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhang Yi X-Patchwork-Id: 14020399 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D6C561EF380 for ; Tue, 18 Mar 2025 07:34:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742283289; cv=none; b=JeGQiDeAlTJewqJLqCqjlwJibIPYwFHfklTPhKKorsWcjDSM/p0lrV1gykSpsBQb+aU6IFezkZNME47esYCL0p6Zb1sMB7638swcERqUO9sT/TX00/jdpyaAMT6x8dZ+eM+AWmW1nEo0LkVk3nRPUN6/bch3nK4jnz5ZHNUirGk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742283289; c=relaxed/simple; bh=oYwn6ih0UfRiOU+4Xat14ng1/rQxcPjekv6N1k937W8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RTHdjv0L8uEDOgCSviLkAQdAZESbLe+GeYT54TaSSJIskG87ysLdk/NxzvQlEERfTSYOmYGMQ+tEbaf3b6YiW9V08ARI5ONqys46gaAh8HL2Ffe7H82N8dshptdrgCo7Py1ya9oNu7we7kZRogy+ZzaMaquJ6jfp3tjOF8P0Y6Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.93.142]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4ZH3WQ56SRz4f3jtK for ; Tue, 18 Mar 2025 15:34:26 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.128]) by mail.maildlp.com (Postfix) with ESMTP id F2F9D1A0E62 for ; Tue, 18 Mar 2025 15:34:43 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.112.188]) by APP4 (Coremail) with SMTP id gCh0CgCnCl8EItlnJDdYGw--.56140S5; Tue, 18 Mar 2025 15:34:43 +0800 (CST) From: Zhang Yi To: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, dm-devel@lists.linux.dev, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org Cc: linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, hch@lst.de, tytso@mit.edu, djwong@kernel.org, john.g.garry@oracle.com, bmarzins@redhat.com, chaitanyak@nvidia.com, shinichiro.kawasaki@wdc.com, yi.zhang@huawei.com, yi.zhang@huaweicloud.com, chengzhihao1@huawei.com, yukuai3@huawei.com, yangerkun@huawei.com Subject: [PATCH xfstests 1/5] generic/764: add page boundaries tests for fallocate write zeroes Date: Tue, 18 Mar 2025 15:26:11 +0800 Message-ID: <20250318072615.3505873-2-yi.zhang@huaweicloud.com> X-Mailer: git-send-email 2.46.1 In-Reply-To: <20250318072615.3505873-1-yi.zhang@huaweicloud.com> References: <20250318072615.3505873-1-yi.zhang@huaweicloud.com> Precedence: bulk X-Mailing-List: dm-devel@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CM-TRANSID: gCh0CgCnCl8EItlnJDdYGw--.56140S5 X-Coremail-Antispam: 1UD129KBjvAXoWftr4xXF1xJw1fAF13CrWrGrg_yoW8urW5Xo Wayw1DGws5CryUCr1UAw12vr45W343W3W3ArW8Zr13tr9rWF47A3W0y3WUJr4kJryI9wn8 Jr10yrn8C3Z0grn3n29KB7ZKAUJUUUU8529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UjIYCTnIWjp_UUUOc7AC8VAFwI0_Wr0E3s1l1xkIjI8I6I8E6xAIw20EY4v20xva j40_Wr0E3s1l1IIY67AEw4v_Jr0_Jr4l82xGYIkIc2x26280x7IE14v26r18M28IrcIa0x kI8VCY1x0267AKxVW8JVW5JwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK021l84AC jcxK6xIIjxv20xvE14v26F1j6w1UM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4UJVWxJr 1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_GcCE3s1l e2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E2Ix0cI 8IcVAFwI0_Jrv_JF1lYx0Ex4A2jsIE14v26r1j6r4UMcvjeVCFs4IE7xkEbVWUJVW8JwAC jcxG0xvY0x0EwIxGrwACjI8F5VA0II8E6IAqYI8I648v4I1lFIxGxcIEc7CjxVA2Y2ka0x kIwI1lc7CjxVAaw2AFwI0_GFv_Wryl42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_ Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1V AY17CE14v26r4a6rW5MIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAI cVC0I7IYx2IY6xkF7I0E14v26F4j6r4UJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF4lIx AIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVW8JVW8JrUvcSsGvfC2 KfnxnUUI43ZEXa7sR_YFAtUUUUU== X-CM-SenderInfo: d1lo6xhdqjqx5xdzvxpfor3voofrz/ From: Zhang Yi Add page boundaries and boundaries that are off-by-one tests for the fallocate FALLOC_FL_WRITE_ZEROES command. Signed-off-by: Zhang Yi --- common/rc | 2 +- tests/generic/764 | 34 ++++ tests/generic/764.out | 433 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 468 insertions(+), 1 deletion(-) create mode 100755 tests/generic/764 create mode 100644 tests/generic/764.out diff --git a/common/rc b/common/rc index 6592c835..ed70c3c4 100644 --- a/common/rc +++ b/common/rc @@ -2780,7 +2780,7 @@ _require_xfs_io_command() testio=`$XFS_IO_PROG -F -f -c "$command $param 0 1m" $testfile 2>&1` param_checked="$param" ;; - "fpunch" | "fcollapse" | "zero" | "fzero" | "finsert" | "funshare") + "fpunch" | "fcollapse" | "zero" | "fzero" | "fwzero" | "finsert" | "funshare") local blocksize=$(_get_file_block_size $TEST_DIR) testio=`$XFS_IO_PROG -F -f -c "pwrite 0 $((5 * $blocksize))" \ -c "fsync" -c "$command $blocksize $((2 * $blocksize))" \ diff --git a/tests/generic/764 b/tests/generic/764 new file mode 100755 index 00000000..0750666b --- /dev/null +++ b/tests/generic/764 @@ -0,0 +1,34 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2025 Huawei. All Rights Reserved. +# +# FS QA Test No. 764 +# +# Makes calls to fallocate write zeroes range and checks tossed ranges +# +# Primarily tests page boundries and boundries that are off-by-one to +# ensure we're only tossing what's expected +# +# (generic/008 is a similar test but for fzero.) +# +. ./common/preamble +_begin_fstest auto quick prealloc zero + +# Import common functions. +. ./common/filter +. ./common/punch + +# Modify as appropriate. +_require_xfs_io_command "fwzero" +_require_test + +testfile=$TEST_DIR/764.$$ + +_test_block_boundaries 1024 fwzero _filter_xfs_io_unique $testfile +_test_block_boundaries 2048 fwzero _filter_xfs_io_unique $testfile +_test_block_boundaries 4096 fwzero _filter_xfs_io_unique $testfile +_test_block_boundaries 65536 fwzero _filter_xfs_io_unique $testfile + +# success, all done +status=0 +exit diff --git a/tests/generic/764.out b/tests/generic/764.out new file mode 100644 index 00000000..18bda195 --- /dev/null +++ b/tests/generic/764.out @@ -0,0 +1,433 @@ +QA output created by 764 +zero 0, 1 +wrote 1024/1024 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 1024/1024 bytes at offset 1024 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 .AAAAAAAAAAAAAAA +00000010: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00000400: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 1023 +wrote 1024/1024 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 1024/1024 bytes at offset 1024 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +000003f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 ...............A +00000400: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 1024 +wrote 1024/1024 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 1024/1024 bytes at offset 1024 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00000400: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 1025 +wrote 1024/1024 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 1024/1024 bytes at offset 1024 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00000400: 00 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 .BBBBBBBBBBBBBBB +00000410: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 1023, 1024 +wrote 1024/1024 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 1024/1024 bytes at offset 1024 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +000003f0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00 AAAAAAAAAAAAAAA. +00000400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +000007f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 ...............B +read 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 1023, 1025 +wrote 1024/1024 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 1024/1024 bytes at offset 1024 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +000003f0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00 AAAAAAAAAAAAAAA. +00000400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +read 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 1023, 1026 +wrote 1024/1024 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 1024/1024 bytes at offset 1024 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +000003f0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00 AAAAAAAAAAAAAAA. +00000400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +read 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 1024, 1024 +wrote 1024/1024 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 1024/1024 bytes at offset 1024 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00000400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +read 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 512 , 1024 +wrote 1024/1024 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 1024/1024 bytes at offset 1024 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00000200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00000600: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 1 +wrote 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 2048/2048 bytes at offset 2048 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 .AAAAAAAAAAAAAAA +00000010: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00000800: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 2047 +wrote 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 2048/2048 bytes at offset 2048 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +000007f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 ...............A +00000800: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 2048 +wrote 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 2048/2048 bytes at offset 2048 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00000800: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 2049 +wrote 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 2048/2048 bytes at offset 2048 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00000800: 00 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 .BBBBBBBBBBBBBBB +00000810: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 2047, 2048 +wrote 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 2048/2048 bytes at offset 2048 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +000007f0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00 AAAAAAAAAAAAAAA. +00000800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00000ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 ...............B +read 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 2047, 2049 +wrote 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 2048/2048 bytes at offset 2048 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +000007f0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00 AAAAAAAAAAAAAAA. +00000800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +read 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 2047, 2050 +wrote 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 2048/2048 bytes at offset 2048 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +000007f0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00 AAAAAAAAAAAAAAA. +00000800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +read 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 2048, 2048 +wrote 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 2048/2048 bytes at offset 2048 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00000800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +read 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 1024 , 2048 +wrote 2048/2048 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 2048/2048 bytes at offset 2048 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00000400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00000c00: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 1 +wrote 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 4096/4096 bytes at offset 4096 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 .AAAAAAAAAAAAAAA +00000010: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00001000: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 8192/8192 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 4095 +wrote 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 4096/4096 bytes at offset 4096 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00000ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 ...............A +00001000: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 8192/8192 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 4096 +wrote 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 4096/4096 bytes at offset 4096 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00001000: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 8192/8192 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 4097 +wrote 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 4096/4096 bytes at offset 4096 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00001000: 00 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 .BBBBBBBBBBBBBBB +00001010: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 8192/8192 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 4095, 4096 +wrote 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 4096/4096 bytes at offset 4096 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00000ff0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00 AAAAAAAAAAAAAAA. +00001000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00001ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 ...............B +read 8192/8192 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 4095, 4097 +wrote 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 4096/4096 bytes at offset 4096 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00000ff0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00 AAAAAAAAAAAAAAA. +00001000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +read 8192/8192 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 4095, 4098 +wrote 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 4096/4096 bytes at offset 4096 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00000ff0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00 AAAAAAAAAAAAAAA. +00001000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +read 8192/8192 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 4096, 4096 +wrote 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 4096/4096 bytes at offset 4096 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00001000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +read 8192/8192 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 2048 , 4096 +wrote 4096/4096 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 4096/4096 bytes at offset 4096 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00000800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00001800: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 8192/8192 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 1 +wrote 65536/65536 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 65536/65536 bytes at offset 65536 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 .AAAAAAAAAAAAAAA +00000010: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00010000: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 131072/131072 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 65535 +wrote 65536/65536 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 65536/65536 bytes at offset 65536 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +0000fff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 ...............A +00010000: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 131072/131072 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 65536 +wrote 65536/65536 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 65536/65536 bytes at offset 65536 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00010000: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 131072/131072 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 0, 65537 +wrote 65536/65536 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 65536/65536 bytes at offset 65536 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00010000: 00 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 .BBBBBBBBBBBBBBB +00010010: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 131072/131072 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 65535, 65536 +wrote 65536/65536 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 65536/65536 bytes at offset 65536 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +0000fff0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00 AAAAAAAAAAAAAAA. +00010000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +0001fff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 ...............B +read 131072/131072 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 65535, 65537 +wrote 65536/65536 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 65536/65536 bytes at offset 65536 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +0000fff0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00 AAAAAAAAAAAAAAA. +00010000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +read 131072/131072 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 65535, 65538 +wrote 65536/65536 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 65536/65536 bytes at offset 65536 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +0000fff0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 00 AAAAAAAAAAAAAAA. +00010000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +read 131072/131072 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 65536, 65536 +wrote 65536/65536 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 65536/65536 bytes at offset 65536 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00010000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +read 131072/131072 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +zero 32768 , 65536 +wrote 65536/65536 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 65536/65536 bytes at offset 65536 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +00000000: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA +* +00008000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +* +00018000: 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 BBBBBBBBBBBBBBBB +* +read 131072/131072 bytes at offset 0 +XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) From patchwork Tue Mar 18 07:26:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhang Yi X-Patchwork-Id: 14020403 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0C5E31F0983 for ; Tue, 18 Mar 2025 07:34:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742283291; cv=none; b=b32cZPA21Sbz55cmtPGG0myO4TeYQlAN0gn6AKOuCj3UrBIx3keAaK+H7pgt4yo+7OZzdjuxk2VFPcemRZaJqOU3t2Qv+tapdFxmognWCEr7rTi4SfF3RDzW2bpAla/XVIoewsGtqpv3KdZtccOWAPpLIwXEgoNgsn/AogMhiKs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742283291; c=relaxed/simple; bh=L+ouOj41YhRbekkzz9nlgWr+5i3mO6Mv6VS53KQ8hZ0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lKEhmFaPdL45HWThTRBKZhkBzigHFHMVT2mIHpW5wLUCBMz91ELwqZuUOpafud1iaFPMoa6u6ET+sTJL2TeXYEhJKctDYaNeUXyMI8cz8nLV6/LEMkl4vTEoQWuYWrCbneMbqQkcLWVKcHX5QJcY0YnUQ/v26sWMleobMLD1BdU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.93.142]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4ZH3WJ4X8Zz4f3lg9 for ; Tue, 18 Mar 2025 15:34:20 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.128]) by mail.maildlp.com (Postfix) with ESMTP id B449F1A1217 for ; Tue, 18 Mar 2025 15:34:44 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.112.188]) by APP4 (Coremail) with SMTP id gCh0CgCnCl8EItlnJDdYGw--.56140S6; Tue, 18 Mar 2025 15:34:44 +0800 (CST) From: Zhang Yi To: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, dm-devel@lists.linux.dev, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org Cc: linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, hch@lst.de, tytso@mit.edu, djwong@kernel.org, john.g.garry@oracle.com, bmarzins@redhat.com, chaitanyak@nvidia.com, shinichiro.kawasaki@wdc.com, yi.zhang@huawei.com, yi.zhang@huaweicloud.com, chengzhihao1@huawei.com, yukuai3@huawei.com, yangerkun@huawei.com Subject: [PATCH xfstests 2/5] generic/765: add generic tests for fallocate write zeroes Date: Tue, 18 Mar 2025 15:26:12 +0800 Message-ID: <20250318072615.3505873-3-yi.zhang@huaweicloud.com> X-Mailer: git-send-email 2.46.1 In-Reply-To: <20250318072615.3505873-1-yi.zhang@huaweicloud.com> References: <20250318072615.3505873-1-yi.zhang@huaweicloud.com> Precedence: bulk X-Mailing-List: dm-devel@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CM-TRANSID: gCh0CgCnCl8EItlnJDdYGw--.56140S6 X-Coremail-Antispam: 1UD129KBjvJXoW3Xr1UAF18JrWkKFW8tryfXrb_yoWfAFy5pr Wqvw1DCr48Gw4kZa1YkF4rGr97XFsFy3WDur1xuF1Ykry7Kry0kF48Ww4xA342yF1xCF43 XrZ5A3ZFgr1qk3DanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUmY14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_Jryl82xGYIkIc2 x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0 Y4vE2Ix0cI8IcVAFwI0_Ar0_tr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJw A2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq3wAS 0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2 IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0 Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwACI402YVCY1x02628vn2kIc2 xKxwCY1x0262kKe7AKxVW8ZVWrXwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWU JVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67 kF1VAFwI0_GFv_WrylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY 6xIIjxv20xvEc7CjxVAFwI0_Cr0_Gr1UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42 IY6I8E87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIev Ja73UjIFyTuYvjTR_3kZDUUUU X-CM-SenderInfo: d1lo6xhdqjqx5xdzvxpfor3voofrz/ From: Zhang Yi Add generic tests for the fallocate FALLOC_FL_WRITE_ZEROES command. Signed-off-by: Zhang Yi --- tests/generic/765 | 40 +++++++ tests/generic/765.out | 269 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 309 insertions(+) create mode 100755 tests/generic/765 create mode 100644 tests/generic/765.out diff --git a/tests/generic/765 b/tests/generic/765 new file mode 100755 index 00000000..4cbef82a --- /dev/null +++ b/tests/generic/765 @@ -0,0 +1,40 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2025 Huawei. All Rights Reserved. +# +# FS QA Test No. 765 +# +# Test fallocate FALLOC_FL_WRITE_ZEROES +# +# (generic/008 is a similar test but for fzero.) +# +. ./common/preamble +_begin_fstest auto quick prealloc zero fiemap + +# Import common functions. +. ./common/filter +. ./common/punch + +# Modify as appropriate. +_require_xfs_io_command "fwzero" +_require_xfs_io_command "fiemap" +_require_xfs_io_command "falloc" +_require_test + +testfile=$TEST_DIR/765.$$ + +# Standard write zeroes tests +_test_generic_punch falloc fwzero fwzero fiemap _filter_fiemap $testfile + +# Delayed allocation write zeroes tests +_test_generic_punch -d falloc fwzero fwzero fiemap _filter_fiemap $testfile + +# Multi write zeroes tests +_test_generic_punch -k falloc fwzero fwzero fiemap _filter_fiemap $testfile + +# Delayed allocation multi write zeroes tests +_test_generic_punch -d -k falloc fwzero fwzero fiemap _filter_fiemap $testfile + +# success, all done +status=0 +exit diff --git a/tests/generic/765.out b/tests/generic/765.out new file mode 100644 index 00000000..7dd949c4 --- /dev/null +++ b/tests/generic/765.out @@ -0,0 +1,269 @@ +QA output created by 765 + 1. into a hole +0: [0..127]: hole +1: [128..383]: data +2: [384..639]: hole +1aca77e2188f52a62674fe8a873bdaba + 2. into allocated space +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 3. into unwritten space +0: [0..127]: unwritten +1: [128..383]: data +2: [384..639]: unwritten +1aca77e2188f52a62674fe8a873bdaba + 4. hole -> data +0: [0..127]: hole +1: [128..511]: data +2: [512..639]: hole +286aad7ca07b2256f0f2bb8e608ff63d + 5. hole -> unwritten +0: [0..127]: hole +1: [128..383]: data +2: [384..511]: unwritten +3: [512..639]: hole +1aca77e2188f52a62674fe8a873bdaba + 6. data -> hole +0: [0..383]: data +1: [384..639]: hole +3976e5cc0b8a47c4cdc9e0211635f568 + 7. data -> unwritten +0: [0..383]: data +1: [384..511]: unwritten +2: [512..639]: hole +3976e5cc0b8a47c4cdc9e0211635f568 + 8. unwritten -> hole +0: [0..127]: unwritten +1: [128..383]: data +2: [384..639]: hole +1aca77e2188f52a62674fe8a873bdaba + 9. unwritten -> data +0: [0..127]: unwritten +1: [128..511]: data +2: [512..639]: hole +286aad7ca07b2256f0f2bb8e608ff63d + 10. hole -> data -> hole +0: [0..127]: hole +1: [128..511]: data +2: [512..639]: hole +1aca77e2188f52a62674fe8a873bdaba + 11. data -> hole -> data +0: [0..639]: data +0bcfc7652751f8fe46381240ccadd9d7 + 12. unwritten -> data -> unwritten +0: [0..127]: unwritten +1: [128..511]: data +2: [512..639]: unwritten +1aca77e2188f52a62674fe8a873bdaba + 13. data -> unwritten -> data +0: [0..639]: data +0bcfc7652751f8fe46381240ccadd9d7 + 14. data -> hole @ EOF +0: [0..639]: data +eb591f549edabba2b21f80ce4deed8a9 + 15. data -> hole @ 0 +0: [0..639]: data +b0c249edb75ce5b52136864d879cde83 + 16. data -> cache cold ->hole +0: [0..639]: data +b0c249edb75ce5b52136864d879cde83 + 17. data -> hole in single block file +0: [0..7]: data +0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd +* +0000200 0000 0000 0000 0000 0000 0000 0000 0000 +* +0000400 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd +* + 1. into a hole +0: [0..127]: hole +1: [128..383]: data +2: [384..639]: hole +1aca77e2188f52a62674fe8a873bdaba + 2. into allocated space +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 3. into unwritten space +0: [0..127]: unwritten +1: [128..383]: data +2: [384..639]: unwritten +1aca77e2188f52a62674fe8a873bdaba + 4. hole -> data +0: [0..127]: hole +1: [128..511]: data +2: [512..639]: hole +286aad7ca07b2256f0f2bb8e608ff63d + 5. hole -> unwritten +0: [0..127]: hole +1: [128..383]: data +2: [384..511]: unwritten +3: [512..639]: hole +1aca77e2188f52a62674fe8a873bdaba + 6. data -> hole +0: [0..383]: data +1: [384..639]: hole +3976e5cc0b8a47c4cdc9e0211635f568 + 7. data -> unwritten +0: [0..383]: data +1: [384..511]: unwritten +2: [512..639]: hole +3976e5cc0b8a47c4cdc9e0211635f568 + 8. unwritten -> hole +0: [0..127]: unwritten +1: [128..383]: data +2: [384..639]: hole +1aca77e2188f52a62674fe8a873bdaba + 9. unwritten -> data +0: [0..127]: unwritten +1: [128..511]: data +2: [512..639]: hole +286aad7ca07b2256f0f2bb8e608ff63d + 10. hole -> data -> hole +0: [0..127]: hole +1: [128..511]: data +2: [512..639]: hole +1aca77e2188f52a62674fe8a873bdaba + 11. data -> hole -> data +0: [0..639]: data +0bcfc7652751f8fe46381240ccadd9d7 + 12. unwritten -> data -> unwritten +0: [0..127]: unwritten +1: [128..511]: data +2: [512..639]: unwritten +1aca77e2188f52a62674fe8a873bdaba + 13. data -> unwritten -> data +0: [0..639]: data +0bcfc7652751f8fe46381240ccadd9d7 + 14. data -> hole @ EOF +0: [0..639]: data +eb591f549edabba2b21f80ce4deed8a9 + 15. data -> hole @ 0 +0: [0..639]: data +b0c249edb75ce5b52136864d879cde83 + 16. data -> cache cold ->hole +0: [0..639]: data +b0c249edb75ce5b52136864d879cde83 + 17. data -> hole in single block file +0: [0..7]: data +0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd +* +0000200 0000 0000 0000 0000 0000 0000 0000 0000 +* +0000400 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd +* + 1. into a hole +0: [0..127]: hole +1: [128..383]: data +2: [384..639]: hole +1aca77e2188f52a62674fe8a873bdaba + 2. into allocated space +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 3. into unwritten space +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 4. hole -> data +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 5. hole -> unwritten +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 6. data -> hole +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 7. data -> unwritten +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 8. unwritten -> hole +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 9. unwritten -> data +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 10. hole -> data -> hole +0: [0..639]: data +0bcfc7652751f8fe46381240ccadd9d7 + 11. data -> hole -> data +0: [0..639]: data +0bcfc7652751f8fe46381240ccadd9d7 + 12. unwritten -> data -> unwritten +0: [0..639]: data +0bcfc7652751f8fe46381240ccadd9d7 + 13. data -> unwritten -> data +0: [0..639]: data +0bcfc7652751f8fe46381240ccadd9d7 + 14. data -> hole @ EOF +0: [0..639]: data +eb591f549edabba2b21f80ce4deed8a9 + 15. data -> hole @ 0 +0: [0..639]: data +b0c249edb75ce5b52136864d879cde83 + 16. data -> cache cold ->hole +0: [0..639]: data +b0c249edb75ce5b52136864d879cde83 + 17. data -> hole in single block file +0: [0..7]: data +0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd +* +0000200 0000 0000 0000 0000 0000 0000 0000 0000 +* +0000400 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd +* + 1. into a hole +0: [0..127]: hole +1: [128..383]: data +2: [384..639]: hole +1aca77e2188f52a62674fe8a873bdaba + 2. into allocated space +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 3. into unwritten space +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 4. hole -> data +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 5. hole -> unwritten +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 6. data -> hole +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 7. data -> unwritten +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 8. unwritten -> hole +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 9. unwritten -> data +0: [0..639]: data +2f7a72b9ca9923b610514a11a45a80c9 + 10. hole -> data -> hole +0: [0..639]: data +0bcfc7652751f8fe46381240ccadd9d7 + 11. data -> hole -> data +0: [0..639]: data +0bcfc7652751f8fe46381240ccadd9d7 + 12. unwritten -> data -> unwritten +0: [0..639]: data +0bcfc7652751f8fe46381240ccadd9d7 + 13. data -> unwritten -> data +0: [0..639]: data +0bcfc7652751f8fe46381240ccadd9d7 + 14. data -> hole @ EOF +0: [0..639]: data +eb591f549edabba2b21f80ce4deed8a9 + 15. data -> hole @ 0 +0: [0..639]: data +b0c249edb75ce5b52136864d879cde83 + 16. data -> cache cold ->hole +0: [0..639]: data +b0c249edb75ce5b52136864d879cde83 + 17. data -> hole in single block file +0: [0..7]: data +0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd +* +0000200 0000 0000 0000 0000 0000 0000 0000 0000 +* +0000400 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd +* From patchwork Tue Mar 18 07:26:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhang Yi X-Patchwork-Id: 14020400 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C8AE61DF727 for ; Tue, 18 Mar 2025 07:34:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742283290; cv=none; b=GbFUSRhOkGKEtzS7zvSXKvq2YpnvQZUp25MuPY7MYLUjHoqKKNb67Mcf6rLvqICI/f90glAVmo87/d1ddI9bHYFSg16ePxGVxQeTI/jif8qJ/FW7gj3TY2Z1fi4l5HmIInJNwFIkFgpJXRYlRz1VWIXxV5m80KZdtdvbt68WOIU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742283290; c=relaxed/simple; bh=qEOODi0lrdl9IC2ERF9WciKLvHoxvGO4O2+nHw3o4D8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EcDskXSmcDq+C+JTa8Z1Rm3TAaWlS6tUd1ivVwQ34nMSjwXV/PVlhrh1cMT5kV0BsnVpRTx0xfqryrvXPPvhZZJZjktxAyG4N4VVQy9OsxB+S8pSVsDm4aAQEbL6sc+4CXD0iVz35Y2E7eGMln1muiE9YVt4sWUQCR/B7xRRE38= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.235]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4ZH3WL66N0z4f3khg for ; Tue, 18 Mar 2025 15:34:22 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.128]) by mail.maildlp.com (Postfix) with ESMTP id 767A11A06D7 for ; Tue, 18 Mar 2025 15:34:45 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.112.188]) by APP4 (Coremail) with SMTP id gCh0CgCnCl8EItlnJDdYGw--.56140S7; Tue, 18 Mar 2025 15:34:45 +0800 (CST) From: Zhang Yi To: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, dm-devel@lists.linux.dev, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org Cc: linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, hch@lst.de, tytso@mit.edu, djwong@kernel.org, john.g.garry@oracle.com, bmarzins@redhat.com, chaitanyak@nvidia.com, shinichiro.kawasaki@wdc.com, yi.zhang@huawei.com, yi.zhang@huaweicloud.com, chengzhihao1@huawei.com, yukuai3@huawei.com, yangerkun@huawei.com Subject: [PATCH xfstests 3/5] generic/766: test fallocate write zeroes on block device Date: Tue, 18 Mar 2025 15:26:13 +0800 Message-ID: <20250318072615.3505873-4-yi.zhang@huaweicloud.com> X-Mailer: git-send-email 2.46.1 In-Reply-To: <20250318072615.3505873-1-yi.zhang@huaweicloud.com> References: <20250318072615.3505873-1-yi.zhang@huaweicloud.com> Precedence: bulk X-Mailing-List: dm-devel@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CM-TRANSID: gCh0CgCnCl8EItlnJDdYGw--.56140S7 X-Coremail-Antispam: 1UD129KBjvJXoWxGry7Jw4xAFW8WF4kCry8Xwb_yoW5Kw1rpa 10k3W5JryFgw17Grs3uryjvr1rGanY9F4ayF97Kry5ZryktFy8JFWqgr1jqr97X3srCwsY vaya9Fy3Kw4SqFJanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUmF14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JrWl82xGYIkIc2 x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0 Y4vE2Ix0cI8IcVAFwI0_Ar0_tr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJw A2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq3wAS 0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2 IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0 Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwACI402YVCY1x02628vn2kIc2 xKxwCY1x0262kKe7AKxVW8ZVWrXwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWU JVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67 kF1VAFwI0_GFv_WrylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY 6xIIjxv20xvEc7CjxVAFwI0_Cr0_Gr1UMIIF0xvE42xK8VAvwI8IcIk0rVWUJVWUCwCI42 IY6I8E87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r4UJVWxJrUvcSsGvfC2 KfnxnUUI43ZEXa7sRRwID5UUUUU== X-CM-SenderInfo: d1lo6xhdqjqx5xdzvxpfor3voofrz/ From: Zhang Yi Test the fallocate FALLOC_FL_WRITE_ZEROES command on a block device, including unsupported flags. Signed-off-by: Zhang Yi --- tests/generic/766 | 80 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/766.out | 23 +++++++++++++ 2 files changed, 103 insertions(+) create mode 100755 tests/generic/766 create mode 100644 tests/generic/766.out diff --git a/tests/generic/766 b/tests/generic/766 new file mode 100755 index 00000000..6f31c250 --- /dev/null +++ b/tests/generic/766 @@ -0,0 +1,80 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2025 Huawei. All Rights Reserved. +# +# FS QA Test No. 766 +# +# Test fallocate(WRITE_ZEROES) on a block device, which should be able to +# WRITE SAME (or equivalent) the range. +# +. ./common/preamble +_begin_fstest blockdev rw zero + +_register_cleanup "_cleanup" BUS + +# Import common functions. +. ./common/filter +. ./common/scsi_debug + +# Modify as appropriate. +_require_scsi_debug +_require_xfs_io_command "fwzero" + +## 1. Test supported flags +echo "Create with unmap writesame and format" +dev=$(_get_scsi_debug_dev 512 512 0 4 "lbpws=1 lbpws10=1") +_pwrite_byte 0x62 0 4m $dev >> $seqres.full +$XFS_IO_PROG -c "fsync" $dev + +echo "Write zeroes" +$XFS_IO_PROG -c "fwzero 512k 1m" $dev + +echo "Check contents" +md5sum $dev | sed -e "s|$dev|SCSI_DEBUG_DEV|g" + +echo "Destroy device" +_put_scsi_debug_dev + +echo "Create w/o unmap writesame and format" +dev=$(_get_scsi_debug_dev 512 512 0 4 "lbpws=0 lbpws10=0 lbpu=0 write_same_length=0 unmap_max_blocks=0") +_pwrite_byte 0x62 0 4m $dev >> $seqres.full +$XFS_IO_PROG -c "fsync" $dev + +echo "Write zeroes, write fallback" +$XFS_IO_PROG -c "fwzero 512k 1m" $dev + +echo "Check contents" +md5sum $dev | sed -e "s|$dev|SCSI_DEBUG_DEV|g" + +echo "Destroy device" +_put_scsi_debug_dev + +## 2. Test unsupported flags. +echo "Create and format" +dev=$(_get_scsi_debug_dev 4096 4096 0 4 "lbpws=1 lbpws10=1") +_pwrite_byte 0x62 0 4m $dev >> $seqres.full +$XFS_IO_PROG -c "fsync" $dev + +echo "Unaligned write zeroes" +$XFS_IO_PROG -c "fwzero 512 512" $dev + +echo "Write zeroes past MAX_LFS_FILESIZE" +# zod = MAX_LFS_FILESIZE +zod=$(_get_max_lfs_filesize) +$XFS_IO_PROG -c "fwzero 512k $zod" $dev + +echo "Write zeroes to MAX_LFS_FILESIZE" +$XFS_IO_PROG -c "fwzero 0 $zod" $dev + +echo "Write zeroes starts past EOD" +$XFS_IO_PROG -c "fwzero 900m 1m" $dev + +echo "Check contents" +md5sum $dev | sed -e "s|$dev|SCSI_DEBUG_DEV|g" + +echo "Destroy device" +_put_scsi_debug_dev + +# success, all done +status=0 +exit diff --git a/tests/generic/766.out b/tests/generic/766.out new file mode 100644 index 00000000..7da0ceca --- /dev/null +++ b/tests/generic/766.out @@ -0,0 +1,23 @@ +QA output created by 766 +Create with unmap writesame and format +Write zeroes +Check contents +caa26edd6c70ce862eb7ec6f10b138a8 SCSI_DEBUG_DEV +Destroy device +Create w/o unmap writesame and format +Write zeroes, write fallback +Check contents +caa26edd6c70ce862eb7ec6f10b138a8 SCSI_DEBUG_DEV +Destroy device +Create and format +Unaligned write zeroes +fallocate: Invalid argument +Write zeroes past MAX_LFS_FILESIZE +fallocate: File too large +Write zeroes to MAX_LFS_FILESIZE +fallocate: Invalid argument +Write zeroes starts past EOD +fallocate: Invalid argument +Check contents +b83f9394092e15bdcda585cd8e776dc6 SCSI_DEBUG_DEV +Destroy device From patchwork Tue Mar 18 07:26:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhang Yi X-Patchwork-Id: 14020401 Received: from dggsgout11.his.huawei.com (dggsgout11.his.huawei.com [45.249.212.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0C6601F0985 for ; Tue, 18 Mar 2025 07:34:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742283290; cv=none; b=b8nOD6eptntkJBco1Nk9ru04+K7cc8eA4qX6N5sQyjHwuExc0ARV9Umtrnd99je93yjYx1f7E+ZcdSPC9Wsgqu/D6MxKQpYXyTeDZRGPKNpptvOk9XLVGhuim/eQJYEd1m0arolxIGk3jfzR0JJxcmtkbpygtbVgxGylJDitwIo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742283290; c=relaxed/simple; bh=6g3bhbPGPsuTRVT8vq4jGUeLPW16Uvdsrbmr2YsZQSU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bbD+kSdAZ1WmghAuGT0I6KXmtjidzPAmZiLIn7MYDjPzMVWZpvwf2AxSkRqTODljDabPDrZcaMxVxMCw39bmu75CYKi3+oBnufwllOfmMglT6CAMZQRcmr24I7wWy0MNWgvYE2F0g73bwJ/GRlnTWy1Hyg3o2b/xVYRCilWSSpk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.163.235]) by dggsgout11.his.huawei.com (SkyGuard) with ESMTP id 4ZH3WS6n2qz4f3jkr for ; Tue, 18 Mar 2025 15:34:28 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.128]) by mail.maildlp.com (Postfix) with ESMTP id 37DC91A058E for ; Tue, 18 Mar 2025 15:34:46 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.112.188]) by APP4 (Coremail) with SMTP id gCh0CgCnCl8EItlnJDdYGw--.56140S8; Tue, 18 Mar 2025 15:34:46 +0800 (CST) From: Zhang Yi To: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, dm-devel@lists.linux.dev, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org Cc: linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, hch@lst.de, tytso@mit.edu, djwong@kernel.org, john.g.garry@oracle.com, bmarzins@redhat.com, chaitanyak@nvidia.com, shinichiro.kawasaki@wdc.com, yi.zhang@huawei.com, yi.zhang@huaweicloud.com, chengzhihao1@huawei.com, yukuai3@huawei.com, yangerkun@huawei.com Subject: [PATCH xfstests 4/5] fstress: add fallocate write zeroes support Date: Tue, 18 Mar 2025 15:26:14 +0800 Message-ID: <20250318072615.3505873-5-yi.zhang@huaweicloud.com> X-Mailer: git-send-email 2.46.1 In-Reply-To: <20250318072615.3505873-1-yi.zhang@huaweicloud.com> References: <20250318072615.3505873-1-yi.zhang@huaweicloud.com> Precedence: bulk X-Mailing-List: dm-devel@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CM-TRANSID: gCh0CgCnCl8EItlnJDdYGw--.56140S8 X-Coremail-Antispam: 1UD129KBjvJXoW7uFWDAr45Kw4UXFWDurWUXFb_yoW8uFy3pa yDtFW8Cay8Wa4ayr18urs5WFn0qrsYqr15C397Kr1IvayYyr9Igrn0g3s5Gw1DXFWDtay5 ZF90gFyq93WUA37anT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUmS14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_Ar0_tr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4U M4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwACI402YVCY1x02628vn2 kIc2xKxwCY1x0262kKe7AKxVW8ZVWrXwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkE bVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67 AF67kF1VAFwI0_GFv_WrylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUCVW8JwCI 42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF 4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVW8Jr0_Cr1UYxBI daVFxhVjvjDU0xZFpf9x0pRJ3kZUUUUU= X-CM-SenderInfo: d1lo6xhdqjqx5xdzvxpfor3voofrz/ From: Zhang Yi Add fstress to suppoet fallocate FALLOC_FL_WRITE_ZEROES command by introducing OP_WZERO operation. Signed-off-by: Zhang Yi --- ltp/fsstress.c | 12 ++++++++++++ src/global.h | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/ltp/fsstress.c b/ltp/fsstress.c index 3d248ee2..ed2a54ab 100644 --- a/ltp/fsstress.c +++ b/ltp/fsstress.c @@ -114,6 +114,7 @@ typedef enum { OP_MWRITE, OP_PUNCH, OP_ZERO, + OP_WZERO, OP_COLLAPSE, OP_INSERT, OP_READ, @@ -245,6 +246,7 @@ void mread_f(opnum_t, long); void mwrite_f(opnum_t, long); void punch_f(opnum_t, long); void zero_f(opnum_t, long); +void wzero_f(opnum_t, long); void collapse_f(opnum_t, long); void insert_f(opnum_t, long); void unshare_f(opnum_t, long); @@ -312,6 +314,7 @@ struct opdesc ops[OP_LAST] = { [OP_MWRITE] = {"mwrite", mwrite_f, 2, 1 }, [OP_PUNCH] = {"punch", punch_f, 1, 1 }, [OP_ZERO] = {"zero", zero_f, 1, 1 }, + [OP_WZERO] = {"wzero", wzero_f, 1, 1 }, [OP_COLLAPSE] = {"collapse", collapse_f, 1, 1 }, [OP_INSERT] = {"insert", insert_f, 1, 1 }, [OP_READ] = {"read", read_f, 1, 0 }, @@ -3758,6 +3761,7 @@ struct print_flags falloc_flags [] = { { FALLOC_FL_NO_HIDE_STALE, "NO_HIDE_STALE"}, { FALLOC_FL_COLLAPSE_RANGE, "COLLAPSE_RANGE"}, { FALLOC_FL_ZERO_RANGE, "ZERO_RANGE"}, + { FALLOC_FL_WRITE_ZEROES, "WRITE_ZEROES"}, { FALLOC_FL_INSERT_RANGE, "INSERT_RANGE"}, { FALLOC_FL_UNSHARE_RANGE, "UNSHARE_RANGE"}, { -1, NULL} @@ -4446,6 +4450,14 @@ zero_f(opnum_t opno, long r) #endif } +void +wzero_f(opnum_t opno, long r) +{ +#ifdef HAVE_LINUX_FALLOC_H + do_fallocate(opno, r, FALLOC_FL_WRITE_ZEROES); +#endif +} + void collapse_f(opnum_t opno, long r) { diff --git a/src/global.h b/src/global.h index fbc0a0b5..6b1e30c9 100644 --- a/src/global.h +++ b/src/global.h @@ -175,6 +175,10 @@ #define FALLOC_FL_ZERO_RANGE 0x10 #endif +#ifndef FALLOC_FL_WRITE_ZEROES +#define FALLOC_FL_WRITE_ZEROES 0x80 +#endif + #ifndef FALLOC_FL_INSERT_RANGE #define FALLOC_FL_INSERT_RANGE 0x20 #endif From patchwork Tue Mar 18 07:26:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhang Yi X-Patchwork-Id: 14020402 Received: from dggsgout12.his.huawei.com (dggsgout12.his.huawei.com [45.249.212.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D19741F4CBF for ; Tue, 18 Mar 2025 07:34:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742283291; cv=none; b=piAyFgbaCeIXdInCLh9/AbD11Gtx5v+DPA8hu2GsHwV/tFvQ+kWeEg1f72bGWpLKi34aPxWSq3egZTRfEXCDx3tzNaLXHMn56gkGkVYnHjGP1CMp+a4pJWSOI+YP0X0phADGqf/Aw6kZQHqLc1qj13RKOHnoJpw2+2CDUMOUVDo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742283291; c=relaxed/simple; bh=+Wd77a3MgC9BFnYRzCDNhtBxKRK4gLPP9T34lanhpGo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bPdaKl5WY76gGmLye+xAcRWH0q20yv24SJsYqpELPu9G0fknP7YOdgRM6h+Y7fqwFR/Hai6lWnkQaEUBkyQalkzYx5Akva/vPingc+QFNoxEj22+hFaZNwGBl9zUSCM+BuzEv7AyRlX9rkXJcX5VISGUic2Ii/+ecSDlY2565Dg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com; spf=pass smtp.mailfrom=huaweicloud.com; arc=none smtp.client-ip=45.249.212.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=huaweicloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huaweicloud.com Received: from mail.maildlp.com (unknown [172.19.93.142]) by dggsgout12.his.huawei.com (SkyGuard) with ESMTP id 4ZH3WN2Nwyz4f3khb for ; Tue, 18 Mar 2025 15:34:24 +0800 (CST) Received: from mail02.huawei.com (unknown [10.116.40.128]) by mail.maildlp.com (Postfix) with ESMTP id EC3E81A13B1 for ; Tue, 18 Mar 2025 15:34:46 +0800 (CST) Received: from huaweicloud.com (unknown [10.175.112.188]) by APP4 (Coremail) with SMTP id gCh0CgCnCl8EItlnJDdYGw--.56140S9; Tue, 18 Mar 2025 15:34:46 +0800 (CST) From: Zhang Yi To: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-block@vger.kernel.org, dm-devel@lists.linux.dev, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org Cc: linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org, hch@lst.de, tytso@mit.edu, djwong@kernel.org, john.g.garry@oracle.com, bmarzins@redhat.com, chaitanyak@nvidia.com, shinichiro.kawasaki@wdc.com, yi.zhang@huawei.com, yi.zhang@huaweicloud.com, chengzhihao1@huawei.com, yukuai3@huawei.com, yangerkun@huawei.com Subject: [PATCH xfstests 5/5] fsx: add fallocate write zeroes support Date: Tue, 18 Mar 2025 15:26:15 +0800 Message-ID: <20250318072615.3505873-6-yi.zhang@huaweicloud.com> X-Mailer: git-send-email 2.46.1 In-Reply-To: <20250318072615.3505873-1-yi.zhang@huaweicloud.com> References: <20250318072615.3505873-1-yi.zhang@huaweicloud.com> Precedence: bulk X-Mailing-List: dm-devel@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-CM-TRANSID: gCh0CgCnCl8EItlnJDdYGw--.56140S9 X-Coremail-Antispam: 1UD129KBjvJXoWxGF48Zr4DCrWfWF4kAF4fXwb_yoWrKw4DpF WkK3yrKFy0qF9xAr4fC3WkWFs0gwn5uryfCrW2yr1rZ3y3ta4fKan0gry0gr1UWr47Ja13 J3WYv39F9F4UAaUanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUmS14x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JF0E3s1l82xGYI kIc2x26xkF7I0E14v26ryj6s0DM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2 z4x0Y4vE2Ix0cI8IcVAFwI0_Ar0_tr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F 4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq 3wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7 IYx2IY67AKxVWUXVWUAwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4U M4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwACI402YVCY1x02628vn2 kIc2xKxwCY1x0262kKe7AKxVW8ZVWrXwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkE bVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67 AF67kF1VAFwI0_GFv_WrylIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUCVW8JwCI 42IY6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJwCI42IY6xAIw20EY4v20xvaj40_Jr0_JF 4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVW8Jr0_Cr1UYxBI daVFxhVjvjDU0xZFpf9x0pRJ3kZUUUUU= X-CM-SenderInfo: d1lo6xhdqjqx5xdzvxpfor3voofrz/ From: Zhang Yi Add fsx to suppoet fallocate FALLOC_FL_WRITE_ZEROES command by introducing OP_WRITE_ZEROES operation. Signed-off-by: Zhang Yi --- ltp/fsx.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/ltp/fsx.c b/ltp/fsx.c index 41933354..0c5dc93f 100644 --- a/ltp/fsx.c +++ b/ltp/fsx.c @@ -111,6 +111,7 @@ enum { OP_FALLOCATE, OP_PUNCH_HOLE, OP_ZERO_RANGE, + OP_WRITE_ZEROES, OP_COLLAPSE_RANGE, OP_INSERT_RANGE, OP_CLONE_RANGE, @@ -175,6 +176,7 @@ int keep_size_calls = 1; /* -K flag disables */ int unshare_range_calls = 1; /* -u flag disables */ int punch_hole_calls = 1; /* -H flag disables */ int zero_range_calls = 1; /* -z flag disables */ +int write_zeroes_calls = 1; /* -M flag disables */ int collapse_range_calls = 1; /* -C flag disables */ int insert_range_calls = 1; /* -I flag disables */ int mapped_reads = 1; /* -R flag disables it */ @@ -273,6 +275,7 @@ static const char *op_names[] = { [OP_FALLOCATE] = "fallocate", [OP_PUNCH_HOLE] = "punch_hole", [OP_ZERO_RANGE] = "zero_range", + [OP_WRITE_ZEROES] = "write_zeroes", [OP_COLLAPSE_RANGE] = "collapse_range", [OP_INSERT_RANGE] = "insert_range", [OP_CLONE_RANGE] = "clone_range", @@ -450,6 +453,13 @@ logdump(void) if (overlap) prt("\t******ZZZZ"); break; + case OP_WRITE_ZEROES: + prt("WZERO 0x%x thru 0x%x\t(0x%x bytes)", + lp->args[0], lp->args[0] + lp->args[1] - 1, + lp->args[1]); + if (overlap) + prt("\t******ZZZZ"); + break; case OP_COLLAPSE_RANGE: prt("COLLAPSE 0x%x thru 0x%x\t(0x%x bytes)", lp->args[0], lp->args[0] + lp->args[1] - 1, @@ -1352,6 +1362,58 @@ do_zero_range(unsigned offset, unsigned length, int keep_size) } #endif +#ifdef FALLOC_FL_WRITE_ZEROES +void +do_write_zeroes(unsigned offset, unsigned length) +{ + unsigned end_offset; + int mode = FALLOC_FL_WRITE_ZEROES; + + if (length == 0) { + if (!quiet && testcalls > simulatedopcount) + prt("skipping zero length write zeroes\n"); + log4(OP_WRITE_ZEROES, offset, length, FL_SKIPPED); + return; + } + + end_offset = offset + length; + if (end_offset > biggest) { + biggest = end_offset; + if (!quiet && testcalls > simulatedopcount) + prt("write_zeroes to largest ever: 0x%x\n", end_offset); + } + + log4(OP_WRITE_ZEROES, offset, length, FL_NONE); + + if (end_offset > file_size) + update_file_size(offset, length); + + if (testcalls <= simulatedopcount) + return; + + if ((progressinterval && testcalls % progressinterval == 0) || + (debug && (monitorstart == -1 || monitorend == -1 || + end_offset <= monitorend))) { + prt("%lld write zeroes\tfrom 0x%x to 0x%x, (0x%x bytes)\n", testcalls, + offset, offset+length, length); + } + if (fallocate(fd, mode, (loff_t)offset, (loff_t)length) == -1) { + prt("write zeroes: 0x%x to 0x%x\n", offset, offset + length); + prterr("do_write_zeroes: fallocate"); + report_failure(161); + } + + memset(good_buf + offset, '\0', length); +} + +#else +void +do_write_zeroes(unsigned offset, unsigned length) +{ + return; +} +#endif + #ifdef FALLOC_FL_COLLAPSE_RANGE void do_collapse_range(unsigned offset, unsigned length) @@ -2296,6 +2358,12 @@ have_op: goto out; } break; + case OP_WRITE_ZEROES: + if (!write_zeroes_calls) { + log4(OP_WRITE_ZEROES, offset, size, FL_SKIPPED); + goto out; + } + break; case OP_COLLAPSE_RANGE: if (!collapse_range_calls) { log4(OP_COLLAPSE_RANGE, offset, size, FL_SKIPPED); @@ -2372,6 +2440,10 @@ have_op: TRIM_OFF_LEN(offset, size, maxfilelen); do_zero_range(offset, size, keep_size); break; + case OP_WRITE_ZEROES: + TRIM_OFF_LEN(offset, size, maxfilelen); + do_write_zeroes(offset, size); + break; case OP_COLLAPSE_RANGE: TRIM_OFF_LEN(offset, size, file_size - 1); offset = rounddown_64(offset, block_size); @@ -2519,6 +2591,9 @@ usage(void) #ifdef FALLOC_FL_ZERO_RANGE " -z: Do not use zero range calls\n" #endif +#ifdef FALLOC_FL_WRITE_ZEROES +" -z: Do not use write zeroes calls\n" +#endif #ifdef FALLOC_FL_COLLAPSE_RANGE " -C: Do not use collapse range calls\n" #endif @@ -3019,6 +3094,9 @@ main(int argc, char **argv) case 'z': zero_range_calls = 0; break; + case 'M': + write_zeroes_calls = 0; + break; case 'C': collapse_range_calls = 0; break; @@ -3281,6 +3359,8 @@ main(int argc, char **argv) punch_hole_calls = test_fallocate(FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE); if (zero_range_calls) zero_range_calls = test_fallocate(FALLOC_FL_ZERO_RANGE); + if (write_zeroes_calls) + write_zeroes_calls = test_fallocate(FALLOC_FL_WRITE_ZEROES); if (collapse_range_calls) collapse_range_calls = test_fallocate(FALLOC_FL_COLLAPSE_RANGE); if (insert_range_calls)