]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
orangefs: Convert orangefs_writepage_locked() to take a folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 5 Mar 2025 20:47:29 +0000 (20:47 +0000)
committerChristian Brauner <brauner@kernel.org>
Thu, 6 Mar 2025 08:26:06 +0000 (09:26 +0100)
Both callers have a folio, pass it in and use it inside
orangefs_writepage_locked().  Removes a few hidden calls to
compound_head() and accesses to page->mapping.

Signed-off-by: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Link: https://lore.kernel.org/r/20250305204734.1475264-6-willy@infradead.org
Tested-by: Mike Marshall <hubcap@omnibond.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/orangefs/inode.c

index 4ad049d5cc9cd08c2a1bb0c9a1efffb0abcf3a5e..90db1d705fe80373ef1cb32f245e8f1fb2cef04d 100644 (file)
 #include "orangefs-kernel.h"
 #include "orangefs-bufmap.h"
 
-static int orangefs_writepage_locked(struct page *page,
-    struct writeback_control *wbc)
+static int orangefs_writepage_locked(struct folio *folio,
+               struct writeback_control *wbc)
 {
-       struct inode *inode = page->mapping->host;
+       struct inode *inode = folio->mapping->host;
        struct orangefs_write_range *wr = NULL;
        struct iov_iter iter;
        struct bio_vec bv;
@@ -27,11 +27,11 @@ static int orangefs_writepage_locked(struct page *page,
        ssize_t ret;
        loff_t len, off;
 
-       set_page_writeback(page);
+       folio_start_writeback(folio);
 
        len = i_size_read(inode);
-       if (PagePrivate(page)) {
-               wr = (struct orangefs_write_range *)page_private(page);
+       if (folio->private) {
+               wr = folio->private;
                WARN_ON(wr->pos >= len);
                off = wr->pos;
                if (off + wr->len > len)
@@ -40,27 +40,27 @@ static int orangefs_writepage_locked(struct page *page,
                        wlen = wr->len;
        } else {
                WARN_ON(1);
-               off = page_offset(page);
-               if (off + PAGE_SIZE > len)
+               off = folio_pos(folio);
+               wlen = folio_size(folio);
+
+               if (wlen > len - off)
                        wlen = len - off;
-               else
-                       wlen = PAGE_SIZE;
        }
        /* Should've been handled in orangefs_invalidate_folio. */
        WARN_ON(off == len || off + wlen > len);
 
        WARN_ON(wlen == 0);
-       bvec_set_page(&bv, page, wlen, off % PAGE_SIZE);
+       bvec_set_folio(&bv, folio, wlen, offset_in_folio(folio, off));
        iov_iter_bvec(&iter, ITER_SOURCE, &bv, 1, wlen);
 
        ret = wait_for_direct_io(ORANGEFS_IO_WRITE, inode, &off, &iter, wlen,
            len, wr, NULL, NULL);
        if (ret < 0) {
-               mapping_set_error(page->mapping, ret);
+               mapping_set_error(folio->mapping, ret);
        } else {
                ret = 0;
        }
-       kfree(detach_page_private(page));
+       kfree(folio_detach_private(folio));
        return ret;
 }
 
@@ -179,7 +179,7 @@ done:
                        orangefs_writepages_work(ow, wbc);
                        ow->npages = 0;
                }
-               ret = orangefs_writepage_locked(&folio->page, wbc);
+               ret = orangefs_writepage_locked(folio, wbc);
                mapping_set_error(folio->mapping, ret);
                folio_unlock(folio);
                folio_end_writeback(folio);
@@ -474,7 +474,7 @@ static int orangefs_launder_folio(struct folio *folio)
        };
        folio_wait_writeback(folio);
        if (folio_clear_dirty_for_io(folio)) {
-               r = orangefs_writepage_locked(&folio->page, &wbc);
+               r = orangefs_writepage_locked(folio, &wbc);
                folio_end_writeback(folio);
        }
        return r;