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 2A657C25B08 for ; Wed, 17 Aug 2022 04:33:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4C7438D0001; Wed, 17 Aug 2022 00:33:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 476EF6B0074; Wed, 17 Aug 2022 00:33:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 340148D0001; Wed, 17 Aug 2022 00:33:47 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 250246B0073 for ; Wed, 17 Aug 2022 00:33:47 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id CEE5880782 for ; Wed, 17 Aug 2022 04:33:46 +0000 (UTC) X-FDA: 79807816452.21.DE54EAD Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) by imf19.hostedemail.com (Postfix) with ESMTP id 773FF1A01A3 for ; Wed, 17 Aug 2022 04:33:46 +0000 (UTC) Received: by mail-lf1-f51.google.com with SMTP id o2so17590817lfb.1 for ; Tue, 16 Aug 2022 21:33:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc; bh=nOdb6n13ohDqgquF5+hz9jSYLtO6Hr9UX14Xr/YTGlM=; b=dMkCJ8QcXk8CCKs+JMzTMBHDLD4h16lKjhPfa818z1aMbkmqmpn4lSJ/hn0QuEWAWS OdymGqhTo4Pn/bNpk8llqrNNi6dl8VAXbfkDlgq0LGsfqFbAcRfU/QkVvvQTJ7XjPdlo G+V2u884J/ZowvVBoBep11BxqGF+P30pLFDrYUsxDKLvHcyrL3YTPIhXXvypH5+ZedHM Q6nLlNLv4ELt/1W812op/++Q7j7T/KiIOBtNGNFaXYckan6OxeLrFHGSmGqS9Sv/ONIM vOholq/pwx6EFwcprMgfhLQiGkgA1WhOigSaEZYsgkNRN8sM2DbUANkpN8czCaKsVb/N LnWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=nOdb6n13ohDqgquF5+hz9jSYLtO6Hr9UX14Xr/YTGlM=; b=kp9xRjavu9OB+E1+BfzgHvxcCdZB534omFK6S/3FDutfYy1Y5el4CinytrWGH/tFRj LU5r2btKNjFvnXtwe0Mv2UbRLXuZ9l2qADBub5Ubot3H0tGC1o5RcTPsL6N+yAnFKjMY N7wEzXlvo+nIAsSbNM4O3P+aswaRrObkB5/FzfdYVV2XSQJLezMZXyj9RQTkJ6hcq31l 0AgLO/iMykOetD9c3deRdPigOWmHV6LDiPRkmLQpG277JOhRnd7PlE7uS7iXFax4B1h4 O2XBAyBKii13hY1z2NjZG4GPlAE0g8R/NjbKPRoMkr8qgO1ZvIen6TnmHRRnkKVffU+S VM3Q== X-Gm-Message-State: ACgBeo0e/F5P3nmyMwfMSq5AOmXROv0xSR4StWqho+yNmjrTQuxsy+KZ 0ayrasHNjo4FKhD0eVPd+DILN9SmBzriuyhM6Zs= X-Google-Smtp-Source: AA6agR4ayOuxJuJF95sigIXKXvupZgqxuRi33BQPTzqVIVjNi8KVzdUB91zyQecU/E0l18dwY2r2S77NesDl86NyYpE= X-Received: by 2002:a05:6512:12c7:b0:48b:3bc4:10f4 with SMTP id p7-20020a05651212c700b0048b3bc410f4mr7766818lfg.411.1660710824597; Tue, 16 Aug 2022 21:33:44 -0700 (PDT) MIME-Version: 1.0 References: <20220816175246.42401-1-vishal.moola@gmail.com> <20220816175246.42401-6-vishal.moola@gmail.com> In-Reply-To: <20220816175246.42401-6-vishal.moola@gmail.com> From: Ryusuke Konishi Date: Wed, 17 Aug 2022 13:33:27 +0900 Message-ID: Subject: Re: [PATCH v2 5/7] nilfs2: Convert nilfs_find_uncommited_extent() to use filemap_get_folios_contig() To: "Vishal Moola (Oracle)" Cc: linux-fsdevel@vger.kernel.org, linux-btrfs@vger.kernel.org, linux-nilfs@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1660710826; a=rsa-sha256; cv=none; b=jIe/rsuCHak3wSwLKtx9Wc0QqTsKae+X7zX8jZ0RyA2nLys+e638fF0iIJou+ufOheFmdK Bws/6HpndO5ZIM4+f6zMiyNy383Pn/IgdhceoQwkFvo04ef2ACSP3CrhQyQyhF2ypPWrGG bxldN5PCw+7jHulir3OA9DayUnaYVlE= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=dMkCJ8Qc; spf=pass (imf19.hostedemail.com: domain of konishi.ryusuke@gmail.com designates 209.85.167.51 as permitted sender) smtp.mailfrom=konishi.ryusuke@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1660710826; 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=nOdb6n13ohDqgquF5+hz9jSYLtO6Hr9UX14Xr/YTGlM=; b=OOosahiAAek9goSpENNhlZg/cSqtXtD6bzyUIQ5yKRUmGLiaLbv5me9u79O1A9tGwlPyWB imMgm9c0T29BfKQA/ulkDhyXGr9prEhZFof1wNx53GeBP/SGL6UY0DTpGI/JHYAEdid6FI dTdfK//WUEekr3rXcfNrMo3ZPmbR2HQ= Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=dMkCJ8Qc; spf=pass (imf19.hostedemail.com: domain of konishi.ryusuke@gmail.com designates 209.85.167.51 as permitted sender) smtp.mailfrom=konishi.ryusuke@gmail.com; dmarc=pass (policy=none) header.from=gmail.com X-Rspam-User: X-Stat-Signature: 6fx9g93mjh7gwqkp31kmgbwy4g1adhuj X-Rspamd-Queue-Id: 773FF1A01A3 X-Rspamd-Server: rspam06 X-HE-Tag: 1660710826-876841 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: On Wed, Aug 17, 2022 at 2:54 AM Vishal Moola (Oracle) wrote: > > Converted function to use folios throughout. This is in preparation for > the removal of find_get_pages_contig(). Now also supports large folios. > > Also cleaned up an unnecessary if statement - pvec.pages[0]->index > index > will always evaluate to false, and filemap_get_folios_contig() returns 0 if > there is no folio found at index. > > Signed-off-by: Vishal Moola (Oracle) > --- > > v2: > - Fixed a warning regarding a now unused label "out" > - Reported-by: kernel test robot > --- > fs/nilfs2/page.c | 39 +++++++++++++++++---------------------- > 1 file changed, 17 insertions(+), 22 deletions(-) > > diff --git a/fs/nilfs2/page.c b/fs/nilfs2/page.c > index 3267e96c256c..14629e03d0da 100644 > --- a/fs/nilfs2/page.c > +++ b/fs/nilfs2/page.c > @@ -480,13 +480,13 @@ unsigned long nilfs_find_uncommitted_extent(struct inode *inode, > sector_t start_blk, > sector_t *blkoff) > { > - unsigned int i; > + unsigned int i, nr; > pgoff_t index; > unsigned int nblocks_in_page; > unsigned long length = 0; > sector_t b; > - struct pagevec pvec; > - struct page *page; > + struct folio_batch fbatch; > + struct folio *folio; > > if (inode->i_mapping->nrpages == 0) > return 0; > @@ -494,27 +494,24 @@ unsigned long nilfs_find_uncommitted_extent(struct inode *inode, > index = start_blk >> (PAGE_SHIFT - inode->i_blkbits); > nblocks_in_page = 1U << (PAGE_SHIFT - inode->i_blkbits); > > - pagevec_init(&pvec); > + folio_batch_init(&fbatch); > > repeat: > - pvec.nr = find_get_pages_contig(inode->i_mapping, index, PAGEVEC_SIZE, > - pvec.pages); > - if (pvec.nr == 0) > + nr = filemap_get_folios_contig(inode->i_mapping, &index, ULONG_MAX, > + &fbatch); > + if (nr == 0) > return length; > > - if (length > 0 && pvec.pages[0]->index > index) > - goto out; > - > - b = pvec.pages[0]->index << (PAGE_SHIFT - inode->i_blkbits); > + b = fbatch.folios[0]->index << (PAGE_SHIFT - inode->i_blkbits); > i = 0; > do { > - page = pvec.pages[i]; > + folio = fbatch.folios[i]; > > - lock_page(page); > - if (page_has_buffers(page)) { > + folio_lock(folio); > + if (folio_buffers(folio)) { > struct buffer_head *bh, *head; > > - bh = head = page_buffers(page); > + bh = head = folio_buffers(folio); > do { > if (b < start_blk) > continue; > @@ -532,18 +529,16 @@ unsigned long nilfs_find_uncommitted_extent(struct inode *inode, > > b += nblocks_in_page; Here, It looks like the block index "b" should be updated with the number of blocks in the folio because the loop is now per folio, not per page. Instead of replacing it with a calculation that uses folio_size(folio) or folio_shift(folio), I think it would be better to move the calculation of "b" inside the branch where the folio has buffers as follows: if (folio_buffers(folio)) { struct buffer_head *bh, *head; sector_t b; b = folio->index << (PAGE_SHIFT - inode->i_blkbits); bh = head = folio_buffers(folio); ... } else if (length > 0) { goto out_locked; } This way, we can remove calculations for the block index "b" outside the above part and the variable "nblocks_in_page" as well. Thanks, Ryusuke Konishi > } > - unlock_page(page); > + folio_unlock(folio); > > - } while (++i < pagevec_count(&pvec)); > + } while (++i < nr); > > - index = page->index + 1; > - pagevec_release(&pvec); > + folio_batch_release(&fbatch); > cond_resched(); > goto repeat; > > out_locked: > - unlock_page(page); > -out: > - pagevec_release(&pvec); > + folio_unlock(folio); > + folio_batch_release(&fbatch); > return length; > } > -- > 2.36.1 >