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 67C65D68BCF for ; Fri, 15 Nov 2024 20:02:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C93546B0088; Fri, 15 Nov 2024 15:02:06 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id C440C6B0089; Fri, 15 Nov 2024 15:02:06 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AE4BE6B008A; Fri, 15 Nov 2024 15:02:06 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 8E51E6B0088 for ; Fri, 15 Nov 2024 15:02:06 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 17FEC141C46 for ; Fri, 15 Nov 2024 20:02:06 +0000 (UTC) X-FDA: 82789398552.19.1D99904 Received: from bout3.ijzerbout.nl (bout3.ijzerbout.nl [136.144.140.114]) by imf14.hostedemail.com (Postfix) with ESMTP id D215D100007 for ; Fri, 15 Nov 2024 20:01:12 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=ijzerbout.nl header.s=key header.b=cHfjERfY; spf=pass (imf14.hostedemail.com: domain of kees@ijzerbout.nl designates 136.144.140.114 as permitted sender) smtp.mailfrom=kees@ijzerbout.nl; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1731700835; 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=1da3t6x+fQO90iML1j96gm3n46oBKBuH21WrjAs484Y=; b=NMnfKqUbjrwK7GaevSR7+PGRbidogJo734/FAWF0QH84G9/Ba6xLxolneS2RI7rr08YN1I WebmpRWukNtEmXySYOQF84lAFPA5ueRoQ5V+nrvYZTHhovg54kME5rf6YLvH+zi9v9d5I9 qGIDE61d52EbsiGZVupH8xnO3TC8RAo= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1731700835; a=rsa-sha256; cv=none; b=ZVHGhFk2DsIz/X+SlfYZIfBBmJQCA7bpL2byB1/SDn25DmnIeDTBieBEAAaLFVmXAdHuTl BGgh6SQ8RE1juQG3fp1NXrDN4EQXn9IURDEQTAzT+ZNiz99e98etyqQhdP7AGtLb9mTeof 0n0+0OKrMi8cq065ND2rNs29TvCO/2g= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=ijzerbout.nl header.s=key header.b=cHfjERfY; spf=pass (imf14.hostedemail.com: domain of kees@ijzerbout.nl designates 136.144.140.114 as permitted sender) smtp.mailfrom=kees@ijzerbout.nl; dmarc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ijzerbout.nl; s=key; t=1731700922; bh=kTKcI7rAzWbnFx3Ax+rm7FwXA+3N7eD2+FIgr2oP7kg=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=cHfjERfY1/rAAYikk2QNbgGZwf8P76vzMPzQy0d38kXIISsg6cIu+TyONdT+1XA9d dnHVgoiBK/U+Ro40XfKwbu0kYfn03m1yCclV6oORc5HF1o34pGsZmNOzLqCRhoSAH+ bVBVKjSR8nU5xVOSXJDnjtUPKMWJyAKcxgCzdVYtvgvWOYTpPivdsVJJLPoI2YBvDv YfdiF9W8RjIdBQ3sShsTkRNGpSMMNgugIUwUnbAbuBOE3sUaWPyxt1eEG2fB+9Ojh6 clox9OhOuRhluFaZfycU5bW3lyo10aEcZYWTp4LajDyqEsevUsJGiGsQGbbtmUsAGw zM/4cMlJZi0LxU8Iz7pva37mepW1yCxANkesaw/WVrlzxEL2BBIYcvn4Ns+IWj/Pl9 3xbzlIzCPENc15jBiKC3X5tUuOq6P+iM8sUBOmiD5JyFBSMXeuSuAu1HJ7Bbd4FyE/ PBYXB2Di/tBAed2LS23SuHO40UV3Hf8QS8rw4yLte6S2qH/ZvWXvDoEQF9H7Wt0ZGA ysGoIjNlPNdRkfpyOTMNcAHMh4u1X1WsE3uuWa2Onkmd9yvzplXQr4YqjLyvanucka NQVkL1t60WZZNPUDpdDPVX+iR4y9mn87zk2epeaPRvd1Pow2ipBYG6a3996OgEmpKk fItX9fSiHH5XvvnpO8iKLYxA= Received: from [IPV6:2a10:3781:99:1:1ac0:4dff:fea7:ec3a] (racer.ijzerbout.nl [IPv6:2a10:3781:99:1:1ac0:4dff:fea7:ec3a]) by bout3.ijzerbout.nl (Postfix) with ESMTPSA id 7CF6618A7E9; Fri, 15 Nov 2024 21:02:00 +0100 (CET) Message-ID: Date: Fri, 15 Nov 2024 21:01:57 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 07/33] netfs: Abstract out a rolling folio buffer implementation To: David Howells , Christian Brauner , Steve French , Matthew Wilcox Cc: Jeff Layton , Gao Xiang , Dominique Martinet , Marc Dionne , Paulo Alcantara , Shyam Prasad N , Tom Talpey , Eric Van Hensbergen , Ilya Dryomov , netfs@lists.linux.dev, linux-afs@lists.infradead.org, linux-cifs@vger.kernel.org, linux-nfs@vger.kernel.org, ceph-devel@vger.kernel.org, v9fs@lists.linux.dev, linux-erofs@lists.ozlabs.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org References: <20241108173236.1382366-1-dhowells@redhat.com> <20241108173236.1382366-8-dhowells@redhat.com> Content-Language: en-US From: Kees Bakker In-Reply-To: <20241108173236.1382366-8-dhowells@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam10 X-Stat-Signature: w91hr4u8a3d7otiabdpoacgjtd3tnx5p X-Rspamd-Queue-Id: D215D100007 X-Rspam-User: X-HE-Tag: 1731700872-592004 X-HE-Meta: U2FsdGVkX19WcR3z3Bm3hcPV1cNjjcWmn6MfwD5QCPnoS5XAtYiBsKUPo26ucMVt3I6a5z8qNBuBfju2PZfawleWGPSJaoa5MLqKXjvhTqsAS2zvd/ujTD86Dj412WrGfluegaCVY2hWMBPjc1Bw+mMgmJLISRairmXsGH04skQwB7ygETOEGNruJC43o2NNXj+5Rl76/uPMptqOw+7BJ0zD/DPIYHx1CFchLNJYv8Iy1bQuy7N8H3KosnNLKf4pttT/Z6Vl23aITmfgmKUdHhYsvbXrac1L+CLlZi5DCbvqNqKY1nAD7Pb6BoPBHfdaM/BEjMmjfmwfzn+03nDkfLrHCxXWV7xoxsWV9Bq+kjg2tl7AfotK/VfTTCxIGSHU+a48NGjy+/x61VE1Rp1+ceAtNYkC8EntvQb45dzFF7baBBkPrTt9PEHL3f7MdlE0sl8/tagInDuslmyNl152+3tCVENuyXkB0D2eFXqEpwJWzeWAD71gMziadfdU+w4DuBVKqYasFB6Fxrv4yFXpHfrB8YaPUEPzINLNKKJx3BnEt4lvxBank+jE1o1yn0hByxjBYFCuTCMgAVyZt9w9avhr1qhkxE/pTpj4nGK6pDwi/U2FJXp9ufKASz/fJBMk9p5uPxtxugJtaZV0ZFKiz4UcuO9Ihegl+W0UrKV4r/FPCNiL2h5y0XDFlYFzmjxwGy5tAXaRn9BKi6/JG68WC6Ka8iCvNUZPGobs/FAOsWp4VdOUlgfHWA1jkSUur/RxEk3AAtGeNjbY3qUA31DPKtMS5UMCjH6pO/sA6JtukaoFZ64Qf8l2NYP9VWlNVjeg8iC0C6QK/hQgaj4oRo9BTelf2ezHWLoBwk2UNoDOMqZLKMGYxK+38lNLUDJejlYtpDs3l5ZSZivL+1qtTzOI9Jhume4UZ4nGhsFFC177Yul8ZX/s7pfa8dzbCD58AnKGKch4CtmXPRANrYQp0PV iFli5Aa+ r62uvYcqy25+7VK70vj0tpABetSZJm4Gqq0bMi03JhC1daSHXA428twfJIzNArChiqqqq2Y3WpbWGCZc8zKPRGN/I9KisC4TbvMwIaXBjjofDe+f+ynEbYLmF32uSXJocR1hDfHH2CJfSu0uhnW5usH+Th9ahqNy/b80+8g47dWvzUr6/YdG9ih446yg/t9xpnaHqK6Q8EYEWqkdqNqmoSVYTHMs9P/ca/pLGKqLTQBUCIYPXqlsmy7bFBKSM2qv2xbkOJZ6cUzkJpipQ8YnfYW417WycMDS7clpkeEZDvFMJNtfNzqBWzj70K4UHWL5mAE4I 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: Op 08-11-2024 om 18:32 schreef David Howells: > A rolling buffer is a series of folios held in a list of folio_queues. New > folios and folio_queue structs may be inserted at the head simultaneously > with spent ones being removed from the tail without the need for locking. > > The rolling buffer includes an iov_iter and it has to be careful managing > this as the list of folio_queues is extended such that an oops doesn't > incurred because the iterator was pointing to the end of a folio_queue > segment that got appended to and then removed. > > We need to use the mechanism twice, once for read and once for write, and, > in future patches, we will use a second rolling buffer to handle bounce > buffering for content encryption. > > Signed-off-by: David Howells > cc: Jeff Layton > cc: netfs@lists.linux.dev > cc: linux-fsdevel@vger.kernel.org > --- > fs/netfs/Makefile | 1 + > fs/netfs/buffered_read.c | 119 ++++------------- > fs/netfs/direct_read.c | 14 +- > fs/netfs/direct_write.c | 10 +- > fs/netfs/internal.h | 4 - > fs/netfs/misc.c | 147 --------------------- > fs/netfs/objects.c | 2 +- > fs/netfs/read_pgpriv2.c | 32 ++--- > fs/netfs/read_retry.c | 2 +- > fs/netfs/rolling_buffer.c | 225 +++++++++++++++++++++++++++++++++ > fs/netfs/write_collect.c | 19 +-- > fs/netfs/write_issue.c | 26 ++-- > include/linux/netfs.h | 10 +- > include/linux/rolling_buffer.h | 61 +++++++++ > include/trace/events/netfs.h | 2 + > 15 files changed, 375 insertions(+), 299 deletions(-) > create mode 100644 fs/netfs/rolling_buffer.c > create mode 100644 include/linux/rolling_buffer.h > [...] > diff --git a/fs/netfs/direct_write.c b/fs/netfs/direct_write.c > index 88f2adfab75e..0722fb9919a3 100644 > --- a/fs/netfs/direct_write.c > +++ b/fs/netfs/direct_write.c > @@ -68,19 +68,19 @@ ssize_t netfs_unbuffered_write_iter_locked(struct kiocb *iocb, struct iov_iter * > * request. > */ > if (async || user_backed_iter(iter)) { > - n = netfs_extract_user_iter(iter, len, &wreq->iter, 0); > + n = netfs_extract_user_iter(iter, len, &wreq->buffer.iter, 0); > if (n < 0) { > ret = n; > goto out; > } > - wreq->direct_bv = (struct bio_vec *)wreq->iter.bvec; > + wreq->direct_bv = (struct bio_vec *)wreq->buffer.iter.bvec; > wreq->direct_bv_count = n; > wreq->direct_bv_unpin = iov_iter_extract_will_pin(iter); > } else { > - wreq->iter = *iter; > + wreq->buffer.iter = *iter; > } > > - wreq->io_iter = wreq->iter; > + wreq->buffer.iter = wreq->buffer.iter; Is this correct, an assignment to itself? > } > > __set_bit(NETFS_RREQ_USE_IO_ITER, &wreq->flags); > [...]