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

qnx6: Convert directory handling to use kmap_local

Eliminates qnx6_put_page() and a few hidden calls to compound_head().

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
25689405 1d49228f

+11 -17
+11 -11
fs/qnx6/dir.c
··· 32 32 if (IS_ERR(folio)) 33 33 return folio; 34 34 *foliop = folio; 35 - return kmap(&folio->page); 35 + return kmap_local_folio(folio, 0); 36 36 } 37 37 38 38 static unsigned last_entry(struct inode *inode, unsigned long page_nr) ··· 59 59 return ERR_CAST(folio); 60 60 offs = offset_in_folio(folio, s << sb->s_blocksize_bits); 61 61 *foliop = folio; 62 - return kmap(&folio->page) + offs; 62 + return kmap_local_folio(folio, offs); 63 63 } 64 64 65 65 static int qnx6_dir_longfilename(struct inode *inode, ··· 90 90 if (lf_size > QNX6_LONG_NAME_MAX) { 91 91 pr_debug("file %s\n", lf->lf_fname); 92 92 pr_err("Filename too long (%i)\n", lf_size); 93 - qnx6_put_page(&folio->page); 93 + folio_release_kmap(folio, lf); 94 94 return 0; 95 95 } 96 96 ··· 103 103 pr_debug("qnx6_readdir:%.*s inode:%u\n", 104 104 lf_size, lf->lf_fname, de_inode); 105 105 if (!dir_emit(ctx, lf->lf_fname, lf_size, de_inode, DT_UNKNOWN)) { 106 - qnx6_put_page(&folio->page); 106 + folio_release_kmap(folio, lf); 107 107 return 0; 108 108 } 109 109 110 - qnx6_put_page(&folio->page); 110 + folio_release_kmap(folio, lf); 111 111 /* success */ 112 112 return 1; 113 113 } ··· 168 168 } 169 169 } 170 170 } 171 - qnx6_put_page(&folio->page); 171 + folio_release_kmap(folio, kaddr); 172 172 } 173 173 return 0; 174 174 } ··· 190 190 191 191 thislen = fs16_to_cpu(sbi, lf->lf_size); 192 192 if (len != thislen) { 193 - qnx6_put_page(&folio->page); 193 + folio_release_kmap(folio, lf); 194 194 return 0; 195 195 } 196 196 if (memcmp(name, lf->lf_fname, len) == 0) { 197 - qnx6_put_page(&folio->page); 197 + folio_release_kmap(folio, lf); 198 198 return fs32_to_cpu(sbi, de->de_inode); 199 199 } 200 - qnx6_put_page(&folio->page); 200 + folio_release_kmap(folio, lf); 201 201 return 0; 202 202 } 203 203 ··· 256 256 } else 257 257 pr_err("undefined filename size in inode.\n"); 258 258 } 259 - qnx6_put_page(&folio->page); 259 + folio_release_kmap(folio, de - i); 260 260 } 261 261 262 262 if (++n >= npages) ··· 266 266 267 267 found: 268 268 ei->i_dir_start_lookup = n; 269 - qnx6_put_page(&folio->page); 269 + folio_release_kmap(folio, de); 270 270 return ino; 271 271 } 272 272
-6
fs/qnx6/qnx6.h
··· 126 126 extern struct qnx6_super_block *qnx6_mmi_fill_super(struct super_block *s, 127 127 int silent); 128 128 129 - static inline void qnx6_put_page(struct page *page) 130 - { 131 - kunmap(page); 132 - put_page(page); 133 - } 134 - 135 129 unsigned qnx6_find_ino(int len, struct inode *dir, const char *name);