Lines Matching defs:tn

31 static int check_node_data(struct jffs2_sb_info *c, struct jffs2_tmp_dnode_info *tn)
33 struct jffs2_raw_node_ref *ref = tn->fn->raw;
40 BUG_ON(tn->csize == 0);
44 len = tn->csize;
51 if (adj >= tn->csize) {
53 ref_offset(ref), tn->csize, ofs);
62 ref_offset(ref), tn->csize, tn->partial_crc, tn->data_crc, ofs - len, ofs, len);
69 JFFS2_WARNING("MTD point returned len too short: %zu instead of %u.\n", retlen, tn->csize);
99 crc = crc32(tn->partial_crc, buffer, len);
107 if (crc != tn->data_crc) {
109 ref_offset(ref), tn->data_crc, crc);
150 static int check_tn_node(struct jffs2_sb_info *c, struct jffs2_tmp_dnode_info *tn)
154 BUG_ON(ref_obsolete(tn->fn->raw));
157 if (ref_flags(tn->fn->raw) != REF_UNCHECKED)
161 tn->fn->ofs, tn->fn->ofs + tn->fn->size, ref_offset(tn->fn->raw));
163 ret = check_node_data(c, tn);
169 jffs2_mark_node_obsolete(c, tn->fn->raw);
178 struct jffs2_tmp_dnode_info *tn = NULL;
185 tn = rb_entry(next, struct jffs2_tmp_dnode_info, rb);
187 if (tn->fn->ofs < offset)
188 next = tn->rb.rb_right;
189 else if (tn->fn->ofs >= offset)
190 next = tn->rb.rb_left;
195 return tn;
199 static void jffs2_kill_tn(struct jffs2_sb_info *c, struct jffs2_tmp_dnode_info *tn)
201 jffs2_mark_node_obsolete(c, tn->fn->raw);
202 jffs2_free_full_dnode(tn->fn);
203 jffs2_free_tmp_dnode_info(tn);
220 struct jffs2_tmp_dnode_info *tn)
222 uint32_t fn_end = tn->fn->ofs + tn->fn->size;
225 dbg_readinode("insert fragment %#04x-%#04x, ver %u at %08x\n", tn->fn->ofs, fn_end, tn->version, ref_offset(tn->fn->raw));
231 if (!tn->fn->size) {
233 if (rii->mdata_tn->version < tn->version) {
239 tn->version, rii->mdata_tn->version);
240 jffs2_kill_tn(c, tn);
244 rii->mdata_tn = tn;
245 dbg_readinode("keep new mdata with ver %d\n", tn->version);
250 this = jffs2_lookup_tn(&rii->tn_root, tn->fn->ofs);
275 if (this->version == tn->version) {
281 jffs2_kill_tn(c, tn);
286 rb_replace_node(&this->rb, &tn->rb, &rii->tn_root);
292 if (this->version < tn->version &&
293 this->fn->ofs >= tn->fn->ofs &&
296 if (check_tn_node(c, tn)) {
298 jffs2_kill_tn(c, tn);
304 if (this->version < tn->version) {
316 if (this->version > tn->version &&
317 this->fn->ofs <= tn->fn->ofs &&
322 jffs2_kill_tn(c, tn);
345 if (tn->fn->ofs > insert_point->fn->ofs)
347 else if (tn->fn->ofs < insert_point->fn->ofs ||
348 tn->fn->size < insert_point->fn->size)
353 rb_link_node(&tn->rb, &insert_point->rb, link);
354 rb_insert_color(&tn->rb, &rii->tn_root);
358 this = tn_prev(tn);
361 if (this->fn->ofs + this->fn->size > tn->fn->ofs) {
365 tn->overlapped = 1;
385 this = tn_next(tn);
424 static void ver_insert(struct rb_root *ver_root, struct jffs2_tmp_dnode_info *tn)
434 if (tn->version > this_tn->version)
440 rb_link_node(&tn->rb, parent, link);
441 rb_insert_color(&tn->rb, ver_root);
444 /* Build final, normal fragtree from tn tree. It doesn't matter which order
467 dbg_readinode("tn %p ver %d range 0x%x-0x%x ov %d\n", this, this->version, this->fn->ofs,
546 struct jffs2_tmp_dnode_info *tn, *next;
548 rbtree_postorder_for_each_entry_safe(tn, next, list, rb) {
549 jffs2_free_full_dnode(tn->fn);
550 jffs2_free_tmp_dnode_info(tn);
717 struct jffs2_tmp_dnode_info *tn;
733 tn = jffs2_alloc_tmp_dnode_info();
734 if (!tn) {
735 JFFS2_ERROR("failed to allocate tn (%zu bytes).\n", sizeof(*tn));
739 tn->partial_crc = 0;
796 tn->partial_crc = crc32(0, buf, len);
798 dbg_readinode("Calculates CRC (%#08x) for %d bytes, csize %d\n", tn->partial_crc, len, csize);
802 if (len >= csize && unlikely(tn->partial_crc != je32_to_cpu(rd->data_crc))) {
804 ref_offset(ref), tn->partial_crc, je32_to_cpu(rd->data_crc));
832 tn->fn = jffs2_alloc_full_dnode();
833 if (!tn->fn) {
839 tn->version = je32_to_cpu(rd->version);
840 tn->fn->ofs = je32_to_cpu(rd->offset);
841 tn->data_crc = je32_to_cpu(rd->data_crc);
842 tn->csize = csize;
843 tn->fn->raw = ref;
844 tn->overlapped = 0;
846 if (tn->version > rii->highest_version)
847 rii->highest_version = tn->version;
852 tn->fn->size = csize;
854 tn->fn->size = je32_to_cpu(rd->dsize);
860 ret = jffs2_add_tn_to_tree(c, rii, tn);
863 jffs2_free_full_dnode(tn->fn);
865 jffs2_free_tmp_dnode_info(tn);
870 tn = tn_first(&rii->tn_root);
871 while (tn) {
873 tn, tn->version, tn->fn->ofs,
874 tn->fn->ofs+tn->fn->size, tn->overlapped);
875 tn = tn_next(tn);