Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

qnx6: Convert qnx6_get_page() to qnx6_get_folio()

Match the ext2 calling convention by returning the address and
setting the folio return pointer.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>

authored by

Matthew Wilcox (Oracle) and committed by
Christian Brauner
b2aa6155 00753fb5

+24 -22
+24 -22
fs/qnx6/dir.c
··· 24 24 return crc; 25 25 } 26 26 27 - static struct page *qnx6_get_page(struct inode *dir, unsigned long n) 27 + static void *qnx6_get_folio(struct inode *dir, unsigned long n, 28 + struct folio **foliop) 28 29 { 29 - struct address_space *mapping = dir->i_mapping; 30 - struct page *page = read_mapping_page(mapping, n, NULL); 31 - if (!IS_ERR(page)) 32 - kmap(page); 33 - return page; 30 + struct folio *folio = read_mapping_folio(dir->i_mapping, n, NULL); 31 + 32 + if (IS_ERR(folio)) 33 + return folio; 34 + *foliop = folio; 35 + return kmap(&folio->page); 34 36 } 35 37 36 38 static unsigned last_entry(struct inode *inode, unsigned long page_nr) ··· 119 117 loff_t pos = ctx->pos & ~(QNX6_DIR_ENTRY_SIZE - 1); 120 118 unsigned long npages = dir_pages(inode); 121 119 unsigned long n = pos >> PAGE_SHIFT; 122 - unsigned start = (pos & ~PAGE_MASK) / QNX6_DIR_ENTRY_SIZE; 120 + unsigned offset = (pos & ~PAGE_MASK) / QNX6_DIR_ENTRY_SIZE; 123 121 bool done = false; 124 122 125 123 ctx->pos = pos; 126 124 if (ctx->pos >= inode->i_size) 127 125 return 0; 128 126 129 - for ( ; !done && n < npages; n++, start = 0) { 130 - struct page *page = qnx6_get_page(inode, n); 131 - int limit = last_entry(inode, n); 127 + for ( ; !done && n < npages; n++, offset = 0) { 132 128 struct qnx6_dir_entry *de; 133 - int i = start; 129 + struct folio *folio; 130 + char *kaddr = qnx6_get_folio(inode, n, &folio); 131 + char *limit; 134 132 135 - if (IS_ERR(page)) { 133 + if (IS_ERR(kaddr)) { 136 134 pr_err("%s(): read failed\n", __func__); 137 135 ctx->pos = (n + 1) << PAGE_SHIFT; 138 - return PTR_ERR(page); 136 + return PTR_ERR(kaddr); 139 137 } 140 - de = ((struct qnx6_dir_entry *)page_address(page)) + start; 141 - for (; i < limit; i++, de++, ctx->pos += QNX6_DIR_ENTRY_SIZE) { 138 + de = (struct qnx6_dir_entry *)(kaddr + offset); 139 + limit = kaddr + last_entry(inode, n); 140 + for (; (char *)de < limit; de++, ctx->pos += QNX6_DIR_ENTRY_SIZE) { 142 141 int size = de->de_size; 143 142 u32 no_inode = fs32_to_cpu(sbi, de->de_inode); 144 143 ··· 167 164 } 168 165 } 169 166 } 170 - qnx6_put_page(page); 167 + qnx6_put_page(&folio->page); 171 168 } 172 169 return 0; 173 170 } ··· 218 215 { 219 216 struct super_block *s = dir->i_sb; 220 217 struct qnx6_inode_info *ei = QNX6_I(dir); 221 - struct page *page = NULL; 218 + struct folio *folio; 222 219 unsigned long start, n; 223 220 unsigned long npages = dir_pages(dir); 224 221 unsigned ino; ··· 235 232 n = start; 236 233 237 234 do { 238 - page = qnx6_get_page(dir, n); 239 - if (!IS_ERR(page)) { 235 + de = qnx6_get_folio(dir, n, &folio); 236 + if (!IS_ERR(de)) { 240 237 int limit = last_entry(dir, n); 241 238 int i; 242 239 243 - de = (struct qnx6_dir_entry *)page_address(page); 244 240 for (i = 0; i < limit; i++, de++) { 245 241 if (len <= QNX6_SHORT_NAME_MAX) { 246 242 /* short filename */ ··· 258 256 } else 259 257 pr_err("undefined filename size in inode.\n"); 260 258 } 261 - qnx6_put_page(page); 259 + qnx6_put_page(&folio->page); 262 260 } 263 261 264 262 if (++n >= npages) ··· 267 265 return 0; 268 266 269 267 found: 270 - *res_page = page; 268 + *res_page = &folio->page; 271 269 ei->i_dir_start_lookup = n; 272 270 return ino; 273 271 }