Lines Matching refs:jeb

39 static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
46 static int jffs2_scan_inode_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
48 static int jffs2_scan_dirent_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
69 static int file_dirty(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb)
73 if ((ret = jffs2_prealloc_raw_node_refs(c, jeb, 1)))
75 if ((ret = jffs2_scan_dirty_space(c, jeb, jeb->free_size)))
79 jeb->dirty_size += jeb->wasted_size;
80 c->dirty_size += jeb->wasted_size;
81 c->wasted_size -= jeb->wasted_size;
82 jeb->wasted_size = 0;
83 if (VERYDIRTY(c, jeb->dirty_size)) {
84 list_add(&jeb->list, &c->very_dirty_list);
86 list_add(&jeb->list, &c->dirty_list);
144 struct jffs2_eraseblock *jeb = &c->blocks[i];
151 ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset),
157 jffs2_dbg_acct_paranoia_check_nolock(c, jeb);
170 list_add(&jeb->list, &c->erase_pending_list);
176 if (!jeb->dirty_size) {
178 list_add(&jeb->list, &c->free_list);
183 jeb->offset);
184 list_add(&jeb->list, &c->erase_pending_list);
191 list_add(&jeb->list, &c->clean_list);
198 if (jeb->free_size > min_free(c) &&
199 (!c->nextblock || c->nextblock->free_size < jeb->free_size)) {
211 __func__, jeb->offset);
212 c->nextblock = jeb;
214 ret = file_dirty(c, jeb);
224 jeb->offset);
225 list_add(&jeb->list, &c->erase_pending_list);
230 jffs2_dbg(1, "Block at 0x%08x is bad\n", jeb->offset);
231 list_add(&jeb->list, &c->bad_list);
310 int jffs2_scan_classify_jeb(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb)
312 if ((jeb->used_size + jeb->unchecked_size) == PAD(c->cleanmarker_size) && !jeb->dirty_size
313 && (!jeb->first_node || !ref_next(jeb->first_node)) )
317 else if (!ISDIRTY(c->sector_size - (jeb->used_size + jeb->unchecked_size))) {
318 c->dirty_size -= jeb->dirty_size;
319 c->wasted_size += jeb->dirty_size;
320 jeb->wasted_size += jeb->dirty_size;
321 jeb->dirty_size = 0;
323 } else if (jeb->used_size || jeb->unchecked_size)
330 static int jffs2_scan_xattr_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
342 if ((err = jffs2_scan_dirty_space(c, jeb, je32_to_cpu(rx->totlen))))
355 if ((err = jffs2_scan_dirty_space(c, jeb, je32_to_cpu(rx->totlen))))
366 = jffs2_link_node_ref(c, jeb, ofs | REF_PRISTINE, totlen, NULL);
376 jffs2_link_node_ref(c, jeb, ofs | REF_PRISTINE, totlen, (void *)xd);
380 jffs2_sum_add_xattr_mem(s, rx, ofs - jeb->offset);
386 static int jffs2_scan_xref_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
398 if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(rr->totlen)))))
407 if ((err = jffs2_scan_dirty_space(c, jeb, je32_to_cpu(rr->totlen))))
433 jffs2_link_node_ref(c, jeb, ofs | REF_PRISTINE, PAD(je32_to_cpu(rr->totlen)), (void *)ref);
436 jffs2_sum_add_xref_mem(s, rr, ofs - jeb->offset);
445 static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
459 ofs = jeb->offset;
460 prevofs = jeb->offset - 1;
468 if (mtd_block_isbad(c->mtd, jeb->offset))
471 ret = jffs2_check_nand_cleanmarker(c, jeb);
506 jeb->offset + c->sector_size - buf_len,
531 jeb->offset + c->sector_size - sumlen,
544 err = jffs2_sum_scan_sumnode(c, jeb, sumptr, sumlen, &pseudo_random);
558 buf_ofs = jeb->offset;
570 /* We temporarily use 'ofs' as a pointer into the buffer/jeb */
581 int ret = jffs2_check_oob_empty(c, jeb, cleanmarkerfound);
592 jeb->offset);
599 jffs2_dbg(1, "Free space at %08x ends at %08x\n", jeb->offset,
600 jeb->offset + ofs);
601 if ((err = jffs2_prealloc_raw_node_refs(c, jeb, 1)))
603 if ((err = jffs2_scan_dirty_space(c, jeb, ofs)))
608 ofs += jeb->offset;
612 dbg_summary("no summary found in jeb 0x%08x. Apply original scan.\n",jeb->offset);
615 while(ofs < jeb->offset + c->sector_size) {
617 jffs2_dbg_acct_paranoia_check_nolock(c, jeb);
620 err = jffs2_prealloc_raw_node_refs(c, jeb, 2);
634 if ((err = jffs2_scan_dirty_space(c, jeb, 4)))
641 if (jeb->offset + c->sector_size < ofs + sizeof(*node)) {
644 jeb->offset, c->sector_size, ofs,
646 if ((err = jffs2_scan_dirty_space(c, jeb, (jeb->offset + c->sector_size)-ofs)))
652 buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
679 if ((err = jffs2_scan_dirty_space(c, jeb, ofs-empty_start)))
693 if (buf_ofs == jeb->offset && jeb->used_size == PAD(c->cleanmarker_size) &&
694 c->cleanmarker_size && !jeb->dirty_size && !ref_next(jeb->first_node)) {
705 buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
724 if (ofs == jeb->offset && je16_to_cpu(node->magic) == KSAMTIB_CIGAM_2SFFJ) {
727 if ((err = jffs2_scan_dirty_space(c, jeb, 4)))
734 if ((err = jffs2_scan_dirty_space(c, jeb, 4)))
742 if ((err = jffs2_scan_dirty_space(c, jeb, 4)))
753 if ((err = jffs2_scan_dirty_space(c, jeb, 4)))
772 if ((err = jffs2_scan_dirty_space(c, jeb, 4)))
778 if (ofs + je32_to_cpu(node->totlen) > jeb->offset + c->sector_size) {
783 if ((err = jffs2_scan_dirty_space(c, jeb, 4)))
793 if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(node->totlen)))))
802 buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
812 err = jffs2_scan_inode_node(c, jeb, (void *)node, ofs, s);
819 buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
829 err = jffs2_scan_dirent_node(c, jeb, (void *)node, ofs, s);
837 buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
847 err = jffs2_scan_xattr_node(c, jeb, (void *)node, ofs, s);
854 buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
864 err = jffs2_scan_xref_node(c, jeb, (void *)node, ofs, s);
877 if ((err = jffs2_scan_dirty_space(c, jeb, PAD(sizeof(struct jffs2_unknown_node)))))
880 } else if (jeb->first_node) {
882 ofs, jeb->offset);
883 if ((err = jffs2_scan_dirty_space(c, jeb, PAD(sizeof(struct jffs2_unknown_node)))))
887 jffs2_link_node_ref(c, jeb, ofs | REF_NORMAL, c->cleanmarker_size, NULL);
896 if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(node->totlen)))))
909 if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(node->totlen)))))
922 if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(node->totlen)))))
931 jffs2_link_node_ref(c, jeb, ofs | REF_PRISTINE, PAD(je32_to_cpu(node->totlen)), NULL);
943 if (PAD(s->sum_size + JFFS2_SUMMARY_FRAME_SIZE) > jeb->free_size) {
945 "summary information, disabling for this jeb!\n");
951 jeb->offset, jeb->free_size, jeb->dirty_size,
952 jeb->unchecked_size, jeb->used_size, jeb->wasted_size);
955 if (jeb->wasted_size) {
956 jeb->dirty_size += jeb->wasted_size;
957 c->dirty_size += jeb->wasted_size;
958 c->wasted_size -= jeb->wasted_size;
959 jeb->wasted_size = 0;
962 return jffs2_scan_classify_jeb(c, jeb);
991 static int jffs2_scan_inode_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
1017 return jffs2_scan_dirty_space(c, jeb,
1029 jffs2_link_node_ref(c, jeb, ofs | REF_UNCHECKED, PAD(je32_to_cpu(ri->totlen)), ic);
1039 jffs2_sum_add_inode_mem(s, ri, ofs - jeb->offset);
1045 static int jffs2_scan_dirent_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
1064 if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(rd->totlen)))))
1093 if ((err = jffs2_scan_dirty_space(c, jeb, PAD(je32_to_cpu(rd->totlen)))))
1103 fd->raw = jffs2_link_node_ref(c, jeb, ofs | dirent_node_state(rd),
1114 jffs2_sum_add_dirent_mem(s, rd, ofs - jeb->offset);