@@ -214,22 +214,22 @@ static bool sanity_check_compress_inode(struct inode *inode,
214214 f2fs_warn (sbi ,
215215 "%s: inode (ino=%lx) has unsupported compress algorithm: %u, run fsck to fix" ,
216216 __func__ , inode -> i_ino , ri -> i_compress_algorithm );
217- goto err ;
217+ return false ;
218218 }
219219 if (le64_to_cpu (ri -> i_compr_blocks ) >
220220 SECTOR_TO_BLOCK (inode -> i_blocks )) {
221221 f2fs_warn (sbi ,
222222 "%s: inode (ino=%lx) has inconsistent i_compr_blocks:%llu, i_blocks:%llu, run fsck to fix" ,
223223 __func__ , inode -> i_ino , le64_to_cpu (ri -> i_compr_blocks ),
224224 SECTOR_TO_BLOCK (inode -> i_blocks ));
225- goto err ;
225+ return false ;
226226 }
227227 if (ri -> i_log_cluster_size < MIN_COMPRESS_LOG_SIZE ||
228228 ri -> i_log_cluster_size > MAX_COMPRESS_LOG_SIZE ) {
229229 f2fs_warn (sbi ,
230230 "%s: inode (ino=%lx) has unsupported log cluster size: %u, run fsck to fix" ,
231231 __func__ , inode -> i_ino , ri -> i_log_cluster_size );
232- goto err ;
232+ return false ;
233233 }
234234
235235 clevel = le16_to_cpu (ri -> i_compress_flag ) >>
@@ -273,8 +273,6 @@ static bool sanity_check_compress_inode(struct inode *inode,
273273err_level :
274274 f2fs_warn (sbi , "%s: inode (ino=%lx) has unsupported compress level: %u, run fsck to fix" ,
275275 __func__ , inode -> i_ino , clevel );
276- err :
277- set_sbi_flag (sbi , SBI_NEED_FSCK );
278276 return false;
279277}
280278
@@ -287,14 +285,12 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page)
287285
288286 iblocks = le64_to_cpu (F2FS_INODE (node_page )-> i_blocks );
289287 if (!iblocks ) {
290- set_sbi_flag (sbi , SBI_NEED_FSCK );
291288 f2fs_warn (sbi , "%s: corrupted inode i_blocks i_ino=%lx iblocks=%llu, run fsck to fix." ,
292289 __func__ , inode -> i_ino , iblocks );
293290 return false;
294291 }
295292
296293 if (ino_of_node (node_page ) != nid_of_node (node_page )) {
297- set_sbi_flag (sbi , SBI_NEED_FSCK );
298294 f2fs_warn (sbi , "%s: corrupted inode footer i_ino=%lx, ino,nid: [%u, %u] run fsck to fix." ,
299295 __func__ , inode -> i_ino ,
300296 ino_of_node (node_page ), nid_of_node (node_page ));
@@ -303,15 +299,13 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page)
303299
304300 if (f2fs_has_extra_attr (inode )) {
305301 if (!f2fs_sb_has_extra_attr (sbi )) {
306- set_sbi_flag (sbi , SBI_NEED_FSCK );
307302 f2fs_warn (sbi , "%s: inode (ino=%lx) is with extra_attr, but extra_attr feature is off" ,
308303 __func__ , inode -> i_ino );
309304 return false;
310305 }
311306 if (fi -> i_extra_isize > F2FS_TOTAL_EXTRA_ATTR_SIZE ||
312307 fi -> i_extra_isize < F2FS_MIN_EXTRA_ATTR_SIZE ||
313308 fi -> i_extra_isize % sizeof (__le32 )) {
314- set_sbi_flag (sbi , SBI_NEED_FSCK );
315309 f2fs_warn (sbi , "%s: inode (ino=%lx) has corrupted i_extra_isize: %d, max: %zu" ,
316310 __func__ , inode -> i_ino , fi -> i_extra_isize ,
317311 F2FS_TOTAL_EXTRA_ATTR_SIZE );
@@ -321,7 +315,6 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page)
321315 f2fs_has_inline_xattr (inode ) &&
322316 (!fi -> i_inline_xattr_size ||
323317 fi -> i_inline_xattr_size > MAX_INLINE_XATTR_SIZE )) {
324- set_sbi_flag (sbi , SBI_NEED_FSCK );
325318 f2fs_warn (sbi , "%s: inode (ino=%lx) has corrupted i_inline_xattr_size: %d, max: %zu" ,
326319 __func__ , inode -> i_ino , fi -> i_inline_xattr_size ,
327320 MAX_INLINE_XATTR_SIZE );
@@ -335,61 +328,52 @@ static bool sanity_check_inode(struct inode *inode, struct page *node_page)
335328 return false;
336329 }
337330 } else if (f2fs_sb_has_flexible_inline_xattr (sbi )) {
338- set_sbi_flag (sbi , SBI_NEED_FSCK );
339331 f2fs_warn (sbi , "%s: corrupted inode ino=%lx, run fsck to fix." ,
340332 __func__ , inode -> i_ino );
341333 return false;
342334 }
343335
344336 if (!f2fs_sb_has_extra_attr (sbi )) {
345337 if (f2fs_sb_has_project_quota (sbi )) {
346- set_sbi_flag (sbi , SBI_NEED_FSCK );
347338 f2fs_warn (sbi , "%s: corrupted inode ino=%lx, wrong feature flag: %u, run fsck to fix." ,
348339 __func__ , inode -> i_ino , F2FS_FEATURE_PRJQUOTA );
349340 return false;
350341 }
351342 if (f2fs_sb_has_inode_chksum (sbi )) {
352- set_sbi_flag (sbi , SBI_NEED_FSCK );
353343 f2fs_warn (sbi , "%s: corrupted inode ino=%lx, wrong feature flag: %u, run fsck to fix." ,
354344 __func__ , inode -> i_ino , F2FS_FEATURE_INODE_CHKSUM );
355345 return false;
356346 }
357347 if (f2fs_sb_has_flexible_inline_xattr (sbi )) {
358- set_sbi_flag (sbi , SBI_NEED_FSCK );
359348 f2fs_warn (sbi , "%s: corrupted inode ino=%lx, wrong feature flag: %u, run fsck to fix." ,
360349 __func__ , inode -> i_ino , F2FS_FEATURE_FLEXIBLE_INLINE_XATTR );
361350 return false;
362351 }
363352 if (f2fs_sb_has_inode_crtime (sbi )) {
364- set_sbi_flag (sbi , SBI_NEED_FSCK );
365353 f2fs_warn (sbi , "%s: corrupted inode ino=%lx, wrong feature flag: %u, run fsck to fix." ,
366354 __func__ , inode -> i_ino , F2FS_FEATURE_INODE_CRTIME );
367355 return false;
368356 }
369357 if (f2fs_sb_has_compression (sbi )) {
370- set_sbi_flag (sbi , SBI_NEED_FSCK );
371358 f2fs_warn (sbi , "%s: corrupted inode ino=%lx, wrong feature flag: %u, run fsck to fix." ,
372359 __func__ , inode -> i_ino , F2FS_FEATURE_COMPRESSION );
373360 return false;
374361 }
375362 }
376363
377364 if (f2fs_sanity_check_inline_data (inode )) {
378- set_sbi_flag (sbi , SBI_NEED_FSCK );
379365 f2fs_warn (sbi , "%s: inode (ino=%lx, mode=%u) should not have inline_data, run fsck to fix" ,
380366 __func__ , inode -> i_ino , inode -> i_mode );
381367 return false;
382368 }
383369
384370 if (f2fs_has_inline_dentry (inode ) && !S_ISDIR (inode -> i_mode )) {
385- set_sbi_flag (sbi , SBI_NEED_FSCK );
386371 f2fs_warn (sbi , "%s: inode (ino=%lx, mode=%u) should not have inline_dentry, run fsck to fix" ,
387372 __func__ , inode -> i_ino , inode -> i_mode );
388373 return false;
389374 }
390375
391376 if ((fi -> i_flags & F2FS_CASEFOLD_FL ) && !f2fs_sb_has_casefold (sbi )) {
392- set_sbi_flag (sbi , SBI_NEED_FSCK );
393377 f2fs_warn (sbi , "%s: inode (ino=%lx) has casefold flag, but casefold feature is off" ,
394378 __func__ , inode -> i_ino );
395379 return false;
@@ -477,6 +461,7 @@ static int do_read_inode(struct inode *inode)
477461
478462 if (!sanity_check_inode (inode , node_page )) {
479463 f2fs_put_page (node_page , 1 );
464+ set_sbi_flag (sbi , SBI_NEED_FSCK );
480465 f2fs_handle_error (sbi , ERROR_CORRUPTED_INODE );
481466 return - EFSCORRUPTED ;
482467 }
0 commit comments