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 2E60FC3ABDD for ; Fri, 16 May 2025 10:11:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2F6446B012E; Fri, 16 May 2025 06:11:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 280236B0130; Fri, 16 May 2025 06:11:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0A91D6B0131; Fri, 16 May 2025 06:11:27 -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 D900C6B012E for ; Fri, 16 May 2025 06:11:26 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id AB06FC1D12 for ; Fri, 16 May 2025 10:11:27 +0000 (UTC) X-FDA: 83448353814.09.833B149 Received: from mout-p-101.mailbox.org (mout-p-101.mailbox.org [80.241.56.151]) by imf27.hostedemail.com (Postfix) with ESMTP id 3B1C24000F for ; Fri, 16 May 2025 10:11:25 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=samsung.com (policy=none); spf=pass (imf27.hostedemail.com: domain of kernel@pankajraghav.com designates 80.241.56.151 as permitted sender) smtp.mailfrom=kernel@pankajraghav.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1747390286; a=rsa-sha256; cv=none; b=fUWAVRaazkw28Z25/krkFT+uR2WZZUyWBDBLVO2sbGC/jYNrXSMQXoQhwwRUWeqUmLR0ZW xqX09Kre+NzVvUS3VC9ktr8krANoIEQ28soB/xXSwzgD14D0KHe0sXT+UKxKpzW/hGU8yj Rs+iFGxBpR6Pb7fvou4s4mdmoeW4zG0= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=samsung.com (policy=none); spf=pass (imf27.hostedemail.com: domain of kernel@pankajraghav.com designates 80.241.56.151 as permitted sender) smtp.mailfrom=kernel@pankajraghav.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1747390286; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=IctIAZJxxenPJiFoSaQZYVeo6IEdHAlWAYuEvlim5HE=; b=2ZVacAjHUGoJ1mrVU+kFEmi/cLdVsqYBzwv3u4aJPdH0cz4KhxqHZjXpOhOYXMCIGY/Rvy DJ5/OBFccyGQuP/KlqXqsSFuugg+ydH2f9AX3y6fRbGEliGykZKLCaGacO2M1YGe+/ThKr kNbr0cyLQYlDqt1FY+xw6pJIxX9sQNg= Received: from smtp2.mailbox.org (smtp2.mailbox.org [IPv6:2001:67c:2050:b231:465::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-101.mailbox.org (Postfix) with ESMTPS id 4ZzNCG6SMtz9tCG; Fri, 16 May 2025 12:11:22 +0200 (CEST) From: Pankaj Raghav To: "Darrick J . Wong" , hch@lst.de, willy@infradead.org Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, David Hildenbrand , linux-fsdevel@vger.kernel.org, mcgrof@kernel.org, gost.dev@samsung.com, Andrew Morton , kernel@pankajraghav.com, Pankaj Raghav Subject: [RFC 3/3] iomap: use LARGE_ZERO_PAGE in iomap_dio_zero() Date: Fri, 16 May 2025 12:10:54 +0200 Message-ID: <20250516101054.676046-4-p.raghav@samsung.com> In-Reply-To: <20250516101054.676046-1-p.raghav@samsung.com> References: <20250516101054.676046-1-p.raghav@samsung.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 3B1C24000F X-Rspam-User: X-Stat-Signature: ifannscyuokf43j9nizfozg5yib89bf3 X-HE-Tag: 1747390285-747435 X-HE-Meta: U2FsdGVkX18n2VuofKk9pN7PlQ2xK5Z8GrM94hO7cTmV3QZ/I5qUuIvEbUzmq+y2xrpm1oWuEDnjOa+PdUccsUsbsPIjT/MrCoSQvlxR2pXK0fdBi/lFzDDyaQQnBEsbV0XITzXqdXcjwzVj0aQuiOnWIIBJkMiInsLSNyigBO+1IvaZxGFEUbITB1kwIbNxIM721z5saWqmKhJko5KMu7X/hVUyu9dZtycwCz5tm1FsDsJ8u7mgJWYLvGAUOzPYDCFkEDStkyux2xPYgvPZxsb9czVpSrKO6HVIBhE0PTnaWwn9x0i6ItEOl403ldJnq/doAlLdS7PFpY+6Sv08a+n4tMgYP4Qu55kadGBwIvZEo9sZ8Wv9SrWMMOO52Db5wa8KdF0M38DkvRkzjW3B7lZICi7QCMaB5fUx4jsE6U/L6DxW3xK0t70FJ8SGMzKNPBPUVGGFBczg5lCDqsYM196JkR3R+xJlzxa+e7n9p46EnBYjntFp4ZosA/dgKa7iR+KWEaHrGx89MKcSJe10bCj8Hi2ixOxxgoqgUXAS+4hmnWLYMixLtTtZghfdRWRCFcrRreh/CmICsRxmdLOuF8YmKIq0SGql5YO+DX1+9kluJvb7tvcbRZ6k+9cyrawF97rfAtCKVXY+zOOJd3c1CGCCXzsp3jlpuDNG9oL590fsZMkMRLeMMubOvqMYQvfmMISyzn9fDjsIdELDHXv8ELnxlbcLTlzflwI7iocaKBWN3mNqtA1mDeoloZtqvd6WNuItorp7VnWrCRru7uBYOKQiMLyyrBsnGyY1klnkly/BmAQ6INRnkp86cQiDDqMwqzd+UbVpZTnbCbD3eMfUqI+UYmytWZrzZFKaaEhupbHO6bLSRHLbduuTQ67UlxbBBYpMiJSrUbRb6sDtDa+NiwEcPBddKM/Bo6pRS8/EY2z+PNFKugJF2YuDigv6PETycbsTOLuL+TUYD9sk7fB hA62ldTo 1M1lhQUlFY5tOyhCC9Wyky0/hHa1l5lXez66J/BVxX9fMcixpYmjTlpityJT+PQaQCxPT+2CxXQZpARF6jERJHgU9FtuQGQujeBg48DmYk0FwD6ZUyjHiSXJ0B2l5f+TSAOQd 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 LARGE_ZERO_PAGE instead of custom allocated 64k zero pages. The downside is we might end up using ZERO_PAGE on systems that do not enable LARGE_ZERO_PAGE feature. Signed-off-by: Pankaj Raghav --- fs/iomap/direct-io.c | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index 844261a31156..6a2b6726a156 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -29,13 +29,6 @@ #define IOMAP_DIO_WRITE (1U << 30) #define IOMAP_DIO_DIRTY (1U << 31) -/* - * Used for sub block zeroing in iomap_dio_zero() - */ -#define IOMAP_ZERO_PAGE_SIZE (SZ_64K) -#define IOMAP_ZERO_PAGE_ORDER (get_order(IOMAP_ZERO_PAGE_SIZE)) -static struct page *zero_page; - struct iomap_dio { struct kiocb *iocb; const struct iomap_dio_ops *dops; @@ -290,23 +283,29 @@ static int iomap_dio_zero(const struct iomap_iter *iter, struct iomap_dio *dio, { struct inode *inode = file_inode(dio->iocb->ki_filp); struct bio *bio; + int nr_vecs = max(1, i_blocksize(inode) / ZERO_LARGE_PAGE_SIZE); if (!len) return 0; /* * Max block size supported is 64k */ - if (WARN_ON_ONCE(len > IOMAP_ZERO_PAGE_SIZE)) + if (WARN_ON_ONCE(len > SZ_64K)) return -EINVAL; - bio = iomap_dio_alloc_bio(iter, dio, 1, REQ_OP_WRITE | REQ_SYNC | REQ_IDLE); + bio = iomap_dio_alloc_bio(iter, dio, nr_vecs, REQ_OP_WRITE | REQ_SYNC | REQ_IDLE); fscrypt_set_bio_crypt_ctx(bio, inode, pos >> inode->i_blkbits, GFP_KERNEL); bio->bi_iter.bi_sector = iomap_sector(&iter->iomap, pos); bio->bi_private = dio; bio->bi_end_io = iomap_dio_bio_end_io; - __bio_add_page(bio, zero_page, len, 0); + while (len) { + unsigned int io_len = min_t(unsigned int, len, ZERO_LARGE_PAGE_SIZE); + + __bio_add_page(bio, ZERO_LARGE_PAGE(0), len, 0); + len -= io_len; + } iomap_dio_submit_bio(iter, dio, bio, pos); return 0; } @@ -827,15 +826,3 @@ iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, return iomap_dio_complete(dio); } EXPORT_SYMBOL_GPL(iomap_dio_rw); - -static int __init iomap_dio_init(void) -{ - zero_page = alloc_pages(GFP_KERNEL | __GFP_ZERO, - IOMAP_ZERO_PAGE_ORDER); - - if (!zero_page) - return -ENOMEM; - - return 0; -} -fs_initcall(iomap_dio_init); -- 2.47.2