All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
	linux-fsdevel@vger.kernel.org, gfs2@lists.linux.dev,
	linux-nilfs@vger.kernel.org,
	linux-ntfs-dev@lists.sourceforge.net, ntfs3@lists.linux.dev,
	ocfs2-devel@lists.linux.dev, reiserfs-devel@vger.kernel.org,
	linux-ext4@vger.kernel.org, Pankaj Raghav <p.raghav@samsung.com>
Subject: [PATCH 05/26] gfs2: Convert inode unstuffing to use a folio
Date: Tue, 19 Sep 2023 05:51:14 +0100	[thread overview]
Message-ID: <20230919045135.3635437-6-willy@infradead.org> (raw)
In-Reply-To: <20230919045135.3635437-1-willy@infradead.org>

Use the folio APIs, removing numerous hidden calls to compound_head().
Also remove the stale comment about the page being looked up if it's NULL.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
---
 fs/gfs2/bmap.c | 48 +++++++++++++++++++++++-------------------------
 1 file changed, 23 insertions(+), 25 deletions(-)

diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index ef7017fb6951..247d2c16593c 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -43,53 +43,51 @@ struct metapath {
 static int punch_hole(struct gfs2_inode *ip, u64 offset, u64 length);
 
 /**
- * gfs2_unstuffer_page - unstuff a stuffed inode into a block cached by a page
+ * gfs2_unstuffer_folio - unstuff a stuffed inode into a block cached by a folio
  * @ip: the inode
  * @dibh: the dinode buffer
  * @block: the block number that was allocated
- * @page: The (optional) page. This is looked up if @page is NULL
+ * @folio: The folio.
  *
  * Returns: errno
  */
-
-static int gfs2_unstuffer_page(struct gfs2_inode *ip, struct buffer_head *dibh,
-			       u64 block, struct page *page)
+static int gfs2_unstuffer_folio(struct gfs2_inode *ip, struct buffer_head *dibh,
+			       u64 block, struct folio *folio)
 {
 	struct inode *inode = &ip->i_inode;
 
-	if (!PageUptodate(page)) {
-		void *kaddr = kmap(page);
+	if (!folio_test_uptodate(folio)) {
+		void *kaddr = kmap_local_folio(folio, 0);
 		u64 dsize = i_size_read(inode);
  
 		memcpy(kaddr, dibh->b_data + sizeof(struct gfs2_dinode), dsize);
-		memset(kaddr + dsize, 0, PAGE_SIZE - dsize);
-		kunmap(page);
+		memset(kaddr + dsize, 0, folio_size(folio) - dsize);
+		kunmap_local(kaddr);
 
-		SetPageUptodate(page);
+		folio_mark_uptodate(folio);
 	}
 
 	if (gfs2_is_jdata(ip)) {
-		struct buffer_head *bh;
+		struct buffer_head *bh = folio_buffers(folio);
 
-		if (!page_has_buffers(page))
-			create_empty_buffers(page, BIT(inode->i_blkbits),
-					     BIT(BH_Uptodate));
+		if (!bh)
+			bh = folio_create_empty_buffers(folio,
+				BIT(inode->i_blkbits), BIT(BH_Uptodate));
 
-		bh = page_buffers(page);
 		if (!buffer_mapped(bh))
 			map_bh(bh, inode->i_sb, block);
 
 		set_buffer_uptodate(bh);
 		gfs2_trans_add_data(ip->i_gl, bh);
 	} else {
-		set_page_dirty(page);
+		folio_mark_dirty(folio);
 		gfs2_ordered_add_inode(ip);
 	}
 
 	return 0;
 }
 
-static int __gfs2_unstuff_inode(struct gfs2_inode *ip, struct page *page)
+static int __gfs2_unstuff_inode(struct gfs2_inode *ip, struct folio *folio)
 {
 	struct buffer_head *bh, *dibh;
 	struct gfs2_dinode *di;
@@ -118,7 +116,7 @@ static int __gfs2_unstuff_inode(struct gfs2_inode *ip, struct page *page)
 					      dibh, sizeof(struct gfs2_dinode));
 			brelse(bh);
 		} else {
-			error = gfs2_unstuffer_page(ip, dibh, block, page);
+			error = gfs2_unstuffer_folio(ip, dibh, block, folio);
 			if (error)
 				goto out_brelse;
 		}
@@ -157,17 +155,17 @@ static int __gfs2_unstuff_inode(struct gfs2_inode *ip, struct page *page)
 int gfs2_unstuff_dinode(struct gfs2_inode *ip)
 {
 	struct inode *inode = &ip->i_inode;
-	struct page *page;
+	struct folio *folio;
 	int error;
 
 	down_write(&ip->i_rw_mutex);
-	page = grab_cache_page(inode->i_mapping, 0);
-	error = -ENOMEM;
-	if (!page)
+	folio = filemap_grab_folio(inode->i_mapping, 0);
+	error = PTR_ERR(folio);
+	if (IS_ERR(folio))
 		goto out;
-	error = __gfs2_unstuff_inode(ip, page);
-	unlock_page(page);
-	put_page(page);
+	error = __gfs2_unstuff_inode(ip, folio);
+	folio_unlock(folio);
+	folio_put(folio);
 out:
 	up_write(&ip->i_rw_mutex);
 	return error;
-- 
2.40.1


WARNING: multiple messages have this Message-ID (diff)
From: "Matthew Wilcox (Oracle)" <willy-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
To: Andrew Morton <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
Cc: "Matthew Wilcox (Oracle)"
	<willy-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
	linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	gfs2-cunTk1MwBs/YUNznpcFYbw@public.gmane.org,
	linux-nilfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-ntfs-dev-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
	ntfs3-cunTk1MwBs/YUNznpcFYbw@public.gmane.org,
	ocfs2-devel-cunTk1MwBs/YUNznpcFYbw@public.gmane.org,
	reiserfs-devel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-ext4-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Pankaj Raghav <p.raghav-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
Subject: [PATCH 05/26] gfs2: Convert inode unstuffing to use a folio
Date: Tue, 19 Sep 2023 05:51:14 +0100	[thread overview]
Message-ID: <20230919045135.3635437-6-willy@infradead.org> (raw)
In-Reply-To: <20230919045135.3635437-1-willy-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>

Use the folio APIs, removing numerous hidden calls to compound_head().
Also remove the stale comment about the page being looked up if it's NULL.

Signed-off-by: Matthew Wilcox (Oracle) <willy-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
---
 fs/gfs2/bmap.c | 48 +++++++++++++++++++++++-------------------------
 1 file changed, 23 insertions(+), 25 deletions(-)

diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index ef7017fb6951..247d2c16593c 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -43,53 +43,51 @@ struct metapath {
 static int punch_hole(struct gfs2_inode *ip, u64 offset, u64 length);
 
 /**
- * gfs2_unstuffer_page - unstuff a stuffed inode into a block cached by a page
+ * gfs2_unstuffer_folio - unstuff a stuffed inode into a block cached by a folio
  * @ip: the inode
  * @dibh: the dinode buffer
  * @block: the block number that was allocated
- * @page: The (optional) page. This is looked up if @page is NULL
+ * @folio: The folio.
  *
  * Returns: errno
  */
-
-static int gfs2_unstuffer_page(struct gfs2_inode *ip, struct buffer_head *dibh,
-			       u64 block, struct page *page)
+static int gfs2_unstuffer_folio(struct gfs2_inode *ip, struct buffer_head *dibh,
+			       u64 block, struct folio *folio)
 {
 	struct inode *inode = &ip->i_inode;
 
-	if (!PageUptodate(page)) {
-		void *kaddr = kmap(page);
+	if (!folio_test_uptodate(folio)) {
+		void *kaddr = kmap_local_folio(folio, 0);
 		u64 dsize = i_size_read(inode);
  
 		memcpy(kaddr, dibh->b_data + sizeof(struct gfs2_dinode), dsize);
-		memset(kaddr + dsize, 0, PAGE_SIZE - dsize);
-		kunmap(page);
+		memset(kaddr + dsize, 0, folio_size(folio) - dsize);
+		kunmap_local(kaddr);
 
-		SetPageUptodate(page);
+		folio_mark_uptodate(folio);
 	}
 
 	if (gfs2_is_jdata(ip)) {
-		struct buffer_head *bh;
+		struct buffer_head *bh = folio_buffers(folio);
 
-		if (!page_has_buffers(page))
-			create_empty_buffers(page, BIT(inode->i_blkbits),
-					     BIT(BH_Uptodate));
+		if (!bh)
+			bh = folio_create_empty_buffers(folio,
+				BIT(inode->i_blkbits), BIT(BH_Uptodate));
 
-		bh = page_buffers(page);
 		if (!buffer_mapped(bh))
 			map_bh(bh, inode->i_sb, block);
 
 		set_buffer_uptodate(bh);
 		gfs2_trans_add_data(ip->i_gl, bh);
 	} else {
-		set_page_dirty(page);
+		folio_mark_dirty(folio);
 		gfs2_ordered_add_inode(ip);
 	}
 
 	return 0;
 }
 
-static int __gfs2_unstuff_inode(struct gfs2_inode *ip, struct page *page)
+static int __gfs2_unstuff_inode(struct gfs2_inode *ip, struct folio *folio)
 {
 	struct buffer_head *bh, *dibh;
 	struct gfs2_dinode *di;
@@ -118,7 +116,7 @@ static int __gfs2_unstuff_inode(struct gfs2_inode *ip, struct page *page)
 					      dibh, sizeof(struct gfs2_dinode));
 			brelse(bh);
 		} else {
-			error = gfs2_unstuffer_page(ip, dibh, block, page);
+			error = gfs2_unstuffer_folio(ip, dibh, block, folio);
 			if (error)
 				goto out_brelse;
 		}
@@ -157,17 +155,17 @@ static int __gfs2_unstuff_inode(struct gfs2_inode *ip, struct page *page)
 int gfs2_unstuff_dinode(struct gfs2_inode *ip)
 {
 	struct inode *inode = &ip->i_inode;
-	struct page *page;
+	struct folio *folio;
 	int error;
 
 	down_write(&ip->i_rw_mutex);
-	page = grab_cache_page(inode->i_mapping, 0);
-	error = -ENOMEM;
-	if (!page)
+	folio = filemap_grab_folio(inode->i_mapping, 0);
+	error = PTR_ERR(folio);
+	if (IS_ERR(folio))
 		goto out;
-	error = __gfs2_unstuff_inode(ip, page);
-	unlock_page(page);
-	put_page(page);
+	error = __gfs2_unstuff_inode(ip, folio);
+	folio_unlock(folio);
+	folio_put(folio);
 out:
 	up_write(&ip->i_rw_mutex);
 	return error;
-- 
2.40.1


  parent reply	other threads:[~2023-09-19  4:51 UTC|newest]

Thread overview: 76+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-19  4:51 [PATCH 00/26] Finish the create_empty_buffers() transition Matthew Wilcox (Oracle)
2023-09-19  4:51 ` [PATCH 01/26] buffer: Make folio_create_empty_buffers() return a buffer_head Matthew Wilcox (Oracle)
     [not found]   ` <CGME20230920093952eucas1p1f37c688dc553d6a85882cae29861a870@eucas1p1.samsung.com>
2023-09-20  9:39     ` Pankaj Raghav
2023-09-20  9:39       ` Pankaj Raghav
2023-09-19  4:51 ` [PATCH 02/26] mpage: Convert map_buffer_to_folio() to folio_create_empty_buffers() Matthew Wilcox (Oracle)
     [not found]   ` <CGME20230920095447eucas1p2fee0541ad835331ff6b4c5143122c341@eucas1p2.samsung.com>
2023-09-20  9:54     ` Pankaj Raghav
2023-09-20  9:54       ` Pankaj Raghav
2023-09-19  4:51 ` [PATCH 03/26] ext4: Convert to folio_create_empty_buffers Matthew Wilcox (Oracle)
     [not found]   ` <CGME20230920100012eucas1p1f44530cfdd1ff8ed668bfe0c088d31ce@eucas1p1.samsung.com>
2023-09-20 10:00     ` Pankaj Raghav
2023-09-20 10:00       ` Pankaj Raghav
2023-09-19  4:51 ` [PATCH 04/26] buffer: Add get_nth_bh() Matthew Wilcox (Oracle)
2023-09-19  4:51   ` Matthew Wilcox (Oracle)
2023-09-20  3:40   ` Ryusuke Konishi
2023-09-20  3:40     ` Ryusuke Konishi
2023-09-19  4:51 ` Matthew Wilcox (Oracle) [this message]
2023-09-19  4:51   ` [PATCH 05/26] gfs2: Convert inode unstuffing to use a folio Matthew Wilcox (Oracle)
2023-09-19 22:28   ` Andreas Gruenbacher
2023-09-19 22:28     ` Andreas Gruenbacher
2023-09-19  4:51 ` [PATCH 06/26] gfs2: Convert gfs2_getbuf() to folios Matthew Wilcox (Oracle)
2023-09-19  4:51   ` Matthew Wilcox (Oracle)
2023-09-19 22:34   ` Andreas Gruenbacher
2023-09-19 22:34     ` Andreas Gruenbacher
2023-09-19  4:51 ` [PATCH 07/26] gfs2; Convert gfs2_getjdatabuf to use a folio Matthew Wilcox (Oracle)
2023-09-19 22:27   ` Andreas Gruenbacher
2023-09-19 22:27     ` Andreas Gruenbacher
2023-09-20  3:11     ` Matthew Wilcox
2023-09-20  3:11       ` Matthew Wilcox
2023-09-19  4:51 ` [PATCH 08/26] gfs2: Convert gfs2_write_buf_to_page() " Matthew Wilcox (Oracle)
2023-09-19  4:51   ` Matthew Wilcox (Oracle)
2023-09-19 22:32   ` Andreas Gruenbacher
2023-09-19 22:32     ` Andreas Gruenbacher
2023-09-19  4:51 ` [PATCH 09/26] nilfs2: Convert nilfs_mdt_freeze_buffer " Matthew Wilcox (Oracle)
2023-09-19  4:51   ` Matthew Wilcox (Oracle)
2023-09-20  3:42   ` Ryusuke Konishi
2023-09-20  3:42     ` Ryusuke Konishi
2023-09-19  4:51 ` [PATCH 10/26] nilfs2: Convert nilfs_grab_buffer() " Matthew Wilcox (Oracle)
2023-09-20  4:13   ` Ryusuke Konishi
2023-09-20  4:13     ` Ryusuke Konishi
2023-09-19  4:51 ` [PATCH 11/26] nilfs2: Convert nilfs_copy_page() to nilfs_copy_folio() Matthew Wilcox (Oracle)
2023-09-19 13:01   ` Ryusuke Konishi
2023-09-19 13:01     ` Ryusuke Konishi
2023-09-19 13:06     ` Matthew Wilcox
2023-09-19 13:06       ` Matthew Wilcox
2023-09-19 18:59   ` kernel test robot
2023-09-19 18:59     ` kernel test robot
2023-09-20  5:47   ` Ryusuke Konishi
2023-09-20  5:47     ` Ryusuke Konishi
2023-09-19  4:51 ` [PATCH 12/26] nilfs2: Convert nilfs_mdt_forget_block() to use a folio Matthew Wilcox (Oracle)
2023-09-20  7:25   ` Ryusuke Konishi
2023-09-20  7:25     ` Ryusuke Konishi
2023-09-19  4:51 ` [PATCH 13/26] nilfs2: Convert nilfs_mdt_get_frozen_buffer " Matthew Wilcox (Oracle)
2023-09-19  4:51   ` Matthew Wilcox (Oracle)
2023-09-20  8:07   ` Ryusuke Konishi
2023-09-20  8:07     ` Ryusuke Konishi
2023-09-19  4:51 ` [PATCH 14/26] nilfs2: Remove nilfs_page_get_nth_block Matthew Wilcox (Oracle)
2023-09-20  8:15   ` Ryusuke Konishi
2023-09-20  8:15     ` Ryusuke Konishi
2023-09-19  4:51 ` [PATCH 15/26] nilfs2: Convert nilfs_lookup_dirty_data_buffers to use folio_create_empty_buffers Matthew Wilcox (Oracle)
2023-09-20 10:01   ` Ryusuke Konishi
2023-09-20 10:01     ` Ryusuke Konishi
2023-09-19  4:51 ` [PATCH 16/26] ntfs: Convert ntfs_read_block() to use a folio Matthew Wilcox (Oracle)
2023-09-19  4:51 ` [PATCH 17/26] ntfs: Convert ntfs_writepage " Matthew Wilcox (Oracle)
2023-09-19  4:51   ` Matthew Wilcox (Oracle)
2023-09-19  4:51 ` [PATCH 18/26] ntfs: Convert ntfs_prepare_pages_for_non_resident_write() to folios Matthew Wilcox (Oracle)
2023-09-19  4:51 ` [PATCH 19/26] ntfs3: Convert ntfs_zero_range() to use a folio Matthew Wilcox (Oracle)
2023-09-19  4:51 ` [PATCH 20/26] ocfs2: Convert ocfs2_map_page_blocks " Matthew Wilcox (Oracle)
2023-09-19  4:51 ` [PATCH 21/26] reiserfs: Convert writepage " Matthew Wilcox (Oracle)
2023-09-19  4:51   ` Matthew Wilcox (Oracle)
2023-09-19  4:51 ` [PATCH 22/26] ufs: Add ufs_get_locked_folio and ufs_put_locked_folio Matthew Wilcox (Oracle)
2023-09-19  4:51   ` Matthew Wilcox (Oracle)
2023-09-19  4:51 ` [PATCH 23/26] ufs: Use ufs_get_locked_folio() in ufs_alloc_lastblock() Matthew Wilcox (Oracle)
2023-09-19  4:51   ` Matthew Wilcox (Oracle)
2023-09-19  4:51 ` [PATCH 24/26] ufs; Convert ufs_change_blocknr() to use folios Matthew Wilcox (Oracle)
2023-09-19  4:51   ` Matthew Wilcox (Oracle)
2023-09-19  4:51 ` [PATCH 25/26] ufs: Remove ufs_get_locked_page() Matthew Wilcox (Oracle)
2023-09-19  4:51 ` [PATCH 26/26] buffer: Remove folio_create_empty_buffers() Matthew Wilcox (Oracle)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230919045135.3635437-6-willy@infradead.org \
    --to=willy@infradead.org \
    --cc=akpm@linux-foundation.org \
    --cc=gfs2@lists.linux.dev \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-nilfs@vger.kernel.org \
    --cc=linux-ntfs-dev@lists.sourceforge.net \
    --cc=ntfs3@lists.linux.dev \
    --cc=ocfs2-devel@lists.linux.dev \
    --cc=p.raghav@samsung.com \
    --cc=reiserfs-devel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.