__jffs2_dbg_dump_node(c, ref_offset(ref)); 
jffs2_dbg_dump_node(c, ref_offset(ref)); 
read_dnode(struct jffs2_sb_info *c,	   struct jffs2_raw_node_ref *ref,	   struct jffs2_raw_inode *rd,	   uint32_t read,	   struct rb_root *tnp,	   int32_t *latest_mctime,	   uint32_t *mctime_ver){	struct jffs2_eraseblock *jeb;	struct jffs2_tmp_dnode_info *tn;		/* Obsoleted. This cannot happen, surely? dwmw2 20020308 */	BUG_ON(ref_obsolete(ref));	/* If we've never checked the CRCs on this node, check them now */	if (ref_flags(ref) == REF_UNCHECKED) {		uint32_t crc, len;		crc = crc32(0, rd, sizeof(*rd) - 8);		if (unlikely(crc != je32_to_cpu(rd->node_crc))) {			JFFS2_NOTICE("header CRC failed on node at %#08x: read %#08x, calculated %#08x\n",					ref_offset(ref), je32_to_cpu(rd->node_crc), crc);			return 1;		}				/* Sanity checks */		if (unlikely(je32_to_cpu(rd->offset) > je32_to_cpu(rd->isize)) ||		    unlikely(PAD(je32_to_cpu(rd->csize) + sizeof(*rd)) != PAD(je32_to_cpu(rd->totlen)))) {				JFFS2_WARNING("inode node header CRC is corrupted at %#08x\n", ref_offset(ref));				__jffs2_dbg_dump_node(c, ref_offset(ref));			return 1;		}		if (rd->compr != JFFS2_COMPR_ZERO && je32_to_cpu(rd->csize)) {			unsigned char *buf = NULL;			uint32_t pointed = 0;			int err;#ifndef __ECOS			if (c->mtd->point) {				err = c->mtd->point (c->mtd, ref_offset(ref) + sizeof(*rd), je32_to_cpu(rd->csize),						     &read, &buf);				if (unlikely(read < je32_to_cpu(rd->csize)) && likely(!err)) {					JFFS2_ERROR("MTD point returned len too short: 0x%zx\n", read);					c->mtd->unpoint(c->mtd, buf, ref_offset(ref) + sizeof(*rd),							je32_to_cpu(rd->csize));				} else if (unlikely(err)){					JFFS2_ERROR("MTD point failed %d\n", err);				} else					pointed = 1; /* succefully pointed to device */			}#endif								if(!pointed){				buf = kmalloc(je32_to_cpu(rd->csize), GFP_KERNEL);				if (!buf)					return -ENOMEM;								err = jffs2_flash_read(c, ref_offset(ref) + sizeof(*rd), je32_to_cpu(rd->csize),							&read, buf);				if (unlikely(read != je32_to_cpu(rd->csize)) && likely(!err))					err = -EIO;				if (err) {					kfree(buf);					return err;				}			}			crc = crc32(0, buf, je32_to_cpu(rd->csize));			if(!pointed)				kfree(buf);#ifndef __ECOS			else				c->mtd->unpoint(c->mtd, buf, ref_offset(ref) + sizeof(*rd), je32_to_cpu(rd->csize));#endif			if (crc != je32_to_cpu(rd->data_crc)) {				JFFS2_NOTICE("data CRC failed on node at %#08x: read %#08x, calculated %#08x\n",					ref_offset(ref), je32_to_cpu(rd->data_crc), crc);				return 1;			}					}		/* Mark the node as having been checked and fix the accounting accordingly */		jeb = &c->blocks[ref->flash_offset / c->sector_size];		len = ref_totlen(c, jeb, ref);		spin_lock(&c->erase_completion_lock);		jeb->used_size += len;		jeb->unchecked_size -= len;		c->used_size += len;		c->unchecked_size -= len;		/* If node covers at least a whole page, or if it starts at the 		   beginning of a page and runs to the end of the file, or if 		   it's a hole node, mark it REF_PRISTINE, else REF_NORMAL. 		   If it's actually overlapped, it'll get made NORMAL (or OBSOLETE) 		   when the overlapping node(s) get added to the tree anyway. 		*/		if ((je32_to_cpu(rd->dsize) >= PAGE_CACHE_SIZE) ||		    ( ((je32_to_cpu(rd->offset) & (PAGE_CACHE_SIZE-1))==0) &&		      (je32_to_cpu(rd->dsize) + je32_to_cpu(rd->offset) == je32_to_cpu(rd->isize)))) {			JFFS2_DBG_READINODE("marking node at %#08x REF_PRISTINE\n", ref_offset(ref));			ref->flash_offset = ref_offset(ref) | REF_PRISTINE;		} else {			JFFS2_DBG_READINODE("marking node at %#08x REF_NORMAL\n", ref_offset(ref));			ref->flash_offset = ref_offset(ref) | REF_NORMAL;		}		spin_unlock(&c->erase_completion_lock);	}	tn = jffs2_alloc_tmp_dnode_info();	if (!tn) {		JFFS2_ERROR("alloc tn failed\n");		return -ENOMEM;	}	tn->fn = jffs2_alloc_full_dnode();	if (!tn->fn) {		JFFS2_ERROR("alloc fn failed\n");		jffs2_free_tmp_dnode_info(tn);		return -ENOMEM;	}		tn->version = je32_to_cpu(rd->version);	tn->fn->ofs = je32_to_cpu(rd->offset);	tn->fn->raw = ref;		/* There was a bug where we wrote hole nodes out with	   csize/dsize swapped. Deal with it */	if (rd->compr == JFFS2_COMPR_ZERO && !je32_to_cpu(rd->dsize) && je32_to_cpu(rd->csize))		tn->fn->size = je32_to_cpu(rd->csize);	else // normal case...		tn->fn->size = je32_to_cpu(rd->dsize);	JFFS2_DBG_READINODE("dnode @%08x: ver %u, offset %#04x, dsize %#04x\n",		  ref_offset(ref), je32_to_cpu(rd->version), je32_to_cpu(rd->offset), je32_to_cpu(rd->dsize));		jffs2_add_tn_to_tree(tn, tnp);	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/737b7661e059680a68afb3df0a088fd976f666b7/readinode.c/clean/fs/jffs2/readinode.c