fuse: convert fuse_page_mkwrite to use folios
authorJosef Bacik <josef@toxicpanda.com>
Mon, 30 Sep 2024 13:45:12 +0000 (09:45 -0400)
committerMiklos Szeredi <mszeredi@redhat.com>
Fri, 25 Oct 2024 15:05:49 +0000 (17:05 +0200)
Convert this to grab the folio directly, and update all the helpers to
use the folio related functions.

Reviewed-by: Joanne Koong <joannelkoong@gmail.com>
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/fuse/file.c

index 3e9a88af917c8088376e5f4e65973300ffad2205..add051e4ad308f5d00f8d980199298d0f97a2bfd 100644 (file)
@@ -483,6 +483,16 @@ static void fuse_wait_on_page_writeback(struct inode *inode, pgoff_t index)
        wait_event(fi->page_waitq, !fuse_page_is_writeback(inode, index));
 }
 
+static void fuse_wait_on_folio_writeback(struct inode *inode,
+                                        struct folio *folio)
+{
+       struct fuse_inode *fi = get_fuse_inode(inode);
+       pgoff_t last = folio_next_index(folio) - 1;
+
+       wait_event(fi->page_waitq,
+                  !fuse_range_is_writeback(inode, folio_index(folio), last));
+}
+
 /*
  * Wait for all pending writepages on the inode to finish.
  *
@@ -2558,17 +2568,17 @@ static void fuse_vma_close(struct vm_area_struct *vma)
  */
 static vm_fault_t fuse_page_mkwrite(struct vm_fault *vmf)
 {
-       struct page *page = vmf->page;
+       struct folio *folio = page_folio(vmf->page);
        struct inode *inode = file_inode(vmf->vma->vm_file);
 
        file_update_time(vmf->vma->vm_file);
-       lock_page(page);
-       if (page->mapping != inode->i_mapping) {
-               unlock_page(page);
+       folio_lock(folio);
+       if (folio->mapping != inode->i_mapping) {
+               folio_unlock(folio);
                return VM_FAULT_NOPAGE;
        }
 
-       fuse_wait_on_page_writeback(inode, page->index);
+       fuse_wait_on_folio_writeback(inode, folio);
        return VM_FAULT_LOCKED;
 }