@@ -186,23 +186,25 @@ static bool ext2_check_page(struct page *page, int quiet, char *kaddr)
186186 * NOTE: ext2_find_entry() and ext2_dotdot() act as a call to ext2_get_page()
187187 * and should be treated as a call to ext2_get_page() for nesting purposes.
188188 */
189- static struct page * ext2_get_page (struct inode * dir , unsigned long n ,
190- int quiet , void * * page_addr )
189+ static void * ext2_get_page (struct inode * dir , unsigned long n ,
190+ int quiet , struct page * * page )
191191{
192192 struct address_space * mapping = dir -> i_mapping ;
193193 struct folio * folio = read_mapping_folio (mapping , n , NULL );
194+ void * page_addr ;
194195
195196 if (IS_ERR (folio ))
196- return & folio -> page ;
197- * page_addr = kmap_local_folio (folio , n & (folio_nr_pages (folio ) - 1 ));
197+ return ERR_CAST ( folio ) ;
198+ page_addr = kmap_local_folio (folio , n & (folio_nr_pages (folio ) - 1 ));
198199 if (unlikely (!folio_test_checked (folio ))) {
199- if (!ext2_check_page (& folio -> page , quiet , * page_addr ))
200+ if (!ext2_check_page (& folio -> page , quiet , page_addr ))
200201 goto fail ;
201202 }
202- return & folio -> page ;
203+ * page = & folio -> page ;
204+ return page_addr ;
203205
204206fail :
205- ext2_put_page (& folio -> page , * page_addr );
207+ ext2_put_page (& folio -> page , page_addr );
206208 return ERR_PTR (- EIO );
207209}
208210
@@ -271,16 +273,17 @@ ext2_readdir(struct file *file, struct dir_context *ctx)
271273 EXT2_HAS_INCOMPAT_FEATURE (sb , EXT2_FEATURE_INCOMPAT_FILETYPE );
272274
273275 for ( ; n < npages ; n ++ , offset = 0 ) {
274- char * kaddr , * limit ;
275276 ext2_dirent * de ;
276- struct page * page = ext2_get_page (inode , n , 0 , (void * * )& kaddr );
277+ struct page * page ;
278+ char * kaddr = ext2_get_page (inode , n , 0 , & page );
279+ char * limit ;
277280
278- if (IS_ERR (page )) {
281+ if (IS_ERR (kaddr )) {
279282 ext2_error (sb , __func__ ,
280283 "bad page in #%lu" ,
281284 inode -> i_ino );
282285 ctx -> pos += PAGE_SIZE - offset ;
283- return PTR_ERR (page );
286+ return PTR_ERR (kaddr );
284287 }
285288 if (unlikely (need_revalidate )) {
286289 if (offset ) {
@@ -362,9 +365,10 @@ struct ext2_dir_entry_2 *ext2_find_entry (struct inode *dir,
362365 n = start ;
363366 do {
364367 char * kaddr ;
365- page = ext2_get_page (dir , n , 0 , & page_addr );
366- if (IS_ERR (page ))
367- return ERR_CAST (page );
368+
369+ page_addr = ext2_get_page (dir , n , 0 , & page );
370+ if (IS_ERR (page_addr ))
371+ return ERR_CAST (page_addr );
368372
369373 kaddr = page_addr ;
370374 de = (ext2_dirent * ) kaddr ;
@@ -418,13 +422,11 @@ struct ext2_dir_entry_2 *ext2_find_entry (struct inode *dir,
418422struct ext2_dir_entry_2 * ext2_dotdot (struct inode * dir , struct page * * p ,
419423 void * * pa )
420424{
421- void * page_addr ;
422- struct page * page = ext2_get_page (dir , 0 , 0 , & page_addr );
425+ void * page_addr = ext2_get_page (dir , 0 , 0 , p );
423426 ext2_dirent * de = NULL ;
424427
425- if (!IS_ERR (page )) {
428+ if (!IS_ERR (page_addr )) {
426429 de = ext2_next_entry ((ext2_dirent * ) page_addr );
427- * p = page ;
428430 * pa = page_addr ;
429431 }
430432 return de ;
@@ -513,10 +515,9 @@ int ext2_add_link (struct dentry *dentry, struct inode *inode)
513515 char * kaddr ;
514516 char * dir_end ;
515517
516- page = ext2_get_page (dir , n , 0 , & page_addr );
517- err = PTR_ERR (page );
518- if (IS_ERR (page ))
519- goto out ;
518+ page_addr = ext2_get_page (dir , n , 0 , & page );
519+ if (IS_ERR (page_addr ))
520+ return PTR_ERR (page_addr );
520521 lock_page (page );
521522 kaddr = page_addr ;
522523 dir_end = kaddr + ext2_last_byte (dir , n );
@@ -577,7 +578,6 @@ int ext2_add_link (struct dentry *dentry, struct inode *inode)
577578 /* OFFSET_CACHE */
578579out_put :
579580 ext2_put_page (page , page_addr );
580- out :
581581 return err ;
582582out_unlock :
583583 unlock_page (page );
@@ -682,9 +682,9 @@ int ext2_empty_dir (struct inode * inode)
682682 for (i = 0 ; i < npages ; i ++ ) {
683683 char * kaddr ;
684684 ext2_dirent * de ;
685- page = ext2_get_page (inode , i , 0 , & page_addr );
685+ page_addr = ext2_get_page (inode , i , 0 , & page );
686686
687- if (IS_ERR (page ))
687+ if (IS_ERR (page_addr ))
688688 return 0 ;
689689
690690 kaddr = page_addr ;
0 commit comments