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 B8820C5AE59 for ; Thu, 5 Jun 2025 17:30:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3B32E6B00C1; Thu, 5 Jun 2025 13:30:39 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 33CF16B00C2; Thu, 5 Jun 2025 13:30:39 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 253266B00C3; Thu, 5 Jun 2025 13:30:39 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id EC79A6B00C1 for ; Thu, 5 Jun 2025 13:30:38 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 9BC4C161135 for ; Thu, 5 Jun 2025 17:30:38 +0000 (UTC) X-FDA: 83522036556.20.EC1F155 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf01.hostedemail.com (Postfix) with ESMTP id 9B4B440016 for ; Thu, 5 Jun 2025 17:30:36 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=N7rTwJ1j; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf01.hostedemail.com: domain of bfoster@redhat.com designates 170.10.129.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=1749144636; 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=LU2MyIQM1joNd8loBPHKESz8FUEB/OBONYYMnyKvWlg=; b=r0w0qJ3KXJvhod2htssRGsONg34ikZ5o7N4bnzh+gK+S7ZQ2xa2INRyjytlrYkxpgsMJfb y4N4bBOOI8PKOZXPHHX7L9iNOinSIDAyV17mxCHMNQDQ6m9Mmtqd7/snwFx6c2pDIdRlJz glUdc3zax7zuXoPyl/YbglwUCjVN2/0= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=N7rTwJ1j; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf01.hostedemail.com: domain of bfoster@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=bfoster@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1749144636; a=rsa-sha256; cv=none; b=Qu5RtRG7cd1RImanXyD+XYodNM6n2xBZk/HR5uGaNW3VWvDga/kOmssqa6tFgyve0Mjm1u BmGsvY9q/FoJdClz6NghDNnyrd3tnoAuPuG2XQCAYWxiwl0REqttnFcaJCKGZhLJntGogE wyOfFoZQoD+TjVvY01sHgE/m9GSuXn0= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1749144636; 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=LU2MyIQM1joNd8loBPHKESz8FUEB/OBONYYMnyKvWlg=; b=N7rTwJ1jtZx4p/9d2XcJFsMo4Xwr7HlmHDA5cCMQsAr5XWZLYqUNYLckRWFYmbdCctIwS+ 1H2QHR9aS8ayfHECLeasQ8BrcXIFydmE5+2si7IRWy9eNsijFF/i6/woMo7R4IvhbBIJLP o7D2DYm0B+ThZFACd+IvH/Xayx17ZPg= 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-163-4n6VysfBNlqu799EFqomWw-1; Thu, 05 Jun 2025 13:30:34 -0400 X-MC-Unique: 4n6VysfBNlqu799EFqomWw-1 X-Mimecast-MFC-AGG-ID: 4n6VysfBNlqu799EFqomWw_1749144633 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (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 5A1F919560AA; Thu, 5 Jun 2025 17:30:33 +0000 (UTC) Received: from bfoster.redhat.com (unknown [10.22.88.123]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 878B830002C0; Thu, 5 Jun 2025 17:30:32 +0000 (UTC) From: Brian Foster To: linux-fsdevel@vger.kernel.org Cc: linux-xfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 5/7] xfs: fill dirty folios on zero range of unwritten mappings Date: Thu, 5 Jun 2025 13:33:55 -0400 Message-ID: <20250605173357.579720-6-bfoster@redhat.com> In-Reply-To: <20250605173357.579720-1-bfoster@redhat.com> References: <20250605173357.579720-1-bfoster@redhat.com> MIME-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 9B4B440016 X-Stat-Signature: jeprgfc83hh7pj78dbo5rz5mhfeedhpt X-Rspam-User: X-HE-Tag: 1749144636-957500 X-HE-Meta: U2FsdGVkX1+dC+WAxzl7frdP4q4UYTNsecT0vWINqcRBe11y/1QaKrIKaLVMZLgfAMqGtO7udMwZRBwgdzm2h1OfB1/h481firP2wcP/ubLJDaeJys69DCLmDrxAEIkqE9xZqR4cv60vSzwFGoTByKB66rhatrd1aRpcKS2+xCGJJgHHn0fLQOxO+Q4wY98TdeVKyxEzbrWBvpQSJkYTQFvfAypGpbBDqB2cdvOser5KoyQAW9m3WhsHjnTj+RxQ40NThx6nzIHHBMJQDEYOz4hwO5SLcQn9VNdPD+zJOMy4N6WClkQfUDq3abrKXfP/ZgF3ep7oWUDTsvwvX1fds1mc6YOXvVgw6ynG6zb6ShbmoUWKjqU+gOZDFObyLcvLk2ogVFF/3m5lxrLO11AzSNNCa+PPwZqaHY828cs121R3Ck9ho/qoysgUNUP+LDeWdBuqyPWVtskJGINnT+42qVH2w+S3HxcjkyTYSjaJMHWQ54MhxlYKGQdDO6jbFY/n6xzkFUpbGKo/VshywHniE8qkVTJNGhV3wcJqW2CED3VkHtUe5uXmvEKD+hbRutTrLqTxFO6k6lHCWcHpWMbmk6/R0VyWGbublUfHvncyghK4XzXjVrzMsg2sW5lriLAnIBGgG9gBqHieKxmofzmdF5YvZXfW/G1813vV+Xi/kCnwjzfyKrmSb25CytK9xRwk7S1OYnqVEvaTayr8Zgy7gwX1gYUBldy+bm8Mleg/vNaS/JebW52exZyhKnEIXVv3ci+8ziqQM2JQsvvhoxqQ2YXzJeRUSZjlxnS/qgZayh2IW2Ag52vfbJoU132duA20CMZDebU1ILAUL0j+6C24CHTz8T36Db99hi852w4hoRYGUbWZb6lrHPTQIN8HysbQvog8pqbbszAd/In8aSQvtFfcPE/ozPR5IrMD4XtWSd/55f+pYxFrJJ7R5otCwe9kYwRbIffBLniDaAxFcUS KH5YerBD f+livn6+/Qv4SNotBeh/eNDwQiVOlNRR58ogn5NXakDxYVa9yv7ripiXpXuqB4YtGHqkv+q5/1ac0/ymotkmJyehyifWj/dwf1fKvn0ytq3EwsC/O1lsWjGjzaf1u9DrBWcru8q2XPeuS5Snm7UsPrr7/jOBrEL9h+2MhhXKje4wcApuleEUlMD+VeLKHOURUtXfY/he9FwhYOne4CW6dfGNAXdxEfC0+uJPCwlVDAaHU+kqUKyQ+kRZbUyKaWtTZQNkfO8KHV1bNSVUkPoxaNnJ96zfHaEpdy+hmPZ504NvP1aJLhQVj/0462fIVf0Ettl+OYWrUJWQo9TY= 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: Use the iomap folio batch mechanism to select folios to zero on zero range of unwritten mappings. Trim the resulting mapping if the batch is filled (unlikely for current use cases) to distinguish between a range to skip and one that requires another iteration due to a full batch. Signed-off-by: Brian Foster --- fs/xfs/xfs_iomap.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index b5cf5bc6308d..63054f7ead0e 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -1691,6 +1691,8 @@ xfs_buffered_write_iomap_begin( struct iomap *iomap, struct iomap *srcmap) { + struct iomap_iter *iter = container_of(iomap, struct iomap_iter, + iomap); struct xfs_inode *ip = XFS_I(inode); struct xfs_mount *mp = ip->i_mount; xfs_fileoff_t offset_fsb = XFS_B_TO_FSBT(mp, offset); @@ -1762,6 +1764,7 @@ xfs_buffered_write_iomap_begin( */ if (flags & IOMAP_ZERO) { xfs_fileoff_t eof_fsb = XFS_B_TO_FSB(mp, XFS_ISIZE(ip)); + u64 end; if (isnullstartblock(imap.br_startblock) && offset_fsb >= eof_fsb) @@ -1769,6 +1772,26 @@ xfs_buffered_write_iomap_begin( if (offset_fsb < eof_fsb && end_fsb > eof_fsb) end_fsb = eof_fsb; + /* + * Look up dirty folios for unwritten mappings within EOF. + * Providing this bypasses the flush iomap uses to trigger + * extent conversion when unwritten mappings have dirty + * pagecache in need of zeroing. + * + * Trim the mapping to the end pos of the lookup, which in turn + * was trimmed to the end of the batch if it became full before + * the end of the mapping. + */ + if (imap.br_state == XFS_EXT_UNWRITTEN && + offset_fsb < eof_fsb) { + loff_t len = min(count, + XFS_FSB_TO_B(mp, imap.br_blockcount)); + + end = iomap_fill_dirty_folios(iter, offset, len); + end_fsb = min_t(xfs_fileoff_t, end_fsb, + XFS_B_TO_FSB(mp, end)); + } + xfs_trim_extent(&imap, offset_fsb, end_fsb - offset_fsb); } -- 2.49.0