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 300FFC83F1A for ; Mon, 14 Jul 2025 13:17:46 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1D5BC6B00A1; Mon, 14 Jul 2025 09:17:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 15FB36B00A2; Mon, 14 Jul 2025 09:17:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 026B56B00A3; Mon, 14 Jul 2025 09:17:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id DC6176B00A2 for ; Mon, 14 Jul 2025 09:17:31 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id AE44AC0155 for ; Mon, 14 Jul 2025 13:17:31 +0000 (UTC) X-FDA: 83662921902.17.666289D Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf03.hostedemail.com (Postfix) with ESMTP id D2B2720008 for ; Mon, 14 Jul 2025 13:17:29 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=Or85Opcs; spf=pass (imf03.hostedemail.com: domain of bfoster@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bfoster@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752499049; 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=J267WbbKYx/KqIj532GDLL47IG+HwfOERvZ7pNKCCbI=; b=W/3VJkN0DgLIyupqOBF/5IAzavM9eWgD44F9sv/wo0ASr31z2Qyg+FiffmJtrP+yl2IqcA 8TSmj+R6cdWvrF2yJXhg4ilVYCzg3W+v+aI9dEcJMOmi/T88+ZZ6v399fPQpFbw3ExEdif DvqEBSEB5CTc6q662tl0Dbq2lANvTXk= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=Or85Opcs; spf=pass (imf03.hostedemail.com: domain of bfoster@redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=bfoster@redhat.com; dmarc=pass (policy=quarantine) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752499049; a=rsa-sha256; cv=none; b=HNZtdixNXzKot+WvSGliUsjLukGbAL/dpPzunQQiLxHd7qqMZK0OTfdgkxxaLhlhVWfLBg fbt13FCXjSOtYp5Li+xN7uOXT3KzT+0fS/C1/xFXl95TnfBZTXdvkt7ip+wQyO1qwVdeYB YCs5e01C0w00aOcN/TAz9nU4Hxnl4eY= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1752499049; 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=J267WbbKYx/KqIj532GDLL47IG+HwfOERvZ7pNKCCbI=; b=Or85OpcspE110lULh55nrZGk5T3cKA8C595hNHNzDYWjvEq46YZMUQsdjYbICoXypDueOZ 9ZfA7Rud+RVF3QdXebkPN7Chiq57vhaAPd+DzBO3BrFrlTnL9LpeKwfLs9CeZ4ondt/uSA BpeQPoZXbXrIz/fGt7oFrXxL2mlktJo= Received: from mx-prod-mc-04.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-646-95_ARaa8PyCfYQmyS_E0og-1; Mon, 14 Jul 2025 09:17:26 -0400 X-MC-Unique: 95_ARaa8PyCfYQmyS_E0og-1 X-Mimecast-MFC-AGG-ID: 95_ARaa8PyCfYQmyS_E0og_1752499045 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (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-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 522E919560B9; Mon, 14 Jul 2025 13:17:25 +0000 (UTC) Received: from bfoster.redhat.com (unknown [10.22.64.43]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 1AA3C18002B2; Mon, 14 Jul 2025 13:17:23 +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 v2 5/7] xfs: fill dirty folios on zero range of unwritten mappings Date: Mon, 14 Jul 2025 09:20:57 -0400 Message-ID: <20250714132059.288129-6-bfoster@redhat.com> In-Reply-To: <20250714132059.288129-1-bfoster@redhat.com> References: <20250714132059.288129-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.93 X-Stat-Signature: rn8ijy9she6hg669xm5p1nuri4k7zz7a X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: D2B2720008 X-Rspam-User: X-HE-Tag: 1752499049-134028 X-HE-Meta: U2FsdGVkX18R8SH3ehQJ5MjZp4C6HcANW2d755Oj79my1pQPZNiYwx3w1zF58Mvy5kjCwgFkYLrbDMYTa5q+2Ng10lLYjzTBkULWnhT4owXEk0mwLqZ/oUHzgoVDQZzZ3ycYy1WMUB4/ELo613P9V6GHZmwwX8BpUYETQ5IWVOzSCZ1QRg6YMeecb/riLvRmYTB6Up1RIjEFMhqVHQJ9onR4pJQVW4CVw72RJN6p7IBNpOl9Z1a8N4PH9SMiyf/eHCyHxB5WCzV975h9Lmf3o8FVyqyWpBoWLdfMqIAQLtc+rYH1TfzgFDzpJA0husQsxd/1fvGcTmXTAvffpxCdME0T66YC5BojEdwly3QD/eG7eEc0/1JJMZYrDznoriR7Q7iRrZ3XmNwkfnCujr/yl+ZTqprT0Z96herBlHKZ+lJlCK7ws9ucnzuvbecTxOepTbJDobCedpV05L2NYVNq/5/7Ce/i8p+SlVNt+HzSlySlEg33aKxGi67ULl128XLVDxdyErEOoBMx4gHEkjoE/IyxVJNJ+QuhUDhXL1WTHVQdK0o4FT7OBhlWkETUlFDaBkC0i+a1+RXcZlZztbm21L3wUGeMjgYIMsnIW88GWwKzRke4ZPrcOjAz3MfmP7s121KDIZx4hzQa+Lx/nrCn0rPNJiQ2tidt2xF5dBTChUYpZjvh8vp4VFq0nmfZ34gjeJLSQ5T4PevbW+bMEMAVXY7jcCqgEtBdW0IXMfiHjGftY+QIiMH2d14Dlixn8kuyg6t3kYRR5RNLZmvI9He1FUyev5KzOmp+Ca/ExOreFi5iw4JIcrgs2J/tsmvAJIkiZPSGlRKBhhwbTKkWHll7ZBL9nN/q//28cB4TcCO/FAL/J9n1Zr6u6PpPBvZkGPoP9ss40A/JHOxHy0Ni/B66MpjffKJtdy7AJYAREhcwvcD7QDBYs0sC+WndI+Q/R7+dQIrGamznjmnmezvZ1nQ 5rGQEGtJ KbmcWjmKNR1L1DljC6WXuAIiSTSw08UIfIkeWpO5aW0EhMyr7i2PGsbZvBxNsX9G9/OYj7nTG+rk1Gz2695EfSZLTSQkPzEueCfWylmQe5CIu1lUbWm+fQv3HAW+qnKbqoD47mnxpG42ceGs9tlyxBlpnnYzRxmxNknn73f+wXpcDQ02ZWxF/4BhqV1EH7hiQPYSI/5GjZvtffJRqBiTGRIE/rz+u1JZH1uTrTg/wnUoK0PcVYX42FYy+/S/ezqPghfGkj1RHr1p5mIpNH6knKDWA5sm/8oYx9mYMyAslT6zn9zDavOdRKEGLm6cXWs0jqhoLhR0tsI5JXRs= 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.50.0