aboutsummaryrefslogtreecommitdiffstats
path: root/fs/jffs2/summary.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/jffs2/summary.c')
-rw-r--r--fs/jffs2/summary.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/fs/jffs2/summary.c b/fs/jffs2/summary.c
index 53a84b468cfe..9ced3aa95818 100644
--- a/fs/jffs2/summary.c
+++ b/fs/jffs2/summary.c
@@ -554,9 +554,21 @@ static int jffs2_sum_process_sum_data(struct jffs2_sb_info *c, struct jffs2_eras
554 } 554 }
555#endif 555#endif
556 default : { 556 default : {
557printk("nodetype = %#04x\n",je16_to_cpu(((struct jffs2_sum_unknown_flash *)sp)->nodetype)); 557 uint16_t nodetype = je16_to_cpu(((struct jffs2_sum_unknown_flash *)sp)->nodetype);
558 JFFS2_WARNING("Unsupported node type found in summary! Exiting..."); 558 JFFS2_WARNING("Unsupported node type %x found in summary! Exiting...\n", nodetype);
559 return -EIO; 559 if ((nodetype & JFFS2_COMPAT_MASK) == JFFS2_FEATURE_INCOMPAT)
560 return -EIO;
561
562 /* For compatible node types, just fall back to the full scan */
563 c->wasted_size -= jeb->wasted_size;
564 c->free_size += c->sector_size - jeb->free_size;
565 c->used_size -= jeb->used_size;
566 c->dirty_size -= jeb->dirty_size;
567 jeb->wasted_size = jeb->used_size = jeb->dirty_size = 0;
568 jeb->free_size = c->sector_size;
569
570 jffs2_free_all_node_refs(c, jeb);
571 return -ENOTRECOVERABLE;
560 } 572 }
561 } 573 }
562 } 574 }
@@ -642,8 +654,12 @@ int jffs2_sum_scan_sumnode(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb
642 } 654 }
643 655
644 ret = jffs2_sum_process_sum_data(c, jeb, summary, pseudo_random); 656 ret = jffs2_sum_process_sum_data(c, jeb, summary, pseudo_random);
657 /* -ENOTRECOVERABLE isn't a fatal error -- it means we should do a full
658 scan of this eraseblock. So return zero */
659 if (ret == -ENOTRECOVERABLE)
660 return 0;
645 if (ret) 661 if (ret)
646 return ret; 662 return ret; /* real error */
647 663
648 /* for PARANOIA_CHECK */ 664 /* for PARANOIA_CHECK */
649 cache_ref = jffs2_alloc_raw_node_ref(); 665 cache_ref = jffs2_alloc_raw_node_ref();