From patchwork Mon Feb 17 18:51:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox \(Oracle\)" X-Patchwork-Id: 865968 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 26FA7237708; Mon, 17 Feb 2025 18:51:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818287; cv=none; b=dFAMUNQS1Zz9EA3oKD/q47FPDqqOwoWrFpRfI+sOzQvcq8TtaOVibtQJH4A1s1IFl4tvh4PU6ouHgmPFywRd5eLzJA4Uh5Zf5FtX2woEitBc625f1XVpNUKdFwl+J5np+zYDZVU4xUb7VyhTnhWmUvcs2ZWKvObvxsEKQQJWuDc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818287; c=relaxed/simple; bh=/aZ9KxDO0+CT55cwnMECln9jnRuyUJUkGYCOCvBjWvs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VNgvYEOU6BM2dwpauJ9dOM7TH990uhegTfhY6No9oN32TTKe95x+Edop6SbjZm4aZbTOtlb35mOxv1gNpzR9mUcy8+C/LzEYDuC/B24rWlbwBvmUarWL2iJPPRRcaBthko9JgD43Jw3Z9TbUAM4V3ONgDLUl87apno+woeTAbaM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=WjHNGbd+; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="WjHNGbd+" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=43YiqePgIAjXaPnBKT44VEq/hCrHaFMvycXoABjek6Q=; b=WjHNGbd+g2rGOaD0RYrT/iut09 HW4vRxuYWprDjZxJN8FVotFeMct8SwsKXGL9vdqYHbknOqZy3Q3v5fLy95ZeREZDBv6/favfr330E /NHBpUC3niFQKF68fYwujX936RSNEHih/Vp00O/0KU5QAKjHgulaeyZQwW6V+Hwx/9mlvADX4j13Z U1HQ/NsE9Z707mEfhPd5AOPaRzwcMbXZ1X2i4pjX2VliZ5+4wFcHcVcT+F3RRrA8A/r7tQRd64F6f OMij92q76sbh7o05LEMSGxarbGdeU0GLEbsMsd1l3ynJsAV5L81Cc9GCWRnc0B/UZlxaXiHdy6E9j 5ppacodg==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tk6DB-00000001nvc-0rmG; Mon, 17 Feb 2025 18:51:21 +0000 From: "Matthew Wilcox (Oracle)" To: Viacheslav Dubeyko Cc: "Matthew Wilcox (Oracle)" , ceph-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, David Howells Subject: [PATCH v3 1/9] ceph: Remove ceph_writepage() Date: Mon, 17 Feb 2025 18:51:09 +0000 Message-ID: <20250217185119.430193-2-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217185119.430193-1-willy@infradead.org> References: <20250217185119.430193-1-willy@infradead.org> Precedence: bulk X-Mailing-List: ceph-devel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Ceph already has a writepages operation which is preferred over writepage in all situations except for page migration. By adding a migrate_folio operation, there will be no situations in which ->writepage should be called. filemap_migrate_folio() is an appropriate operation to use because the ceph data stored in folio->private does not contain any reference to the memory address of the folio. Signed-off-by: Matthew Wilcox (Oracle) --- fs/ceph/addr.c | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index f4e43fe5bb5e..200dca1ff2d6 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -862,32 +862,6 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc) return err; } -static int ceph_writepage(struct page *page, struct writeback_control *wbc) -{ - int err; - struct inode *inode = page->mapping->host; - BUG_ON(!inode); - ihold(inode); - - if (wbc->sync_mode == WB_SYNC_NONE && - ceph_inode_to_fs_client(inode)->write_congested) { - redirty_page_for_writepage(wbc, page); - return AOP_WRITEPAGE_ACTIVATE; - } - - folio_wait_private_2(page_folio(page)); /* [DEPRECATED] */ - - err = writepage_nounlock(page, wbc); - if (err == -ERESTARTSYS) { - /* direct memory reclaimer was killed by SIGKILL. return 0 - * to prevent caller from setting mapping/page error */ - err = 0; - } - unlock_page(page); - iput(inode); - return err; -} - /* * async writeback completion handler. * @@ -1954,7 +1928,6 @@ static int ceph_write_end(struct file *file, struct address_space *mapping, const struct address_space_operations ceph_aops = { .read_folio = netfs_read_folio, .readahead = netfs_readahead, - .writepage = ceph_writepage, .writepages = ceph_writepages_start, .write_begin = ceph_write_begin, .write_end = ceph_write_end, @@ -1962,6 +1935,7 @@ const struct address_space_operations ceph_aops = { .invalidate_folio = ceph_invalidate_folio, .release_folio = netfs_release_folio, .direct_IO = noop_direct_IO, + .migrate_folio = filemap_migrate_folio, }; static void ceph_block_sigs(sigset_t *oldset) From patchwork Mon Feb 17 18:51:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox \(Oracle\)" X-Patchwork-Id: 866132 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D7ADC239068; Mon, 17 Feb 2025 18:51:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818296; cv=none; b=T8kbS1EqoacYlFUH7SpM1me/jGEH05tjXp/A/nQvvm6xI7uj17id25bg4L1cZxaa9ruA7MYdubqhgfdJreQKeSWHvo89/4WHL9tXJTboTtuR0JgZlIa2clNvVV1/1alFJW7D6pYvQ0fJqADk2t7JPiCsQOqQILX4Kk7SHDRg9QI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818296; c=relaxed/simple; bh=B/3q1PuA3g2mfK/rumE0qLYuwt/N5QhCu3ARKSg7OrM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nzYYlZryC3EHILo29bs3Sdp4x1FL/xx4z7+sOHzFFCsMqxN7bb4tbH0RVgLntoHKe+KbSBGceJLh0vGSN44zn+DIS8BaICE3FkWhuP+AY3Ont6sY8uBi2Pm1BslAfCgA56ph+MejELRPGpcFupz68NovgFa75cnRMgK7NokFA1Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=mLxpS4rI; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="mLxpS4rI" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=jYKZ4Jkgvk1KBHEHPR95FonCX1ihPxFnk2t5aEejb5Q=; b=mLxpS4rIBevnl8DM9AEmX1pBoF eLnaYeXiUOAx8InEbxlFt1SGovx4tPlFRpe9snhq1elNvn+Ctc5QN+97oGHnl8+xBBJJ1NfEO1RUN oOXDLXh9dduQ5UnXbrS/4LVEH5pD1uXhS1Dz7uLMLj9Vg0tQT2Nb+f9zL/RIzEyE2Bv34n5hcqG1S 3C4n8+K1yVPTrtrDLTNj8LyihZd+4cGhl7FW16ljY4x+Md41Qz6c6zNWNc6vcmP6eoiL5RIUcspNX DpWLNWbuk/CF6PO8O7sDcXdSL4NfBySaY+GBThBrI21x8pJ1zamtiMbqb++OFtLzSUQr+aXUdp6Xb /UykfwQg==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tk6DB-00000001nve-1Fo0; Mon, 17 Feb 2025 18:51:21 +0000 From: "Matthew Wilcox (Oracle)" To: Viacheslav Dubeyko Cc: "Matthew Wilcox (Oracle)" , ceph-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, David Howells Subject: [PATCH v3 2/9] ceph: Use a folio in ceph_page_mkwrite() Date: Mon, 17 Feb 2025 18:51:10 +0000 Message-ID: <20250217185119.430193-3-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217185119.430193-1-willy@infradead.org> References: <20250217185119.430193-1-willy@infradead.org> Precedence: bulk X-Mailing-List: ceph-devel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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) Reviewed-by: Viacheslav Dubeyko --- fs/ceph/addr.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 200dca1ff2d6..045ec57e72b8 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -2052,8 +2052,8 @@ static vm_fault_t ceph_page_mkwrite(struct vm_fault *vmf) struct ceph_inode_info *ci = ceph_inode(inode); struct ceph_file_info *fi = vma->vm_file->private_data; struct ceph_cap_flush *prealloc_cf; - struct page *page = vmf->page; - loff_t off = page_offset(page); + struct folio *folio = page_folio(vmf->page); + loff_t off = folio_pos(folio); loff_t size = i_size_read(inode); size_t len; int want, got, err; @@ -2070,10 +2070,10 @@ static vm_fault_t ceph_page_mkwrite(struct vm_fault *vmf) sb_start_pagefault(inode->i_sb); ceph_block_sigs(&oldset); - if (off + thp_size(page) <= size) - len = thp_size(page); + if (off + folio_size(folio) <= size) + len = folio_size(folio); else - len = offset_in_thp(page, size); + len = offset_in_folio(folio, size); doutc(cl, "%llx.%llx %llu~%zd getting caps i_size %llu\n", ceph_vinop(inode), off, len, size); @@ -2090,30 +2090,30 @@ static vm_fault_t ceph_page_mkwrite(struct vm_fault *vmf) doutc(cl, "%llx.%llx %llu~%zd got cap refs on %s\n", ceph_vinop(inode), off, len, ceph_cap_string(got)); - /* Update time before taking page lock */ + /* Update time before taking folio lock */ file_update_time(vma->vm_file); inode_inc_iversion_raw(inode); do { struct ceph_snap_context *snapc; - lock_page(page); + folio_lock(folio); - if (page_mkwrite_check_truncate(page, inode) < 0) { - unlock_page(page); + if (folio_mkwrite_check_truncate(folio, inode) < 0) { + folio_unlock(folio); ret = VM_FAULT_NOPAGE; break; } - snapc = ceph_find_incompatible(page); + snapc = ceph_find_incompatible(&folio->page); if (!snapc) { - /* success. we'll keep the page locked. */ - set_page_dirty(page); + /* success. we'll keep the folio locked. */ + folio_mark_dirty(folio); ret = VM_FAULT_LOCKED; break; } - unlock_page(page); + folio_unlock(folio); if (IS_ERR(snapc)) { ret = VM_FAULT_SIGBUS; From patchwork Mon Feb 17 18:51:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox \(Oracle\)" X-Patchwork-Id: 866133 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DA003238D34; Mon, 17 Feb 2025 18:51:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818290; cv=none; b=iiVY8s3YH7Oqyqql08fUrcDDdyCW4WPuO+BfZCa0VB1xTYhAgB7e2bgJ7eVnqRZ+ZiFNi9ykdXXQoFQ8kXpJQuvh4SQUH95nkBOjCWS9dDJJR0x2VhThqsN6+yZb6FpG+E+cNIyw1QMN0qJBY02XthOVWRDL4m0mB+eCeM9k2Pc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818290; c=relaxed/simple; bh=7/g7PkYocx3sog9LT6t7W28WamInYF+l4TwIKIE1b9Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=G/DqYLrTMtVlBeywNQMDYDPX6DfRWlLckj655oRn3g3P3P/vldN9pKmDSHCF46RdlhSKfkLfoiP+1Mg4goovDsCIvI/B39xk71TBhKtAH+vUhcTFfkb1W5+6qq3Im3mBEPKN2VHPGgGWDcjnl9Je2erFlMB6QFdBmPaeZIwHM4w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=T/7wN16A; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="T/7wN16A" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=beB88MU14NtXWJeQHCjJX0aesT7lOp97QvT884gDYW0=; b=T/7wN16Ae2koQ3K0EIi5VD3Xps o9U1ySnGWJQrZvOzD4WDU4pFGVEPyG8wGoTUlPDY5N9MGIxar++00YIuHHV6oJleP0lscKHan/rzh CMzVQ1yt1C+9684U5JL+DMeyRiBRlUg6O+0po/ZFeeDX77KJ2kYDK52dzHy7mFsoF2oJMU03VohrE kzx1D3wDcEvn5LhqEFCBgx0pj9RbC7kEjpXxTXQRsg4SNMEI5qQQYEmSVCVZ/1ssRzQdSHYC0PDQC dwYWSpmR+K6JGfXvRfhLXwsXNNUI5Gt+bGY0Z+gTxZRss+ac8oHRhoWDdn2yDE++8e2zvRjUk76eV C+K/dC5Q==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tk6DB-00000001nvg-1dD3; Mon, 17 Feb 2025 18:51:21 +0000 From: "Matthew Wilcox (Oracle)" To: Viacheslav Dubeyko Cc: "Matthew Wilcox (Oracle)" , ceph-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, David Howells Subject: [PATCH v3 3/9] ceph: Convert ceph_find_incompatible() to take a folio Date: Mon, 17 Feb 2025 18:51:11 +0000 Message-ID: <20250217185119.430193-4-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217185119.430193-1-willy@infradead.org> References: <20250217185119.430193-1-willy@infradead.org> Precedence: bulk X-Mailing-List: ceph-devel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Both callers already have the folio. Pass it in and use it throughout. Removes some hidden calls to compound_head() and a reference to page->mapping. Signed-off-by: Matthew Wilcox (Oracle) --- fs/ceph/addr.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 045ec57e72b8..08f8bdfc275e 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -1781,56 +1781,56 @@ static int context_is_writeable_or_written(struct inode *inode, /** * ceph_find_incompatible - find an incompatible context and return it - * @page: page being dirtied + * @folio: folio being dirtied * - * We are only allowed to write into/dirty a page if the page is + * We are only allowed to write into/dirty a folio if the folio is * clean, or already dirty within the same snap context. Returns a * conflicting context if there is one, NULL if there isn't, or a * negative error code on other errors. * - * Must be called with page lock held. + * Must be called with folio lock held. */ static struct ceph_snap_context * -ceph_find_incompatible(struct page *page) +ceph_find_incompatible(struct folio *folio) { - struct inode *inode = page->mapping->host; + struct inode *inode = folio->mapping->host; struct ceph_client *cl = ceph_inode_to_client(inode); struct ceph_inode_info *ci = ceph_inode(inode); if (ceph_inode_is_shutdown(inode)) { - doutc(cl, " %llx.%llx page %p is shutdown\n", - ceph_vinop(inode), page); + doutc(cl, " %llx.%llx folio %p is shutdown\n", + ceph_vinop(inode), folio); return ERR_PTR(-ESTALE); } for (;;) { struct ceph_snap_context *snapc, *oldest; - wait_on_page_writeback(page); + folio_wait_writeback(folio); - snapc = page_snap_context(page); + snapc = page_snap_context(&folio->page); if (!snapc || snapc == ci->i_head_snapc) break; /* - * this page is already dirty in another (older) snap + * this folio is already dirty in another (older) snap * context! is it writeable now? */ oldest = get_oldest_context(inode, NULL, NULL); if (snapc->seq > oldest->seq) { /* not writeable -- return it for the caller to deal with */ ceph_put_snap_context(oldest); - doutc(cl, " %llx.%llx page %p snapc %p not current or oldest\n", - ceph_vinop(inode), page, snapc); + doutc(cl, " %llx.%llx folio %p snapc %p not current or oldest\n", + ceph_vinop(inode), folio, snapc); return ceph_get_snap_context(snapc); } ceph_put_snap_context(oldest); - /* yay, writeable, do it now (without dropping page lock) */ - doutc(cl, " %llx.%llx page %p snapc %p not current, but oldest\n", - ceph_vinop(inode), page, snapc); - if (clear_page_dirty_for_io(page)) { - int r = writepage_nounlock(page, NULL); + /* yay, writeable, do it now (without dropping folio lock) */ + doutc(cl, " %llx.%llx folio %p snapc %p not current, but oldest\n", + ceph_vinop(inode), folio, snapc); + if (folio_clear_dirty_for_io(folio)) { + int r = writepage_nounlock(&folio->page, NULL); if (r < 0) return ERR_PTR(r); } @@ -1845,7 +1845,7 @@ static int ceph_netfs_check_write_begin(struct file *file, loff_t pos, unsigned struct ceph_inode_info *ci = ceph_inode(inode); struct ceph_snap_context *snapc; - snapc = ceph_find_incompatible(folio_page(*foliop, 0)); + snapc = ceph_find_incompatible(*foliop); if (snapc) { int r; @@ -2105,7 +2105,7 @@ static vm_fault_t ceph_page_mkwrite(struct vm_fault *vmf) break; } - snapc = ceph_find_incompatible(&folio->page); + snapc = ceph_find_incompatible(folio); if (!snapc) { /* success. we'll keep the folio locked. */ folio_mark_dirty(folio); From patchwork Mon Feb 17 18:51:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox \(Oracle\)" X-Patchwork-Id: 865967 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B02123642E; Mon, 17 Feb 2025 18:51:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818293; cv=none; b=uuDLN+7QI3sxJeCDoRlSNipEvYx0ASBiNfRLUGOGBkAnCjAUDHCPUhXcTRynEdBVZ5vC2TOczN5lPy3xa+4GXIbjS2+ObJ6H8Kqoemt++YGt4anbo0kntFj+n3dTfkXVhLX9ZPzB+SwytREKygtcWPwDumqHA+i89w6rKDRGqNM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818293; c=relaxed/simple; bh=mU7NI6a5d9A7g5ReKjk6GnGHeBcYNlRGHWdtczZMBgU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a9UT/WZbgJrKzGps7Wp2XldbTQ1IrOFQya5yyKUfcZ26ZYDOilAMX6pHOcJBBFYJ1yuJU5w61Z72r+xY08XrP7GIbaCDC4tPCHUCFr6XtxS8VWk5Wnzb6XYGpa039Bwil49ltQKQ+nSQy1jdO4VCOEdHvQEW8spZWZJ1//bZajo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=urVN9h2R; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="urVN9h2R" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=6DHO0Y+Q4FIeywZECiCQmlhTCbqDLFjeS9LJzrHP7s0=; b=urVN9h2RJUwp2WwgL/jeGX0+75 PRnCcNpIYklzSvgrK4cltmOmI42CMgcFWCzpxlFK0IXd3d+h68KTarTuBM4Bx14s5wE9i8S4RiUGl UKrpJGguQbAQ2AjpGNFCmlVdPVUPoQE8M65PAyICzC0QRiKexIFAzA09/jabU/hayx7QxWVPTuYBn anzaAAMXCbLiktirwuRtQfYYn21aZsoY2sDH3CSdgsnxZTCIpvW+2n3JbC5pLj9afGZWaf3AO4zce vZX4RFJdFR4wFR+PDChnAOVFgPJPwersUBcw6Kp9l7VJl+78tgNSnVQwYDOoR9rHzs+yGIrN1TDPj wPXy2xrg==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tk6DB-00000001nvi-260u; Mon, 17 Feb 2025 18:51:21 +0000 From: "Matthew Wilcox (Oracle)" To: Viacheslav Dubeyko Cc: "Matthew Wilcox (Oracle)" , ceph-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, David Howells Subject: [PATCH v3 4/9] ceph: Convert ceph_readdir_cache_control to store a folio Date: Mon, 17 Feb 2025 18:51:12 +0000 Message-ID: <20250217185119.430193-5-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217185119.430193-1-willy@infradead.org> References: <20250217185119.430193-1-willy@infradead.org> Precedence: bulk X-Mailing-List: ceph-devel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Pass a folio around instead of a page. This removes an access to page->index and a few hidden calls to compound_head(). Signed-off-by: Matthew Wilcox (Oracle) Reviewed-by: Viacheslav Dubeyko --- fs/ceph/dir.c | 15 ++++++++------- fs/ceph/inode.c | 26 ++++++++++++++------------ fs/ceph/super.h | 2 +- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c index 62e99e65250d..d22be9314de3 100644 --- a/fs/ceph/dir.c +++ b/fs/ceph/dir.c @@ -141,17 +141,18 @@ __dcache_find_get_entry(struct dentry *parent, u64 idx, if (ptr_pos >= i_size_read(dir)) return NULL; - if (!cache_ctl->page || ptr_pgoff != cache_ctl->page->index) { + if (!cache_ctl->folio || ptr_pgoff != cache_ctl->folio->index) { ceph_readdir_cache_release(cache_ctl); - cache_ctl->page = find_lock_page(&dir->i_data, ptr_pgoff); - if (!cache_ctl->page) { - doutc(cl, " page %lu not found\n", ptr_pgoff); + cache_ctl->folio = filemap_lock_folio(&dir->i_data, ptr_pgoff); + if (IS_ERR(cache_ctl->folio)) { + cache_ctl->folio = NULL; + doutc(cl, " folio %lu not found\n", ptr_pgoff); return ERR_PTR(-EAGAIN); } /* reading/filling the cache are serialized by - i_rwsem, no need to use page lock */ - unlock_page(cache_ctl->page); - cache_ctl->dentries = kmap(cache_ctl->page); + i_rwsem, no need to use folio lock */ + folio_unlock(cache_ctl->folio); + cache_ctl->dentries = kmap_local_folio(cache_ctl->folio, 0); } cache_ctl->index = idx & idx_mask; diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index 7dd6c2275085..c15970fa240f 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c @@ -1845,10 +1845,9 @@ static int readdir_prepopulate_inodes_only(struct ceph_mds_request *req, void ceph_readdir_cache_release(struct ceph_readdir_cache_control *ctl) { - if (ctl->page) { - kunmap(ctl->page); - put_page(ctl->page); - ctl->page = NULL; + if (ctl->folio) { + folio_release_kmap(ctl->folio, ctl->dentries); + ctl->folio = NULL; } } @@ -1862,20 +1861,23 @@ static int fill_readdir_cache(struct inode *dir, struct dentry *dn, unsigned idx = ctl->index % nsize; pgoff_t pgoff = ctl->index / nsize; - if (!ctl->page || pgoff != ctl->page->index) { + if (!ctl->folio || pgoff != ctl->folio->index) { ceph_readdir_cache_release(ctl); + fgf_t fgf = FGP_LOCK; + if (idx == 0) - ctl->page = grab_cache_page(&dir->i_data, pgoff); - else - ctl->page = find_lock_page(&dir->i_data, pgoff); - if (!ctl->page) { + fgf |= FGP_ACCESSED | FGP_CREAT; + + ctl->folio = __filemap_get_folio(&dir->i_data, pgoff, + fgf, mapping_gfp_mask(&dir->i_data)); + if (!ctl->folio) { ctl->index = -1; return idx == 0 ? -ENOMEM : 0; } /* reading/filling the cache are serialized by - * i_rwsem, no need to use page lock */ - unlock_page(ctl->page); - ctl->dentries = kmap(ctl->page); + * i_rwsem, no need to use folio lock */ + folio_unlock(ctl->folio); + ctl->dentries = kmap_local_folio(ctl->folio, 0); if (idx == 0) memset(ctl->dentries, 0, PAGE_SIZE); } diff --git a/fs/ceph/super.h b/fs/ceph/super.h index 7fa1e7be50e4..bb0db0cc8003 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h @@ -903,7 +903,7 @@ ceph_find_rw_context(struct ceph_file_info *cf) } struct ceph_readdir_cache_control { - struct page *page; + struct folio *folio; struct dentry **dentries; int index; }; From patchwork Mon Feb 17 18:51:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox \(Oracle\)" X-Patchwork-Id: 865970 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3493322A1EC; Mon, 17 Feb 2025 18:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818284; cv=none; b=GaQz5iFudyhEIU+gJLge45rtzNBA7AqEUH8HFuh4EsH+yEIoCn95uguKzTmETE4O3Zrx4Se861O19LsEFlmQqDflC1rdlaj2g6D8vLKwsKuVpgkEsnV7rg3/TMykxE31XP/6W4CzSflrIN1K2rscc5vFGyPG7GohB42W3zomn8U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818284; c=relaxed/simple; bh=4v3rNrZh+Gu/1VMB75whnTf+GZh5snecmnPiDmD3CEc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CtR8MQSCDRvURo24P9KR5K/1ltHgsKznXv5LZtZyjxLwmn7vAlTSn3U0fswb/MiXaMe7OCb/3zm3nZ3hBNayfR3EH7QizETEXkQ8MItglGr2qfyANwmBJ+ytOWT+fUtstn952sbwotfrpS5BMoPTUpxRgxGoK5yvkJWQ8KSwQK4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=erLgtzU0; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="erLgtzU0" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=tDRKjH/sI2KgWZjZG7atG9m0NcIGnYyk6khm+PZOyh0=; b=erLgtzU0yoXHb7Sez7fPtFpjCQ yRgL30NMsUvZMBERwlxzbyb42sxODlsSgW4g2CZLE0K3Jc3E5kKLEJp0VQeHQiIDDU8A5SbqMq0IV qT0V8Nz4hYBxzQRJLAc5zL+/wnLjLfTz3ZI1U8v/lXI1YLqAswW1ovidFcCsE0HDIddF5MZ6XSdRi ZlEa89vFoicRS29Gl+ScNP8dz9ehRbEvb5mZrKs5d2KVtiqupbAjy71uSfvdMpJVkNouGNfNnpg+h x0evSx5himJt2q5NOarpej7VVTMBvX6hh0C8jpIb5KmM9gUX5XLXSWb3xru+BufdVqxxGY82E5ugN dw3TuuJQ==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tk6DB-00000001nvk-2UIU; Mon, 17 Feb 2025 18:51:21 +0000 From: "Matthew Wilcox (Oracle)" To: Viacheslav Dubeyko Cc: "Matthew Wilcox (Oracle)" , ceph-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, David Howells Subject: [PATCH v3 5/9] ceph: Convert writepage_nounlock() to write_folio_nounlock() Date: Mon, 17 Feb 2025 18:51:13 +0000 Message-ID: <20250217185119.430193-6-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217185119.430193-1-willy@infradead.org> References: <20250217185119.430193-1-willy@infradead.org> Precedence: bulk X-Mailing-List: ceph-devel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Remove references to page->index, page->mapping, thp_size(), page_offset() and other page APIs in favour of their more efficient folio replacements. Signed-off-by: Matthew Wilcox (Oracle) --- fs/ceph/addr.c | 67 +++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 08f8bdfc275e..871adfa82c1f 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -708,22 +708,23 @@ static u64 get_writepages_data_length(struct inode *inode, } /* - * Write a single page, but leave the page locked. + * Write a folio, but leave it locked. * * If we get a write error, mark the mapping for error, but still adjust the - * dirty page accounting (i.e., page is no longer dirty). + * dirty page accounting (i.e., folio is no longer dirty). */ -static int writepage_nounlock(struct page *page, struct writeback_control *wbc) +static int write_folio_nounlock(struct folio *folio, + struct writeback_control *wbc) { - struct folio *folio = page_folio(page); - struct inode *inode = page->mapping->host; + struct page *page = &folio->page; + struct inode *inode = folio->mapping->host; struct ceph_inode_info *ci = ceph_inode(inode); struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); struct ceph_client *cl = fsc->client; struct ceph_snap_context *snapc, *oldest; - loff_t page_off = page_offset(page); + loff_t page_off = folio_pos(folio); int err; - loff_t len = thp_size(page); + loff_t len = folio_size(folio); loff_t wlen; struct ceph_writeback_ctl ceph_wbc; struct ceph_osd_client *osdc = &fsc->client->osdc; @@ -731,27 +732,27 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc) bool caching = ceph_is_cache_enabled(inode); struct page *bounce_page = NULL; - doutc(cl, "%llx.%llx page %p idx %lu\n", ceph_vinop(inode), page, - page->index); + doutc(cl, "%llx.%llx folio %p idx %lu\n", ceph_vinop(inode), folio, + folio->index); if (ceph_inode_is_shutdown(inode)) return -EIO; /* verify this is a writeable snap context */ - snapc = page_snap_context(page); + snapc = page_snap_context(&folio->page); if (!snapc) { - doutc(cl, "%llx.%llx page %p not dirty?\n", ceph_vinop(inode), - page); + doutc(cl, "%llx.%llx folio %p not dirty?\n", ceph_vinop(inode), + folio); return 0; } oldest = get_oldest_context(inode, &ceph_wbc, snapc); if (snapc->seq > oldest->seq) { - doutc(cl, "%llx.%llx page %p snapc %p not writeable - noop\n", - ceph_vinop(inode), page, snapc); + doutc(cl, "%llx.%llx folio %p snapc %p not writeable - noop\n", + ceph_vinop(inode), folio, snapc); /* we should only noop if called by kswapd */ WARN_ON(!(current->flags & PF_MEMALLOC)); ceph_put_snap_context(oldest); - redirty_page_for_writepage(wbc, page); + folio_redirty_for_writepage(wbc, folio); return 0; } ceph_put_snap_context(oldest); @@ -768,8 +769,8 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc) len = ceph_wbc.i_size - page_off; wlen = IS_ENCRYPTED(inode) ? round_up(len, CEPH_FSCRYPT_BLOCK_SIZE) : len; - doutc(cl, "%llx.%llx page %p index %lu on %llu~%llu snapc %p seq %lld\n", - ceph_vinop(inode), page, page->index, page_off, wlen, snapc, + doutc(cl, "%llx.%llx folio %p index %lu on %llu~%llu snapc %p seq %lld\n", + ceph_vinop(inode), folio, folio->index, page_off, wlen, snapc, snapc->seq); if (atomic_long_inc_return(&fsc->writeback_count) > @@ -782,32 +783,32 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc) ceph_wbc.truncate_seq, ceph_wbc.truncate_size, true); if (IS_ERR(req)) { - redirty_page_for_writepage(wbc, page); + folio_redirty_for_writepage(wbc, folio); return PTR_ERR(req); } if (wlen < len) len = wlen; - set_page_writeback(page); + folio_start_writeback(folio); if (caching) - ceph_set_page_fscache(page); + ceph_set_page_fscache(&folio->page); ceph_fscache_write_to_cache(inode, page_off, len, caching); if (IS_ENCRYPTED(inode)) { - bounce_page = fscrypt_encrypt_pagecache_blocks(page, + bounce_page = fscrypt_encrypt_pagecache_blocks(&folio->page, CEPH_FSCRYPT_BLOCK_SIZE, 0, GFP_NOFS); if (IS_ERR(bounce_page)) { - redirty_page_for_writepage(wbc, page); - end_page_writeback(page); + folio_redirty_for_writepage(wbc, folio); + folio_end_writeback(folio); ceph_osdc_put_request(req); return PTR_ERR(bounce_page); } } /* it may be a short write due to an object boundary */ - WARN_ON_ONCE(len > thp_size(page)); + WARN_ON_ONCE(len > folio_size(folio)); osd_req_op_extent_osd_data_pages(req, 0, bounce_page ? &bounce_page : &page, wlen, 0, false, false); @@ -833,25 +834,25 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc) if (err == -ERESTARTSYS) { /* killed by SIGKILL */ doutc(cl, "%llx.%llx interrupted page %p\n", - ceph_vinop(inode), page); - redirty_page_for_writepage(wbc, page); - end_page_writeback(page); + ceph_vinop(inode), folio); + folio_redirty_for_writepage(wbc, folio); + folio_end_writeback(folio); return err; } if (err == -EBLOCKLISTED) fsc->blocklisted = true; - doutc(cl, "%llx.%llx setting page/mapping error %d %p\n", - ceph_vinop(inode), err, page); + doutc(cl, "%llx.%llx setting mapping error %d %p\n", + ceph_vinop(inode), err, folio); mapping_set_error(&inode->i_data, err); wbc->pages_skipped++; } else { doutc(cl, "%llx.%llx cleaned page %p\n", - ceph_vinop(inode), page); + ceph_vinop(inode), folio); err = 0; /* vfs expects us to return 0 */ } - oldest = detach_page_private(page); + oldest = folio_detach_private(folio); WARN_ON_ONCE(oldest != snapc); - end_page_writeback(page); + folio_end_writeback(folio); ceph_put_wrbuffer_cap_refs(ci, 1, snapc); ceph_put_snap_context(snapc); /* page's reference */ @@ -1830,7 +1831,7 @@ ceph_find_incompatible(struct folio *folio) doutc(cl, " %llx.%llx folio %p snapc %p not current, but oldest\n", ceph_vinop(inode), folio, snapc); if (folio_clear_dirty_for_io(folio)) { - int r = writepage_nounlock(&folio->page, NULL); + int r = write_folio_nounlock(folio, NULL); if (r < 0) return ERR_PTR(r); } From patchwork Mon Feb 17 18:51:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox \(Oracle\)" X-Patchwork-Id: 866136 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4DCF3137C35; Mon, 17 Feb 2025 18:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818284; cv=none; b=afWl3nwsL4S5VVHwhbxzQ6k2z5eqRxxx0zi3POGz0uBzl+JzlE5I1XMh9FgOAbNlyJFdiiHicJMXHrADv5piy4MrUBoB5HoUdtoQoTBjxkGQNKtU5Nhkw1bqq+5V6Krw3bIS2/b4BWPcTIGywAGrRxr5V+lPS8KdyBkAD6YHtRU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818284; c=relaxed/simple; bh=A8SS/SNsC7BDdLD2EHBLBV0wGEfsd8UVmSwHL9c9vFw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PpBkU9Khs7A6U2gg48ak4QYjO4SEVR4lcw8S5bpBjirqFZ9a0hKod9V4wyRN8VZYl5VO3HdMGMMfeJwvGyKJ1h18+6/rUv/D+EAzYI6rYwz4m+vO4iYZ1RqIwXDjbofqBgDQ3Kx7LxmyWjpDN8WGZD6n/QmHIhkqjtZBf3o37j4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=m/XIt56h; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="m/XIt56h" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=rn2njdNn6ph2Vk7Kpzg8/A1Zubraa+/VWHpj3Yk0nlM=; b=m/XIt56hsr7vda2W7ULzWuturJ P0xr1tEipFC6fxLvsz0zw3ymMrbXk1zoQfjy4zUHQZj15RBjNhx2sZijxbj2wh4+tJH9jlEGop2sR VhQUK6/JqvQx/gIa2952PQFxyk9S/Ab2TVUksmeVIcqEZ8sMQNryoU8YclUGB9+SRnvCAitHlDV3U zyjVLWYe13MXB33oeANJdlWZy3KnB6DdF8SfkjpphnsqvkohHP6KSIbzTVSmJS+0MkEMfSGnL+s4m /JNwUdVIQwTXS5e3WiIt3yQ0E9bxv0I8gMrGaiaBujKQiKdGErtfp/aVJ7TPU1OzLVt/kfo1GWcEV pK3vtkJg==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tk6DB-00000001nvr-32Lc; Mon, 17 Feb 2025 18:51:21 +0000 From: "Matthew Wilcox (Oracle)" To: Viacheslav Dubeyko Cc: "Matthew Wilcox (Oracle)" , ceph-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, David Howells Subject: [PATCH v3 6/9] ceph: Convert ceph_check_page_before_write() to use a folio Date: Mon, 17 Feb 2025 18:51:14 +0000 Message-ID: <20250217185119.430193-7-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217185119.430193-1-willy@infradead.org> References: <20250217185119.430193-1-willy@infradead.org> Precedence: bulk X-Mailing-List: ceph-devel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Remove the conversion back to a struct page and just use the folio passed in. Signed-off-by: Matthew Wilcox (Oracle) --- fs/ceph/addr.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 871adfa82c1f..90d154bc4808 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -1142,18 +1142,17 @@ int ceph_check_page_before_write(struct address_space *mapping, struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); struct ceph_client *cl = fsc->client; struct ceph_snap_context *pgsnapc; - struct page *page = &folio->page; - /* only dirty pages, or our accounting breaks */ - if (unlikely(!PageDirty(page)) || unlikely(page->mapping != mapping)) { - doutc(cl, "!dirty or !mapping %p\n", page); + /* only dirty folios, or our accounting breaks */ + if (unlikely(!folio_test_dirty(folio) || folio->mapping != mapping)) { + doutc(cl, "!dirty or !mapping %p\n", folio); return -ENODATA; } /* only if matching snap context */ - pgsnapc = page_snap_context(page); + pgsnapc = page_snap_context(&folio->page); if (pgsnapc != ceph_wbc->snapc) { - doutc(cl, "page snapc %p %lld != oldest %p %lld\n", + doutc(cl, "folio snapc %p %lld != oldest %p %lld\n", pgsnapc, pgsnapc->seq, ceph_wbc->snapc, ceph_wbc->snapc->seq); @@ -1164,7 +1163,7 @@ int ceph_check_page_before_write(struct address_space *mapping, return -ENODATA; } - if (page_offset(page) >= ceph_wbc->i_size) { + if (folio_pos(folio) >= ceph_wbc->i_size) { doutc(cl, "folio at %lu beyond eof %llu\n", folio->index, ceph_wbc->i_size); @@ -1177,8 +1176,8 @@ int ceph_check_page_before_write(struct address_space *mapping, } if (ceph_wbc->strip_unit_end && - (page->index > ceph_wbc->strip_unit_end)) { - doutc(cl, "end of strip unit %p\n", page); + (folio->index > ceph_wbc->strip_unit_end)) { + doutc(cl, "end of strip unit %p\n", folio); return -E2BIG; } From patchwork Mon Feb 17 18:51:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox \(Oracle\)" X-Patchwork-Id: 866134 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7C269235BF4; Mon, 17 Feb 2025 18:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818286; cv=none; b=tZWW93gkf87y69DZgEEniRb9y3PdDiD+lFAQ8bXj9+e8WC6Caz3BT9VSEsqfedX3HkE131zz5OpbpTxbYC+R87IFeL6ZEVu67Ka+FmhuGXzFZO+FOGvvl7WkSIGhyHaaKgBU92iYKE1i9IqRmcjpzS6/fZMa9CGhmoe6G0Qb5kA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818286; c=relaxed/simple; bh=wYI++/sj5jglu3sNsTpH9O7Oed02NPw6gudP5qqChXg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZQaAkWoTuxLp63mE1epgM+JTcGPpSrvrgNMkm8n/nlhK/VrJK4lleNgPUx9jOGqjwkogvpoK8XIVWK9ujooZleVd7tiqQmEGF2ZtmD3nwsJrdSE26xVb4Wg1iHexWc7x/agwNs5LGJMSONqRZpwFaIqnRbyyikt8rHhKqp50nK0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=XgskMAF4; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="XgskMAF4" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=Hm9fjCN/JKEwkIkZRTE4nmENLJqXTwaxoFhpMzpe+34=; b=XgskMAF4Yz9Dy8DtS3Pg5Yd2Sp tcpbjcX33+NMQ8ZrxWOkr1LE7Tg4HG0PmvqHskPO2b/cLAug/VX2T7vcS4gYcw2PvhRJ4eRgQ327k pUipyr1VCvq7Zh3FOa+Gk+7ue4lK8tbRrsc6p2N3FKQl3x1jyNx008Wd2hsng9gsXktWgp4snPgEh Gn+Pw2Vsnkmzg88a4xVfZN4OQIR10xOtIdLp0hGhJp1dbwPAnJe6eHp/Q7atFTTpNE2wPkJiW/M/O v43mBSuCG0zkdmz+zXLOce/5cZzg13w4gU1B7l+JcqjleH9qRUGfqrvhzfUisotOosCHS+BNCQRli F89ct7ww==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tk6DB-00000001nw3-3Vra; Mon, 17 Feb 2025 18:51:21 +0000 From: "Matthew Wilcox (Oracle)" To: Viacheslav Dubeyko Cc: "Matthew Wilcox (Oracle)" , ceph-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, David Howells Subject: [PATCH v3 7/9] ceph: Remove uses of page from ceph_process_folio_batch() Date: Mon, 17 Feb 2025 18:51:15 +0000 Message-ID: <20250217185119.430193-8-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217185119.430193-1-willy@infradead.org> References: <20250217185119.430193-1-willy@infradead.org> Precedence: bulk X-Mailing-List: ceph-devel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Remove uses of page->index and deprecated page APIs. Saves a lot of hidden calls to compound_head(). Also convert is_page_index_contiguous() to is_folio_index_contiguous() and make its arguments const. Signed-off-by: Matthew Wilcox (Oracle) --- fs/ceph/addr.c | 47 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 90d154bc4808..fd46eab12ded 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -1226,10 +1226,10 @@ void ceph_allocate_page_array(struct address_space *mapping, } static inline -bool is_page_index_contiguous(struct ceph_writeback_ctl *ceph_wbc, - struct page *page) +bool is_folio_index_contiguous(const struct ceph_writeback_ctl *ceph_wbc, + const struct folio *folio) { - return page->index == (ceph_wbc->offset + ceph_wbc->len) >> PAGE_SHIFT; + return folio->index == (ceph_wbc->offset + ceph_wbc->len) >> PAGE_SHIFT; } static inline @@ -1294,7 +1294,6 @@ int ceph_process_folio_batch(struct address_space *mapping, struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); struct ceph_client *cl = fsc->client; struct folio *folio = NULL; - struct page *page = NULL; unsigned i; int rc = 0; @@ -1304,11 +1303,9 @@ int ceph_process_folio_batch(struct address_space *mapping, if (!folio) continue; - page = &folio->page; - doutc(cl, "? %p idx %lu, folio_test_writeback %#x, " "folio_test_dirty %#x, folio_test_locked %#x\n", - page, page->index, folio_test_writeback(folio), + folio, folio->index, folio_test_writeback(folio), folio_test_dirty(folio), folio_test_locked(folio)); @@ -1321,27 +1318,27 @@ int ceph_process_folio_batch(struct address_space *mapping, } if (ceph_wbc->locked_pages == 0) - lock_page(page); /* first page */ - else if (!trylock_page(page)) + folio_lock(folio); + else if (!folio_trylock(folio)) break; rc = ceph_check_page_before_write(mapping, wbc, ceph_wbc, folio); if (rc == -ENODATA) { rc = 0; - unlock_page(page); + folio_unlock(folio); ceph_wbc->fbatch.folios[i] = NULL; continue; } else if (rc == -E2BIG) { rc = 0; - unlock_page(page); + folio_unlock(folio); ceph_wbc->fbatch.folios[i] = NULL; break; } - if (!clear_page_dirty_for_io(page)) { - doutc(cl, "%p !clear_page_dirty_for_io\n", page); - unlock_page(page); + if (!folio_clear_dirty_for_io(folio)) { + doutc(cl, "%p !folio_clear_dirty_for_io\n", folio); + folio_unlock(folio); ceph_wbc->fbatch.folios[i] = NULL; continue; } @@ -1353,35 +1350,35 @@ int ceph_process_folio_batch(struct address_space *mapping, * allocate a page array */ if (ceph_wbc->locked_pages == 0) { - ceph_allocate_page_array(mapping, ceph_wbc, page); - } else if (!is_page_index_contiguous(ceph_wbc, page)) { + ceph_allocate_page_array(mapping, ceph_wbc, &folio->page); + } else if (!is_folio_index_contiguous(ceph_wbc, folio)) { if (is_num_ops_too_big(ceph_wbc)) { - redirty_page_for_writepage(wbc, page); - unlock_page(page); + folio_redirty_for_writepage(wbc, folio); + folio_unlock(folio); break; } ceph_wbc->num_ops++; - ceph_wbc->offset = (u64)page_offset(page); + ceph_wbc->offset = (u64)folio_pos(folio); ceph_wbc->len = 0; } /* note position of first page in fbatch */ - doutc(cl, "%llx.%llx will write page %p idx %lu\n", - ceph_vinop(inode), page, page->index); + doutc(cl, "%llx.%llx will write folio %p idx %lu\n", + ceph_vinop(inode), folio, folio->index); fsc->write_congested = is_write_congestion_happened(fsc); rc = ceph_move_dirty_page_in_page_array(mapping, wbc, - ceph_wbc, page); + ceph_wbc, &folio->page); if (rc) { - redirty_page_for_writepage(wbc, page); - unlock_page(page); + folio_redirty_for_writepage(wbc, folio); + folio_unlock(folio); break; } ceph_wbc->fbatch.folios[i] = NULL; - ceph_wbc->len += thp_size(page); + ceph_wbc->len += folio_size(folio); } ceph_wbc->processed_in_fbatch = i; From patchwork Mon Feb 17 18:51:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox \(Oracle\)" X-Patchwork-Id: 865969 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7C1C4233D7B; Mon, 17 Feb 2025 18:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818285; cv=none; b=ODfZbO084RE9x7/p0WKPZSQp/w0pBKsh4EiN6jEFHvS1swHKAc4Dqk9WZ5ahYI+HFuoVSsjO8RFIzC6WiZwCwfqZ24rlifJUy2Vgl8FQwPY7VT+86mEkeBc+zirKXheAVcvD/62mqv3ka66V6xlO61+uVfybxI6s+4hwJnyf3tU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818285; c=relaxed/simple; bh=ha667yhBEKpIWOKugO6ASVYMb6Ivy6UReJx8v3vEZq8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Gbi78kNiGAss+6wFhesuEDnnru/Gkx6ZVjiGbd14TGezDqNCuHft6ACuaJfaaIUSuSmP1x3cqTyudKhBmOvoNXMJHMr5t0qOBF8DZS2vUdau4kXIGfl+img+NRfQDN2E/87fROYPqN0j3zYk+uK37+FQ0jkJUZ8Eh8pyf+m9CIg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=IsjKj4lQ; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="IsjKj4lQ" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=ECNBFjb6MoEuLImk4Hbzs7mELbVqH/NDKI4gdMmQYb8=; b=IsjKj4lQB7GdrAmiyhnoecJMX2 aA5SC4tAmF6LfNfx0AcFPyzCXJKOBhTEVEcfiTo0TIZxsHli1Cnj+p/cG7SUniB9J2vHvG2cwAW8s xMSlflDk7zFqWpXqoU5GfT6IBDOUw9p6JBWriP4M+LAmQE/HLksA3GLnRQ49YGl9I64cINfYy+qs9 3sgXSOyy4k2z+zaKS/PaHhs0FIlrfiGWsInpr1zfvnXEoIaBJ1uRycPsSqh4rQW1ovjjmSxZLGFDG 6LvAgCQ3TupDugaLiFpH865/a6n79lStc9kJgZwyy5tYAQH9NONcNYAdf45/uac/AwxhTJ55KuvvN 2ZN52pqA==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tk6DB-00000001nwB-41yz; Mon, 17 Feb 2025 18:51:22 +0000 From: "Matthew Wilcox (Oracle)" To: Viacheslav Dubeyko Cc: "Matthew Wilcox (Oracle)" , ceph-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, David Howells Subject: [PATCH v3 8/9] ceph: Convert ceph_move_dirty_page_in_page_array() to move_dirty_folio_in_page_array() Date: Mon, 17 Feb 2025 18:51:16 +0000 Message-ID: <20250217185119.430193-9-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217185119.430193-1-willy@infradead.org> References: <20250217185119.430193-1-willy@infradead.org> Precedence: bulk X-Mailing-List: ceph-devel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Shorten the name of this internal function by dropping the 'ceph_' prefix and pass in a folio instead of a page. Signed-off-by: Matthew Wilcox (Oracle) --- fs/ceph/addr.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index fd46eab12ded..3545eaa416e8 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -1246,11 +1246,9 @@ bool is_write_congestion_happened(struct ceph_fs_client *fsc) CONGESTION_ON_THRESH(fsc->mount_options->congestion_kb); } -static inline -int ceph_move_dirty_page_in_page_array(struct address_space *mapping, - struct writeback_control *wbc, - struct ceph_writeback_ctl *ceph_wbc, - struct page *page) +static inline int move_dirty_folio_in_page_array(struct address_space *mapping, + struct writeback_control *wbc, + struct ceph_writeback_ctl *ceph_wbc, struct folio *folio) { struct inode *inode = mapping->host; struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); @@ -1260,7 +1258,7 @@ int ceph_move_dirty_page_in_page_array(struct address_space *mapping, gfp_t gfp_flags = ceph_wbc->locked_pages ? GFP_NOWAIT : GFP_NOFS; if (IS_ENCRYPTED(inode)) { - pages[index] = fscrypt_encrypt_pagecache_blocks(page, + pages[index] = fscrypt_encrypt_pagecache_blocks(&folio->page, PAGE_SIZE, 0, gfp_flags); @@ -1277,7 +1275,7 @@ int ceph_move_dirty_page_in_page_array(struct address_space *mapping, return PTR_ERR(pages[index]); } } else { - pages[index] = page; + pages[index] = &folio->page; } ceph_wbc->locked_pages++; @@ -1369,8 +1367,8 @@ int ceph_process_folio_batch(struct address_space *mapping, fsc->write_congested = is_write_congestion_happened(fsc); - rc = ceph_move_dirty_page_in_page_array(mapping, wbc, - ceph_wbc, &folio->page); + rc = move_dirty_folio_in_page_array(mapping, wbc, ceph_wbc, + folio); if (rc) { folio_redirty_for_writepage(wbc, folio); folio_unlock(folio); From patchwork Mon Feb 17 18:51:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthew Wilcox \(Oracle\)" X-Patchwork-Id: 866135 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A6C0D235BFF; Mon, 17 Feb 2025 18:51:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=90.155.50.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818285; cv=none; b=inxLlfmu2kmlwXlDbzJShK7+MpOrt3HG4rTmmUxONgwHgeJQ3RBky8ByBNpFRxhRg3US8ufzNGnIpuwqq0CiwKzeYvMVteLDvGqe3XsBmrRiXSSNVCOG+JsDh/Uthwmjaml8+0LcnIbNyjPOrai7H/X7jgZvnbtEcXtq5VlqH0M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739818285; c=relaxed/simple; bh=um63ps+6Ty0Jw6NrgKh7kZt7QHU1HUsnKEuSN9pw7Ho=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=G5WU6mz9RFKQoSQpcdB/EgZsPL7qiGYUKbjXu+EZEX4lFVJ0FZIkOM6esKu7AAWgutzveV5PbftTcx1m8lLblqKzprK7utAeUXXP2iO18XpKW871rw7wxn9RbUcy2p9DvL6AJ5KX1KtruKDCNPGleUW2O13OOteVww55g/+xEV4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org; spf=none smtp.mailfrom=infradead.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b=pDgZ8Lxi; arc=none smtp.client-ip=90.155.50.34 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=infradead.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="pDgZ8Lxi" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=Uk6Ao1mKqiW/+ZuvgMW/FOEPeLhVTaQLJDYe6cFanyQ=; b=pDgZ8LxifOezmuNuA6kNa71wMI /ORJYp5iKXx/OOxgqs64CGSGtSrO+dehHggeMYYaFbHzo7Rtw5neVZs44tKCe2ZPb5pse27piWOKU i/WQmnOykTMJBGoYI93Fi6107UAAjt0SB6Ned5nXO8txTU79+Wi0lRWsJJ7ojNjMTU633Kx4A/Nb6 mn3/TwcWxIhDfmj+Omudsq5HTxkjT6mjcEf8YkDLw97HSZuSTUxSXAnuvugNjFohIyrgI3YTKl1QB ZOmaGYlqMd45uSeJ+yryjThkzsTUQ12wrso1OhfdnNHCfEJFSAu4WM2jbi/5onm8M7LNLInRKyT4a 5PDYB37w==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tk6DC-00000001nwI-0RVq; Mon, 17 Feb 2025 18:51:22 +0000 From: "Matthew Wilcox (Oracle)" To: Viacheslav Dubeyko Cc: "Matthew Wilcox (Oracle)" , ceph-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, David Howells Subject: [PATCH v3 9/9] ceph: Pass a folio to ceph_allocate_page_array() Date: Mon, 17 Feb 2025 18:51:17 +0000 Message-ID: <20250217185119.430193-10-willy@infradead.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217185119.430193-1-willy@infradead.org> References: <20250217185119.430193-1-willy@infradead.org> Precedence: bulk X-Mailing-List: ceph-devel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Remove two accesses to page->index. Signed-off-by: Matthew Wilcox (Oracle) --- fs/ceph/addr.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 3545eaa416e8..20b6bd8cd004 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -1201,7 +1201,7 @@ void __ceph_allocate_page_array(struct ceph_writeback_ctl *ceph_wbc, static inline void ceph_allocate_page_array(struct address_space *mapping, struct ceph_writeback_ctl *ceph_wbc, - struct page *page) + struct folio *folio) { struct inode *inode = mapping->host; struct ceph_inode_info *ci = ceph_inode(inode); @@ -1210,13 +1210,13 @@ void ceph_allocate_page_array(struct address_space *mapping, u32 xlen; /* prepare async write request */ - ceph_wbc->offset = (u64)page_offset(page); + ceph_wbc->offset = (u64)folio_pos(folio); ceph_calc_file_object_mapping(&ci->i_layout, ceph_wbc->offset, ceph_wbc->wsize, &objnum, &objoff, &xlen); ceph_wbc->num_ops = 1; - ceph_wbc->strip_unit_end = page->index + ((xlen - 1) >> PAGE_SHIFT); + ceph_wbc->strip_unit_end = folio->index + ((xlen - 1) >> PAGE_SHIFT); BUG_ON(ceph_wbc->pages); ceph_wbc->max_pages = calc_pages_for(0, (u64)xlen); @@ -1348,7 +1348,7 @@ int ceph_process_folio_batch(struct address_space *mapping, * allocate a page array */ if (ceph_wbc->locked_pages == 0) { - ceph_allocate_page_array(mapping, ceph_wbc, &folio->page); + ceph_allocate_page_array(mapping, ceph_wbc, folio); } else if (!is_folio_index_contiguous(ceph_wbc, folio)) { if (is_num_ops_too_big(ceph_wbc)) { folio_redirty_for_writepage(wbc, folio);