forked from jengelh/virtualbox
102 lines
4.4 KiB
Diff
102 lines
4.4 KiB
Diff
From: Jiri Slaby <jslaby@suse.cz>
|
|
Subject: sharedfolders/regops: use __folio_index
|
|
|
|
page::index was renamed to page::__folio_index in 6.16's:
|
|
commit acc53a0b4c156877773da6e9eea4113dc7e770ae
|
|
Author: Matthew Wilcox (Oracle) <willy@infradead.org>
|
|
Date: Wed May 14 19:15:07 2025 +0100
|
|
|
|
mm: rename page->index to page->__folio_index
|
|
|
|
---
|
|
src/VBox/Additions/linux/sharedfolders/regops.c | 40 +++++++++++++++++++++---
|
|
1 file changed, 36 insertions(+), 4 deletions(-)
|
|
|
|
--- a/src/VBox/Additions/linux/sharedfolders/regops.c
|
|
+++ b/src/VBox/Additions/linux/sharedfolders/regops.c
|
|
@@ -1789,7 +1789,11 @@ static void vbsf_reg_write_sync_page_cac
|
|
struct page *pDstPage = find_lock_page(mapping, idxPage);
|
|
if (pDstPage) {
|
|
if ( pDstPage->mapping == mapping /* ignore if re-purposed (paranoia) */
|
|
+#if RTLNX_VER_MIN(6,16,0)
|
|
+ && pDstPage->__folio_index == idxPage
|
|
+#else
|
|
&& pDstPage->index == idxPage
|
|
+#endif
|
|
&& !PageDirty(pDstPage) /* ignore if dirty */
|
|
&& !PageWriteback(pDstPage) /* ignore if being written back */ ) {
|
|
/*
|
|
@@ -1820,7 +1824,13 @@ static void vbsf_reg_write_sync_page_cac
|
|
# endif
|
|
} else
|
|
SFLOGFLOW(("vbsf_reg_write_sync_page_cache: Skipping page %p: mapping=%p (vs %p) writeback=%d offset=%#lx (vs%#lx)\n",
|
|
- pDstPage, pDstPage->mapping, mapping, PageWriteback(pDstPage), pDstPage->index, idxPage));
|
|
+ pDstPage, pDstPage->mapping, mapping, PageWriteback(pDstPage),
|
|
+#if RTLNX_VER_MIN(6,16,0)
|
|
+ pDstPage->__folio_index,
|
|
+#else
|
|
+ pDstPage->index,
|
|
+#endif
|
|
+ idxPage));
|
|
unlock_page(pDstPage);
|
|
vbsf_put_page(pDstPage);
|
|
}
|
|
@@ -3632,7 +3642,13 @@ static int vbsf_readpage(struct file *fi
|
|
struct inode *inode = VBSF_GET_F_DENTRY(file)->d_inode;
|
|
int err;
|
|
|
|
- SFLOGFLOW(("vbsf_readpage: inode=%p file=%p page=%p off=%#llx\n", inode, file, page, (uint64_t)page->index << PAGE_SHIFT));
|
|
+ SFLOGFLOW(("vbsf_readpage: inode=%p file=%p page=%p off=%#llx\n", inode, file, page,
|
|
+#if RTLNX_VER_MIN(6,16,0)
|
|
+ (uint64_t)page->__folio_index << PAGE_SHIFT
|
|
+#else
|
|
+ (uint64_t)page->index << PAGE_SHIFT
|
|
+#endif
|
|
+ ));
|
|
Assert(PageLocked(page));
|
|
|
|
if (PageUptodate(page)) {
|
|
@@ -3653,7 +3669,11 @@ static int vbsf_readpage(struct file *fi
|
|
vrc = VbglR0SfHostReqReadPgLst(pSuperInfo->map.root,
|
|
pReq,
|
|
sf_r->Handle.hHost,
|
|
+#if RTLNX_VER_MIN(6,16,0)
|
|
+ (uint64_t)page->__folio_index << PAGE_SHIFT,
|
|
+#else
|
|
(uint64_t)page->index << PAGE_SHIFT,
|
|
+#endif
|
|
PAGE_SIZE,
|
|
1 /*cPages*/);
|
|
|
|
@@ -3709,16 +3729,28 @@ static int vbsf_writepage(struct page *p
|
|
int err;
|
|
|
|
SFLOGFLOW(("vbsf_writepage: inode=%p page=%p off=%#llx pHandle=%p (%#llx)\n",
|
|
- inode, page, (uint64_t)page->index << PAGE_SHIFT, pHandle, pHandle ? pHandle->hHost : 0));
|
|
-
|
|
+ inode, page,
|
|
+#if RTLNX_VER_MIN(6,16,0)
|
|
+ (uint64_t)page->__folio_index << PAGE_SHIFT,
|
|
+#else
|
|
+ (uint64_t)page->index << PAGE_SHIFT,
|
|
+#endif
|
|
+ pHandle, pHandle ? pHandle->hHost : 0));
|
|
if (pHandle) {
|
|
struct vbsf_super_info *pSuperInfo = VBSF_GET_SUPER_INFO(inode->i_sb);
|
|
VBOXSFWRITEPGLSTREQ *pReq = (VBOXSFWRITEPGLSTREQ *)VbglR0PhysHeapAlloc(sizeof(*pReq));
|
|
if (pReq) {
|
|
uint64_t const cbFile = i_size_read(inode);
|
|
+
|
|
+#if RTLNX_VER_MIN(6,16,0)
|
|
+ uint64_t const offInFile = (uint64_t)page->__folio_index << PAGE_SHIFT;
|
|
+ uint32_t const cbToWrite = page->__folio_index != (cbFile >> PAGE_SHIFT) ? PAGE_SIZE
|
|
+ : (uint32_t)cbFile & (uint32_t)PAGE_OFFSET_MASK;
|
|
+#else
|
|
uint64_t const offInFile = (uint64_t)page->index << PAGE_SHIFT;
|
|
uint32_t const cbToWrite = page->index != (cbFile >> PAGE_SHIFT) ? PAGE_SIZE
|
|
: (uint32_t)cbFile & (uint32_t)PAGE_OFFSET_MASK;
|
|
+#endif
|
|
int vrc;
|
|
|
|
pReq->PgLst.offFirstPage = 0;
|