Skip to content

Commit 88a59bd

Browse files
Matthew Wilcox (Oracle)brauner
authored andcommitted
ceph: Use a folio in ceph_page_mkwrite()
Convert the passed page to a folio and use it throughout ceph_page_mkwrite(). Removes the last call to page_mkwrite_check_truncate(), the last call to offset_in_thp() and one of the last calls to thp_size(). Saves a few calls to compound_head(). Signed-off-by: "Matthew Wilcox (Oracle)" <willy@infradead.org> Link: https://lore.kernel.org/r/20250217185119.430193-3-willy@infradead.org Tested-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com> Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com> Signed-off-by: Christian Brauner <brauner@kernel.org>
1 parent 19a2881 commit 88a59bd

1 file changed

Lines changed: 13 additions & 13 deletions

File tree

fs/ceph/addr.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2042,8 +2042,8 @@ static vm_fault_t ceph_page_mkwrite(struct vm_fault *vmf)
20422042
struct ceph_inode_info *ci = ceph_inode(inode);
20432043
struct ceph_file_info *fi = vma->vm_file->private_data;
20442044
struct ceph_cap_flush *prealloc_cf;
2045-
struct page *page = vmf->page;
2046-
loff_t off = page_offset(page);
2045+
struct folio *folio = page_folio(vmf->page);
2046+
loff_t off = folio_pos(folio);
20472047
loff_t size = i_size_read(inode);
20482048
size_t len;
20492049
int want, got, err;
@@ -2060,10 +2060,10 @@ static vm_fault_t ceph_page_mkwrite(struct vm_fault *vmf)
20602060
sb_start_pagefault(inode->i_sb);
20612061
ceph_block_sigs(&oldset);
20622062

2063-
if (off + thp_size(page) <= size)
2064-
len = thp_size(page);
2063+
if (off + folio_size(folio) <= size)
2064+
len = folio_size(folio);
20652065
else
2066-
len = offset_in_thp(page, size);
2066+
len = offset_in_folio(folio, size);
20672067

20682068
doutc(cl, "%llx.%llx %llu~%zd getting caps i_size %llu\n",
20692069
ceph_vinop(inode), off, len, size);
@@ -2080,30 +2080,30 @@ static vm_fault_t ceph_page_mkwrite(struct vm_fault *vmf)
20802080
doutc(cl, "%llx.%llx %llu~%zd got cap refs on %s\n", ceph_vinop(inode),
20812081
off, len, ceph_cap_string(got));
20822082

2083-
/* Update time before taking page lock */
2083+
/* Update time before taking folio lock */
20842084
file_update_time(vma->vm_file);
20852085
inode_inc_iversion_raw(inode);
20862086

20872087
do {
20882088
struct ceph_snap_context *snapc;
20892089

2090-
lock_page(page);
2090+
folio_lock(folio);
20912091

2092-
if (page_mkwrite_check_truncate(page, inode) < 0) {
2093-
unlock_page(page);
2092+
if (folio_mkwrite_check_truncate(folio, inode) < 0) {
2093+
folio_unlock(folio);
20942094
ret = VM_FAULT_NOPAGE;
20952095
break;
20962096
}
20972097

2098-
snapc = ceph_find_incompatible(page);
2098+
snapc = ceph_find_incompatible(&folio->page);
20992099
if (!snapc) {
2100-
/* success. we'll keep the page locked. */
2101-
set_page_dirty(page);
2100+
/* success. we'll keep the folio locked. */
2101+
folio_mark_dirty(folio);
21022102
ret = VM_FAULT_LOCKED;
21032103
break;
21042104
}
21052105

2106-
unlock_page(page);
2106+
folio_unlock(folio);
21072107

21082108
if (IS_ERR(snapc)) {
21092109
ret = VM_FAULT_SIGBUS;

0 commit comments

Comments
 (0)