From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 01D67C83F17 for ; Mon, 14 Jul 2025 20:38:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 498F26B00B6; Mon, 14 Jul 2025 16:38:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4224D6B00B7; Mon, 14 Jul 2025 16:38:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 29C066B00B8; Mon, 14 Jul 2025 16:38:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 143AC6B00B6 for ; Mon, 14 Jul 2025 16:38:01 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id DB6301602E5 for ; Mon, 14 Jul 2025 20:38:00 +0000 (UTC) X-FDA: 83664031920.18.6E9897C Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf12.hostedemail.com (Postfix) with ESMTP id 20BC140004 for ; Mon, 14 Jul 2025 20:37:58 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=bA38LAmV; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf12.hostedemail.com: domain of bfoster@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bfoster@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752525479; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Wsy0af5qGU/BY2e0Peax02/9WolVcMYE/LpbqVdqbCE=; b=Hk1xVzoX2RJgGcllGQFYOc1kqalZKTLPwvKtVK5o2ki1oHyvZFZLGwAoYPh1ZBmRm5rM1t pxjfdgB1ZhxGYdaoa33CGr8VXY3kNWYy8sirYmeS7nIsEhWXotz9I6rC9m179rN12uVCpC Dd+eWt5YDwfVvtljt2BCl1dw+AGYI84= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752525479; a=rsa-sha256; cv=none; b=m4LX2APnQTSxHcITZfQ11OXLmqvE9NNvC6G0jiN5iEH5k3qp17sEUuRl7SYfEIFZ70+Ooy iHDloIQUo7TN2SRJfks1WyX6aXWcWJl4whgzFE1gvjtXtOk9i9/CBroSfo008xWqrs1iAQ 6AGedr288Jm7bYM7lNfndJDILRuwfHc= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=bA38LAmV; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf12.hostedemail.com: domain of bfoster@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bfoster@redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1752525478; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Wsy0af5qGU/BY2e0Peax02/9WolVcMYE/LpbqVdqbCE=; b=bA38LAmVtlHhoaLwuHI1BLSrStWUqMicIUC++jqnaBYJCcZnzWfrUaAODwGrQldcEbDYg7 nFh6FuUzZIXB0ZK+ZFXUECOuqHpOAalQPKcQGJ2ynWlsvzutUIsuiAMoXRydrFSFzwOIYr wBfbyCgFkvntsSzKV6ODsJymfcCYAio= Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-28-HCjOX-oDOSSzPcSNIZFjLw-1; Mon, 14 Jul 2025 16:37:55 -0400 X-MC-Unique: HCjOX-oDOSSzPcSNIZFjLw-1 X-Mimecast-MFC-AGG-ID: HCjOX-oDOSSzPcSNIZFjLw_1752525474 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id DBD70195608E; Mon, 14 Jul 2025 20:37:53 +0000 (UTC) Received: from bfoster.redhat.com (unknown [10.22.64.43]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 6A4B019560A3; Mon, 14 Jul 2025 20:37:52 +0000 (UTC) From: Brian Foster To: linux-fsdevel@vger.kernel.org Cc: linux-xfs@vger.kernel.org, linux-mm@kvack.org, hch@infradead.org, djwong@kernel.org, willy@infradead.org Subject: [PATCH v3 7/7] xfs: error tag to force zeroing on debug kernels Date: Mon, 14 Jul 2025 16:41:22 -0400 Message-ID: <20250714204122.349582-8-bfoster@redhat.com> In-Reply-To: <20250714204122.349582-1-bfoster@redhat.com> References: <20250714204122.349582-1-bfoster@redhat.com> MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Rspamd-Queue-Id: 20BC140004 X-Stat-Signature: sryckoehm44d1x1jseh6erd9fi8pkce1 X-Rspam-User: X-Rspamd-Server: rspam11 X-HE-Tag: 1752525478-677566 X-HE-Meta: U2FsdGVkX1/VW57TyUOrr3WNbELvs2FxRTHWGEuVBNooA44MUEP+bJf9bPF6Zy3GRQ3hmQxD7bXYeF7+js2+MoGTAZTi9ZjELI3lE9p2nj8Y5xYZAqeQqtVDHLHmk+kXdwiAgQD/5mynJ/1Ng2y786C466eY/SbiqqTyI8+Q1yloypEJnENAxi0Gcw3vCmiMlx/+ybr/nBuDbhaZ4Q0BkNXGTFkHM/6Oz1T1tAeZtK0HbbiJeUr4NuKCaI9n5YM1KHm8cypySgfPTlGCxdwBzU6oh1eVzO7RbTrFogTI+lCbjiPk3KHlqxPikjBBcBcwrajG9aE5kBSzUKvCt9uEL3MmSlaTVroEVfT37LSjM42kKnOJDktyzzyOvQzEzLKS/Tpa8SBRGINlwL1YUfnVxCKBULZulQzOFlyYXLoZcOpX5alOKh6eMI+kEMrEQh/qCePauBKfIAxT+uO46A3O2HKYWlm5h9frm+EeJMBuesDMSu8V0z/IONzd3KLp/v/8QdYROHrfRF6KFs1eMuOUtfl1OQh5jmtmC1dBiczaGyxVW5t1+jIXBpO4cVpM3f1li1xGANsii0OaBuSgqH/RBIRrsT0x9RVXCwr9Gew6Fjlb4ESBtxgJfc2OXOVNKXjNYqeZSTKdtCNXCIZUjCJ2oBJm3fDn+94HjoprWY6ADNJZTQ4EyxBDvi8SJKaI+Q6YgMU33lsSee2P6B1f6GupDRmaonPAH1pM5sLYK2WCHVNsveVXKrTi2wIL/lZRFoMLSwhTGeKzp41PmxWl0UAgS5a3mdRAsQk/QWGRnxn1ZdkIlNelTG7XIC2EbtdWtPe4DRlVsX+eIz3uwQm/aOAlmWWiTwyaBr2nZmq4sMiYUPbxTqD263tw7daxs3zR5cmA3dtptgsXkOj3pKjBZAy0g8FYrPyP26W2Vd9qm3r8Va9xlEJv6JP/h+IdN6QoO+fyYzRfWAIJ8Oh8MuSWv1X gBt8XMZ1 C5ae+pAsrj6W2o8Dof9HwLN2wJA/3HEdjvZg4wN4Kz9y0dlxd1+uUUSO7uyl2fej6bEi/5x+CgBwIgakRtCZULeT4o3hgHeW2vaP69AfAwjrnuHwEbXEZ6xju6MyiaOHQZqE15hDLac3SQHTwJhrg/fZamwPYAFM7ZKS1rg2IAexpV7V4hrjvn6yIhpT1Z/yfHjLNp72w7pOLJpsoij6avfVDB6z8/zLsKWbTHt24g0JauiChkAzqoP9h2OOKZd78vE9iG8NTdFtW3Su1zOhsUel3AIvBtDAOpY2haOlQ6cekTm6nj1oz38bNJhtVZjHr7jbXHeQh25cbSUA= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: iomap_zero_range() has to cover various corner cases that are difficult to test on production kernels because it is used in fairly limited use cases. For example, it is currently only used by XFS and mostly only in partial block zeroing cases. While it's possible to test most of these functional cases, we can provide more robust test coverage by co-opting fallocate zero range to invoke zeroing of the entire range instead of the more efficient block punch/allocate sequence. Add an errortag to occasionally invoke forced zeroing. Signed-off-by: Brian Foster Reviewed-by: Christoph Hellwig --- fs/xfs/libxfs/xfs_errortag.h | 4 +++- fs/xfs/xfs_error.c | 3 +++ fs/xfs/xfs_file.c | 26 ++++++++++++++++++++------ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/fs/xfs/libxfs/xfs_errortag.h b/fs/xfs/libxfs/xfs_errortag.h index a53c5d40e084..33ca3fc2ca88 100644 --- a/fs/xfs/libxfs/xfs_errortag.h +++ b/fs/xfs/libxfs/xfs_errortag.h @@ -65,7 +65,8 @@ #define XFS_ERRTAG_WRITE_DELAY_MS 43 #define XFS_ERRTAG_EXCHMAPS_FINISH_ONE 44 #define XFS_ERRTAG_METAFILE_RESV_CRITICAL 45 -#define XFS_ERRTAG_MAX 46 +#define XFS_ERRTAG_FORCE_ZERO_RANGE 46 +#define XFS_ERRTAG_MAX 47 /* * Random factors for above tags, 1 means always, 2 means 1/2 time, etc. @@ -115,5 +116,6 @@ #define XFS_RANDOM_WRITE_DELAY_MS 3000 #define XFS_RANDOM_EXCHMAPS_FINISH_ONE 1 #define XFS_RANDOM_METAFILE_RESV_CRITICAL 4 +#define XFS_RANDOM_FORCE_ZERO_RANGE 4 #endif /* __XFS_ERRORTAG_H_ */ diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c index dbd87e137694..00c0c391c329 100644 --- a/fs/xfs/xfs_error.c +++ b/fs/xfs/xfs_error.c @@ -64,6 +64,7 @@ static unsigned int xfs_errortag_random_default[] = { XFS_RANDOM_WRITE_DELAY_MS, XFS_RANDOM_EXCHMAPS_FINISH_ONE, XFS_RANDOM_METAFILE_RESV_CRITICAL, + XFS_RANDOM_FORCE_ZERO_RANGE, }; struct xfs_errortag_attr { @@ -183,6 +184,7 @@ XFS_ERRORTAG_ATTR_RW(wb_delay_ms, XFS_ERRTAG_WB_DELAY_MS); XFS_ERRORTAG_ATTR_RW(write_delay_ms, XFS_ERRTAG_WRITE_DELAY_MS); XFS_ERRORTAG_ATTR_RW(exchmaps_finish_one, XFS_ERRTAG_EXCHMAPS_FINISH_ONE); XFS_ERRORTAG_ATTR_RW(metafile_resv_crit, XFS_ERRTAG_METAFILE_RESV_CRITICAL); +XFS_ERRORTAG_ATTR_RW(force_zero_range, XFS_ERRTAG_FORCE_ZERO_RANGE); static struct attribute *xfs_errortag_attrs[] = { XFS_ERRORTAG_ATTR_LIST(noerror), @@ -230,6 +232,7 @@ static struct attribute *xfs_errortag_attrs[] = { XFS_ERRORTAG_ATTR_LIST(write_delay_ms), XFS_ERRORTAG_ATTR_LIST(exchmaps_finish_one), XFS_ERRORTAG_ATTR_LIST(metafile_resv_crit), + XFS_ERRORTAG_ATTR_LIST(force_zero_range), NULL, }; ATTRIBUTE_GROUPS(xfs_errortag); diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c index 0b41b18debf3..c865f9555b77 100644 --- a/fs/xfs/xfs_file.c +++ b/fs/xfs/xfs_file.c @@ -27,6 +27,8 @@ #include "xfs_file.h" #include "xfs_aops.h" #include "xfs_zone_alloc.h" +#include "xfs_error.h" +#include "xfs_errortag.h" #include #include @@ -1269,13 +1271,25 @@ xfs_falloc_zero_range( if (error) return error; - error = xfs_free_file_space(XFS_I(inode), offset, len, ac); - if (error) - return error; + /* + * Zero range implements a full zeroing mechanism but is only used in + * limited situations. It is more efficient to allocate unwritten + * extents than to perform zeroing here, so use an errortag to randomly + * force zeroing on DEBUG kernels for added test coverage. + */ + if (XFS_TEST_ERROR(false, XFS_I(inode)->i_mount, + XFS_ERRTAG_FORCE_ZERO_RANGE)) { + error = xfs_zero_range(XFS_I(inode), offset, len, ac, NULL); + } else { + error = xfs_free_file_space(XFS_I(inode), offset, len, ac); + if (error) + return error; - len = round_up(offset + len, blksize) - round_down(offset, blksize); - offset = round_down(offset, blksize); - error = xfs_alloc_file_space(XFS_I(inode), offset, len); + len = round_up(offset + len, blksize) - + round_down(offset, blksize); + offset = round_down(offset, blksize); + error = xfs_alloc_file_space(XFS_I(inode), offset, len); + } if (error) return error; return xfs_falloc_setsize(file, new_size); -- 2.50.0