@@ -624,7 +624,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
624624{
625625 struct dnode_of_data dn ;
626626 struct node_info ni ;
627- unsigned int start , end ;
627+ unsigned int start = 0 , end = 0 , index ;
628628 int err = 0 , recovered = 0 ;
629629
630630 /* step 1: recover xattr */
@@ -679,7 +679,7 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
679679 goto err ;
680680 }
681681
682- for (; start < end ; start ++ , dn .ofs_in_node ++ ) {
682+ for (index = start ; index < end ; index ++ , dn .ofs_in_node ++ ) {
683683 block_t src , dest ;
684684
685685 src = f2fs_data_blkaddr (& dn );
@@ -708,9 +708,9 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
708708 }
709709
710710 if (!file_keep_isize (inode ) &&
711- (i_size_read (inode ) <= ((loff_t )start << PAGE_SHIFT )))
711+ (i_size_read (inode ) <= ((loff_t )index << PAGE_SHIFT )))
712712 f2fs_i_size_write (inode ,
713- (loff_t )(start + 1 ) << PAGE_SHIFT );
713+ (loff_t )(index + 1 ) << PAGE_SHIFT );
714714
715715 /*
716716 * dest is reserved block, invalidate src block
@@ -765,9 +765,11 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
765765err :
766766 f2fs_put_dnode (& dn );
767767out :
768- f2fs_notice (sbi , "recover_data: ino = %lx (i_size: %s) recovered = %d, err = %d" ,
769- inode -> i_ino , file_keep_isize (inode ) ? "keep" : "recover" ,
770- recovered , err );
768+ f2fs_notice (sbi , "recover_data: ino = %lx, nid = %x (i_size: %s), "
769+ "range (%u, %u), recovered = %d, err = %d" ,
770+ inode -> i_ino , nid_of_node (& folio -> page ),
771+ file_keep_isize (inode ) ? "keep" : "recover" ,
772+ start , end , recovered , err );
771773 return err ;
772774}
773775
@@ -778,6 +780,14 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
778780 int err = 0 ;
779781 block_t blkaddr ;
780782 unsigned int ra_blocks = RECOVERY_MAX_RA_BLOCKS ;
783+ unsigned int recoverable_dnode = 0 ;
784+ unsigned int fsynced_dnode = 0 ;
785+ unsigned int total_dnode = 0 ;
786+ unsigned int recovered_inode = 0 ;
787+ unsigned int recovered_dentry = 0 ;
788+ unsigned int recovered_dnode = 0 ;
789+
790+ f2fs_notice (sbi , "do_recover_data: start to recover dnode" );
781791
782792 /* get node pages in the current segment */
783793 curseg = CURSEG_I (sbi , CURSEG_WARM_NODE );
@@ -800,10 +810,12 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
800810 f2fs_folio_put (folio , true);
801811 break ;
802812 }
813+ recoverable_dnode ++ ;
803814
804815 entry = get_fsync_inode (inode_list , ino_of_node (& folio -> page ));
805816 if (!entry )
806817 goto next ;
818+ fsynced_dnode ++ ;
807819 /*
808820 * inode(x) | CP | inode(x) | dnode(F)
809821 * In this case, we can lose the latest inode(x).
@@ -815,19 +827,22 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
815827 f2fs_folio_put (folio , true);
816828 break ;
817829 }
830+ recovered_inode ++ ;
818831 }
819832 if (entry -> last_dentry == blkaddr ) {
820833 err = recover_dentry (entry -> inode , & folio -> page , dir_list );
821834 if (err ) {
822835 f2fs_folio_put (folio , true);
823836 break ;
824837 }
838+ recovered_dentry ++ ;
825839 }
826840 err = do_recover_data (sbi , entry -> inode , folio );
827841 if (err ) {
828842 f2fs_folio_put (folio , true);
829843 break ;
830844 }
845+ recovered_dnode ++ ;
831846
832847 if (entry -> blkaddr == blkaddr )
833848 list_move_tail (& entry -> list , tmp_inode_list );
@@ -840,9 +855,15 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
840855 f2fs_folio_put (folio , true);
841856
842857 f2fs_ra_meta_pages_cond (sbi , blkaddr , ra_blocks );
858+ total_dnode ++ ;
843859 }
844860 if (!err )
845861 err = f2fs_allocate_new_segments (sbi );
862+
863+ f2fs_notice (sbi , "do_recover_data: dnode: (recoverable: %u, fsynced: %u, "
864+ "total: %u), recovered: (inode: %u, dentry: %u, dnode: %u), err: %d" ,
865+ recoverable_dnode , fsynced_dnode , total_dnode , recovered_inode ,
866+ recovered_dentry , recovered_dnode , err );
846867 return err ;
847868}
848869
@@ -855,6 +876,9 @@ int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only)
855876 unsigned long s_flags = sbi -> sb -> s_flags ;
856877 bool need_writecp = false;
857878
879+ f2fs_notice (sbi , "f2fs_recover_fsync_data: recovery fsync data, "
880+ "check_only: %d" , check_only );
881+
858882 if (is_sbi_flag_set (sbi , SBI_IS_WRITABLE ))
859883 f2fs_info (sbi , "recover fsync data on readonly fs" );
860884
0 commit comments