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 A441DC48260 for ; Tue, 13 Feb 2024 21:27:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 166478D000F; Tue, 13 Feb 2024 16:27:43 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 117208D000E; Tue, 13 Feb 2024 16:27:43 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 006178D000F; Tue, 13 Feb 2024 16:27:42 -0500 (EST) 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 E39808D000E for ; Tue, 13 Feb 2024 16:27:42 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 59CE61407D1 for ; Tue, 13 Feb 2024 21:27:42 +0000 (UTC) X-FDA: 81788067564.28.7118FB3 Received: from mout-p-201.mailbox.org (mout-p-201.mailbox.org [80.241.56.171]) by imf20.hostedemail.com (Postfix) with ESMTP id 8BBCA1C000D for ; Tue, 13 Feb 2024 21:27:40 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=pankajraghav.com header.s=MBO0001 header.b=l2Rj7DFF; dmarc=none; spf=pass (imf20.hostedemail.com: domain of kernel@pankajraghav.com designates 80.241.56.171 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=1707859661; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Mh3OjUTOfcYW8zRUtE1UxIazXj8XXK2Ld1abdP7LWMU=; b=ZguqTdbKBKPkmSY1GPXh0OAdj5RtKWWr7/MjTguhsxqM3+aTKy8zzW1GkFy9uhoJrb0FB9 ZsFL2G5tRwJ3uiWKOByC0qDL6BVUz+YSLQ/m3hkqBnWzAEF5pcDZ2xbHdsBICKSr0F5ViG cTqoj07KW2qlteinR/+i3i0Gc36VExo= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=pankajraghav.com header.s=MBO0001 header.b=l2Rj7DFF; dmarc=none; spf=pass (imf20.hostedemail.com: domain of kernel@pankajraghav.com designates 80.241.56.171 as permitted sender) smtp.mailfrom=kernel@pankajraghav.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1707859661; a=rsa-sha256; cv=none; b=R25X6OC48qzRdbkvaMdpVdWwXWwiZ1UK1u7765TPekLbNvo2giTxhvFP3kVNf8V16SLPor 0HtNR76UcLRbrP5EwXKtpBq1wu5I4nurNyCqtqrCDTXvaeRIcswpQmbW3ifHUUJM3nHtfA +QPbAQtcJbcMhj8O07jwczbX12XcIJ8= Received: from smtp2.mailbox.org (smtp2.mailbox.org [10.196.197.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-201.mailbox.org (Postfix) with ESMTPS id 4TZDtw0hKTz9stm; Tue, 13 Feb 2024 22:27:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pankajraghav.com; s=MBO0001; t=1707859656; 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: in-reply-to:in-reply-to:references:references; bh=Mh3OjUTOfcYW8zRUtE1UxIazXj8XXK2Ld1abdP7LWMU=; b=l2Rj7DFF8BtL1ntuFgQ9i5ScpOASIaaFA5ar8kj490Zv3SkIEd9AH/eEM1E78dlbSlGSGQ sd+OyvOwurdpsV7420vYWp0WQ1KQyzbmS8dGj7vkBLGr5fdVHdOcHDySp1mvCxGfT5/6Ik ja0uxapoErU/J5zC4gAsNQYhmiSoLpxBUyB1RAlJkDRlIjVQoNNVHlsdGwSn0IZXdYPdXn zG6U1SzzOdF5Jgsnh1tx2U6CIghm2WterEHaSiWqTcAbXo8U1Z8UzaMxGkEDeTVWfkjN+b jnJSAfPoBqpWU4lx6ZYe4Rd7AnBxIGoDkJU+vl8CAFiAoHypUpzqv6IY9/EPJA== Date: Tue, 13 Feb 2024 22:27:32 +0100 From: "Pankaj Raghav (Samsung)" To: "Darrick J. Wong" Cc: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, mcgrof@kernel.org, gost.dev@samsung.com, akpm@linux-foundation.org, kbusch@kernel.org, chandan.babu@oracle.com, p.raghav@samsung.com, linux-kernel@vger.kernel.org, hare@suse.de, willy@infradead.org, linux-mm@kvack.org, david@fromorbit.com Subject: Re: [RFC v2 10/14] iomap: fix iomap_dio_zero() for fs bs > system page size Message-ID: <5kodxnrvjq5dsjgjfeps6wte774c2sl75bn3fg3hh46q3wkwk5@2tru4htvqmrq> References: <20240213093713.1753368-1-kernel@pankajraghav.com> <20240213093713.1753368-11-kernel@pankajraghav.com> <20240213163037.GR6184@frogsfrogsfrogs> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240213163037.GR6184@frogsfrogsfrogs> X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 8BBCA1C000D X-Stat-Signature: 91u3kri34d3jwtep86kner9kz98u474p X-Rspam-User: X-HE-Tag: 1707859660-260586 X-HE-Meta: U2FsdGVkX19Bf/cFPzZ7HNhSfEqvtZkh+AakeUKlpRJkbDq6XU5dfXb9Wt+GeL1Q3aF5q9w7/M8HWczDgTqiOmr8yefC++6QLmI2Q1evmGorv2W01/fHLa6CPcnPyd9VK/+/g1HZDN907S5UBQa/Shx0QvdNyFPhDU10cAwRxiGH4P4uRNl1U6/7D3pS3uvncvOmzrOTJlwUzdebiEy8py/A0VPCamQy9OoadRe6kLS/Ljg1rT8iOhhYd5+JF+Ndwp4YcZ1OWtKux2PIOJgas8DoKOEcvglDZOsuAGbbiJZMSdp962YIhy2/KUkix/rL43B7yIqqpf8E45LgLCtKlEc/uLsaNxtUyFOQj7wFmrwfWwrn0/C8UQD4ulW3ZmfI8RaNUdVmJHPFRT/Gg5efY+kuXq85exZ+29ZU6e1tWEOFrohFaMTk0vmGugmdk56Vsk/lPop7F2tl3eNl3Zw0MxH4lwmFOKkYnONaoIQaey1wo3D08q7ZheJDUii3gTKT2piqisg6yzDvHioeYPz84e1U+esylIOu/INQfLNc5z9ZUQibPPaUIgUWozOtiZ0WRpfSiuA9tCjku6wrMoZLJ/Lgdb3YJxVVGymmOW+I+Tt+AGpQgQIiDh71YtTDS8CIXerZ72MabgILXcg94Xf+JsPoUoX4mAR3wp8zfZj4f5n8L7I4TVDJQ+EVSPACRdYxSxYdiM/X0DNdGrpLoNSUxVVN1BmLj9kPwuRirNIooRhAQqkihOxwkP1rDp3DGdw/X0WKr9x3XD6HYRoLTw8sqaveAphDoU2rxDPJSBSs28r9RE+Kn4Gfo0QxX1WEzj7Q9oRcqrmE9bXRmV9g/zzuAZZJXTsHXm1CEWX294efBqzFL/v3BpDvh2pLXWGw2cJEi+02lyc7JCU= 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: On Tue, Feb 13, 2024 at 08:30:37AM -0800, Darrick J. Wong wrote: > On Tue, Feb 13, 2024 at 10:37:09AM +0100, Pankaj Raghav (Samsung) wrote: > > From: Pankaj Raghav > > > > iomap_dio_zero() will pad a fs block with zeroes if the direct IO size > > < fs block size. iomap_dio_zero() has an implicit assumption that fs block > > size < page_size. This is true for most filesystems at the moment. > > > > If the block size > page size, this will send the contents of the page > > next to zero page(as len > PAGE_SIZE) to the underlying block device, > > causing FS corruption. > > > > iomap is a generic infrastructure and it should not make any assumptions > > about the fs block size and the page size of the system. > > > > Signed-off-by: Pankaj Raghav > > --- > > fs/iomap/direct-io.c | 13 +++++++++++-- > > 1 file changed, 11 insertions(+), 2 deletions(-) > > > > diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c > > index bcd3f8cf5ea4..04f6c5548136 100644 > > --- a/fs/iomap/direct-io.c > > +++ b/fs/iomap/direct-io.c > > @@ -239,14 +239,23 @@ static void iomap_dio_zero(const struct iomap_iter *iter, struct iomap_dio *dio, > > struct page *page = ZERO_PAGE(0); > > struct bio *bio; > > > > - bio = iomap_dio_alloc_bio(iter, dio, 1, REQ_OP_WRITE | REQ_SYNC | REQ_IDLE); > > + WARN_ON_ONCE(len > (BIO_MAX_VECS * PAGE_SIZE)); > > + > > + bio = iomap_dio_alloc_bio(iter, dio, BIO_MAX_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, page, len, 0); > > + while (len) { > > + unsigned int io_len = min_t(unsigned int, len, PAGE_SIZE); > > What was the result of all that discussion about using the PMD-sized > zero-folio the last time this patch was submitted? Did that prove to be > unwieldly, or did it require enough extra surgery to become its own > series? > It proved a bit unwieldly to me at least as I did not know any straight forward way to do it at the time. So I thought I will keep this approach as it is, and add support for the PMD-sized zero folio for later improvement. > (The code here looks good to me.) Thanks! > > --D > > > + > > + __bio_add_page(bio, page, io_len, 0); > > + len -= io_len; > > + } > > iomap_dio_submit_bio(iter, dio, bio, pos); > > } > > > > -- > > 2.43.0 > > > >