Skip to content

Commit e0887e0

Browse files
Matthew Wilcox (Oracle)Miklos Szeredi
authored andcommitted
fuse: Convert fuse_writepage_locked to take a folio
The one remaining caller of fuse_writepage_locked() already has a folio, so convert this function entirely. Saves a few calls to compound_head() but no attempt is made to support large folios in this patch. Signed-off-by: "Matthew Wilcox (Oracle)" <[email protected]> Signed-off-by: Miklos Szeredi <[email protected]>
1 parent e1c420a commit e0887e0

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

fs/fuse/file.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2040,26 +2040,26 @@ static void fuse_writepage_add_to_bucket(struct fuse_conn *fc,
20402040
rcu_read_unlock();
20412041
}
20422042

2043-
static int fuse_writepage_locked(struct page *page)
2043+
static int fuse_writepage_locked(struct folio *folio)
20442044
{
2045-
struct address_space *mapping = page->mapping;
2045+
struct address_space *mapping = folio->mapping;
20462046
struct inode *inode = mapping->host;
20472047
struct fuse_conn *fc = get_fuse_conn(inode);
20482048
struct fuse_inode *fi = get_fuse_inode(inode);
20492049
struct fuse_writepage_args *wpa;
20502050
struct fuse_args_pages *ap;
2051-
struct page *tmp_page;
2051+
struct folio *tmp_folio;
20522052
int error = -ENOMEM;
20532053

2054-
set_page_writeback(page);
2054+
folio_start_writeback(folio);
20552055

20562056
wpa = fuse_writepage_args_alloc();
20572057
if (!wpa)
20582058
goto err;
20592059
ap = &wpa->ia.ap;
20602060

2061-
tmp_page = alloc_page(GFP_NOFS | __GFP_HIGHMEM);
2062-
if (!tmp_page)
2061+
tmp_folio = folio_alloc(GFP_NOFS | __GFP_HIGHMEM, 0);
2062+
if (!tmp_folio)
20632063
goto err_free;
20642064

20652065
error = -EIO;
@@ -2068,39 +2068,39 @@ static int fuse_writepage_locked(struct page *page)
20682068
goto err_nofile;
20692069

20702070
fuse_writepage_add_to_bucket(fc, wpa);
2071-
fuse_write_args_fill(&wpa->ia, wpa->ia.ff, page_offset(page), 0);
2071+
fuse_write_args_fill(&wpa->ia, wpa->ia.ff, folio_pos(folio), 0);
20722072

2073-
copy_highpage(tmp_page, page);
2073+
folio_copy(tmp_folio, folio);
20742074
wpa->ia.write.in.write_flags |= FUSE_WRITE_CACHE;
20752075
wpa->next = NULL;
20762076
ap->args.in_pages = true;
20772077
ap->num_pages = 1;
2078-
ap->pages[0] = tmp_page;
2078+
ap->pages[0] = &tmp_folio->page;
20792079
ap->descs[0].offset = 0;
20802080
ap->descs[0].length = PAGE_SIZE;
20812081
ap->args.end = fuse_writepage_end;
20822082
wpa->inode = inode;
20832083

20842084
inc_wb_stat(&inode_to_bdi(inode)->wb, WB_WRITEBACK);
2085-
inc_node_page_state(tmp_page, NR_WRITEBACK_TEMP);
2085+
node_stat_add_folio(tmp_folio, NR_WRITEBACK_TEMP);
20862086

20872087
spin_lock(&fi->lock);
20882088
tree_insert(&fi->writepages, wpa);
20892089
list_add_tail(&wpa->queue_entry, &fi->queued_writes);
20902090
fuse_flush_writepages(inode);
20912091
spin_unlock(&fi->lock);
20922092

2093-
end_page_writeback(page);
2093+
folio_end_writeback(folio);
20942094

20952095
return 0;
20962096

20972097
err_nofile:
2098-
__free_page(tmp_page);
2098+
folio_put(tmp_folio);
20992099
err_free:
21002100
kfree(wpa);
21012101
err:
2102-
mapping_set_error(page->mapping, error);
2103-
end_page_writeback(page);
2102+
mapping_set_error(folio->mapping, error);
2103+
folio_end_writeback(folio);
21042104
return error;
21052105
}
21062106

@@ -2466,7 +2466,7 @@ static int fuse_launder_folio(struct folio *folio)
24662466

24672467
/* Serialize with pending writeback for the same page */
24682468
fuse_wait_on_page_writeback(inode, folio->index);
2469-
err = fuse_writepage_locked(&folio->page);
2469+
err = fuse_writepage_locked(folio);
24702470
if (!err)
24712471
fuse_wait_on_page_writeback(inode, folio->index);
24722472
}

0 commit comments

Comments
 (0)