gfs2: Convert to release_folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Sun, 1 May 2022 03:49:17 +0000 (23:49 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Tue, 10 May 2022 03:12:33 +0000 (23:12 -0400)
Use a folio throughout gfs2_release_folio().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Bob Peterson <rpeterso@redhat.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
fs/gfs2/aops.c
fs/gfs2/inode.h
fs/gfs2/meta_io.c

index 3d6c5c5eb4f19d53afa98bd79e102ba3ccabad1b..95a674d70c04e59c3b47233cb7440bf174c02c2f 100644 (file)
@@ -691,38 +691,40 @@ out:
 }
 
 /**
- * gfs2_releasepage - free the metadata associated with a page
- * @page: the page that's being released
+ * gfs2_release_folio - free the metadata associated with a folio
+ * @folio: the folio that's being released
  * @gfp_mask: passed from Linux VFS, ignored by us
  *
- * Calls try_to_free_buffers() to free the buffers and put the page if the
+ * Calls try_to_free_buffers() to free the buffers and put the folio if the
  * buffers can be released.
  *
- * Returns: 1 if the page was put or else 0
+ * Returns: true if the folio was put or else false
  */
 
-int gfs2_releasepage(struct page *page, gfp_t gfp_mask)
+bool gfs2_release_folio(struct folio *folio, gfp_t gfp_mask)
 {
-       struct address_space *mapping = page->mapping;
+       struct address_space *mapping = folio->mapping;
        struct gfs2_sbd *sdp = gfs2_mapping2sbd(mapping);
        struct buffer_head *bh, *head;
        struct gfs2_bufdata *bd;
 
-       if (!page_has_buffers(page))
-               return 0;
+       head = folio_buffers(folio);
+       if (!head)
+               return false;
 
        /*
-        * From xfs_vm_releasepage: mm accommodates an old ext3 case where
-        * clean pages might not have had the dirty bit cleared.  Thus, it can
-        * send actual dirty pages to ->releasepage() via shrink_active_list().
+        * mm accommodates an old ext3 case where clean folios might
+        * not have had the dirty bit cleared.  Thus, it can send actual
+        * dirty folios to ->release_folio() via shrink_active_list().
         *
-        * As a workaround, we skip pages that contain dirty buffers below.
-        * Once ->releasepage isn't called on dirty pages anymore, we can warn
-        * on dirty buffers like we used to here again.
+        * As a workaround, we skip folios that contain dirty buffers
+        * below.  Once ->release_folio isn't called on dirty folios
+        * anymore, we can warn on dirty buffers like we used to here
+        * again.
         */
 
        gfs2_log_lock(sdp);
-       head = bh = page_buffers(page);
+       bh = head;
        do {
                if (atomic_read(&bh->b_count))
                        goto cannot_release;
@@ -732,9 +734,9 @@ int gfs2_releasepage(struct page *page, gfp_t gfp_mask)
                if (buffer_dirty(bh) || WARN_ON(buffer_pinned(bh)))
                        goto cannot_release;
                bh = bh->b_this_page;
-       } while(bh != head);
+       } while (bh != head);
 
-       head = bh = page_buffers(page);
+       bh = head;
        do {
                bd = bh->b_private;
                if (bd) {
@@ -755,11 +757,11 @@ int gfs2_releasepage(struct page *page, gfp_t gfp_mask)
        } while (bh != head);
        gfs2_log_unlock(sdp);
 
-       return try_to_free_buffers(page);
+       return try_to_free_buffers(&folio->page);
 
 cannot_release:
        gfs2_log_unlock(sdp);
-       return 0;
+       return false;
 }
 
 static const struct address_space_operations gfs2_aops = {
@@ -785,7 +787,7 @@ static const struct address_space_operations gfs2_jdata_aops = {
        .dirty_folio = jdata_dirty_folio,
        .bmap = gfs2_bmap,
        .invalidate_folio = gfs2_invalidate_folio,
-       .releasepage = gfs2_releasepage,
+       .release_folio = gfs2_release_folio,
        .is_partially_uptodate = block_is_partially_uptodate,
        .error_remove_page = generic_error_remove_page,
 };
index 7b2c1f390db741dcc617c5224471879e60002000..0264d514dda787283e8139bee1edd03201d923ea 100644 (file)
@@ -12,7 +12,7 @@
 #include <linux/mm.h>
 #include "util.h"
 
-extern int gfs2_releasepage(struct page *page, gfp_t gfp_mask);
+bool gfs2_release_folio(struct folio *folio, gfp_t gfp_mask);
 extern int gfs2_internal_read(struct gfs2_inode *ip,
                              char *buf, loff_t *pos, unsigned size);
 extern void gfs2_set_aops(struct inode *inode);
index d8bd1d48bd7897f3bd03563b5291542d17c2e4bf..868dcc71b581773a50324d5de3ed7987580bb087 100644 (file)
@@ -92,14 +92,14 @@ const struct address_space_operations gfs2_meta_aops = {
        .dirty_folio    = block_dirty_folio,
        .invalidate_folio = block_invalidate_folio,
        .writepage = gfs2_aspace_writepage,
-       .releasepage = gfs2_releasepage,
+       .release_folio = gfs2_release_folio,
 };
 
 const struct address_space_operations gfs2_rgrp_aops = {
        .dirty_folio    = block_dirty_folio,
        .invalidate_folio = block_invalidate_folio,
        .writepage = gfs2_aspace_writepage,
-       .releasepage = gfs2_releasepage,
+       .release_folio = gfs2_release_folio,
 };
 
 /**