@@ -586,16 +586,20 @@ int ext2_add_link (struct dentry *dentry, struct inode *inode)
586
586
*/
587
587
int ext2_delete_entry (struct ext2_dir_entry_2 * dir , struct page * page )
588
588
{
589
- struct inode * inode = page -> mapping -> host ;
590
- char * kaddr = (char * )((unsigned long )dir & PAGE_MASK );
591
- unsigned from = offset_in_page (dir ) & ~(ext2_chunk_size (inode )- 1 );
592
- unsigned to = offset_in_page (dir ) +
593
- ext2_rec_len_from_disk (dir -> rec_len );
589
+ struct folio * folio = page_folio (page );
590
+ struct inode * inode = folio -> mapping -> host ;
591
+ size_t from , to ;
592
+ char * kaddr ;
594
593
loff_t pos ;
595
- ext2_dirent * pde = NULL ;
596
- ext2_dirent * de = (ext2_dirent * )(kaddr + from );
594
+ ext2_dirent * de , * pde = NULL ;
597
595
int err ;
598
596
597
+ from = offset_in_folio (folio , dir );
598
+ to = from + ext2_rec_len_from_disk (dir -> rec_len );
599
+ kaddr = (char * )dir - from ;
600
+ from &= ~(ext2_chunk_size (inode )- 1 );
601
+ de = (ext2_dirent * )(kaddr + from );
602
+
599
603
while ((char * )de < (char * )dir ) {
600
604
if (de -> rec_len == 0 ) {
601
605
ext2_error (inode -> i_sb , __func__ ,
@@ -606,18 +610,18 @@ int ext2_delete_entry(struct ext2_dir_entry_2 *dir, struct page *page)
606
610
de = ext2_next_entry (de );
607
611
}
608
612
if (pde )
609
- from = offset_in_page ( pde );
610
- pos = page_offset ( page ) + from ;
611
- lock_page ( page );
612
- err = ext2_prepare_chunk (page , pos , to - from );
613
+ from = offset_in_folio ( folio , pde );
614
+ pos = folio_pos ( folio ) + from ;
615
+ folio_lock ( folio );
616
+ err = ext2_prepare_chunk (& folio -> page , pos , to - from );
613
617
if (err ) {
614
- unlock_page ( page );
618
+ folio_unlock ( folio );
615
619
return err ;
616
620
}
617
621
if (pde )
618
622
pde -> rec_len = ext2_rec_len_to_disk (to - from );
619
623
dir -> inode = 0 ;
620
- ext2_commit_chunk (page , pos , to - from );
624
+ ext2_commit_chunk (& folio -> page , pos , to - from );
621
625
inode -> i_mtime = inode_set_ctime_current (inode );
622
626
EXT2_I (inode )-> i_flags &= ~EXT2_BTREE_FL ;
623
627
mark_inode_dirty (inode );
0 commit comments