xref: /openbmc/linux/fs/jffs2/readinode.c (revision 59d8235b)
1 /*
2  * JFFS2 -- Journalling Flash File System, Version 2.
3  *
4  * Copyright © 2001-2007 Red Hat, Inc.
5  *
6  * Created by David Woodhouse <dwmw2@infradead.org>
7  *
8  * For licensing information, see the file 'LICENCE' in this directory.
9  *
10  */
11 
12 #include <linux/kernel.h>
13 #include <linux/sched.h>
14 #include <linux/slab.h>
15 #include <linux/fs.h>
16 #include <linux/crc32.h>
17 #include <linux/pagemap.h>
18 #include <linux/mtd/mtd.h>
19 #include <linux/compiler.h>
20 #include "nodelist.h"
21 
22 /*
23  * Check the data CRC of the node.
24  *
25  * Returns: 0 if the data CRC is correct;
26  * 	    1 - if incorrect;
27  *	    error code if an error occured.
28  */
29 static int check_node_data(struct jffs2_sb_info *c, struct jffs2_tmp_dnode_info *tn)
30 {
31 	struct jffs2_raw_node_ref *ref = tn->fn->raw;
32 	int err = 0, pointed = 0;
33 	struct jffs2_eraseblock *jeb;
34 	unsigned char *buffer;
35 	uint32_t crc, ofs, len;
36 	size_t retlen;
37 
38 	BUG_ON(tn->csize == 0);
39 
40 	if (!jffs2_is_writebuffered(c))
41 		goto adj_acc;
42 
43 	/* Calculate how many bytes were already checked */
44 	ofs = ref_offset(ref) + sizeof(struct jffs2_raw_inode);
45 	len = ofs % c->wbuf_pagesize;
46 	if (likely(len))
47 		len = c->wbuf_pagesize - len;
48 
49 	if (len >= tn->csize) {
50 		dbg_readinode("no need to check node at %#08x, data length %u, data starts at %#08x - it has already been checked.\n",
51 			ref_offset(ref), tn->csize, ofs);
52 		goto adj_acc;
53 	}
54 
55 	ofs += len;
56 	len = tn->csize - len;
57 
58 	dbg_readinode("check node at %#08x, data length %u, partial CRC %#08x, correct CRC %#08x, data starts at %#08x, start checking from %#08x - %u bytes.\n",
59 		ref_offset(ref), tn->csize, tn->partial_crc, tn->data_crc, ofs - len, ofs, len);
60 
61 #ifndef __ECOS
62 	/* TODO: instead, incapsulate point() stuff to jffs2_flash_read(),
63 	 * adding and jffs2_flash_read_end() interface. */
64 	if (c->mtd->point) {
65 		err = c->mtd->point(c->mtd, ofs, len, &retlen, &buffer);
66 		if (!err && retlen < tn->csize) {
67 			JFFS2_WARNING("MTD point returned len too short: %zu instead of %u.\n", retlen, tn->csize);
68 			c->mtd->unpoint(c->mtd, buffer, ofs, retlen);
69 		} else if (err)
70 			JFFS2_WARNING("MTD point failed: error code %d.\n", err);
71 		else
72 			pointed = 1; /* succefully pointed to device */
73 	}
74 #endif
75 
76 	if (!pointed) {
77 		buffer = kmalloc(len, GFP_KERNEL);
78 		if (unlikely(!buffer))
79 			return -ENOMEM;
80 
81 		/* TODO: this is very frequent pattern, make it a separate
82 		 * routine */
83 		err = jffs2_flash_read(c, ofs, len, &retlen, buffer);
84 		if (err) {
85 			JFFS2_ERROR("can not read %d bytes from 0x%08x, error code: %d.\n", len, ofs, err);
86 			goto free_out;
87 		}
88 
89 		if (retlen != len) {
90 			JFFS2_ERROR("short read at %#08x: %zd instead of %d.\n", ofs, retlen, len);
91 			err = -EIO;
92 			goto free_out;
93 		}
94 	}
95 
96 	/* Continue calculating CRC */
97 	crc = crc32(tn->partial_crc, buffer, len);
98 	if(!pointed)
99 		kfree(buffer);
100 #ifndef __ECOS
101 	else
102 		c->mtd->unpoint(c->mtd, buffer, ofs, len);
103 #endif
104 
105 	if (crc != tn->data_crc) {
106 		JFFS2_NOTICE("wrong data CRC in data node at 0x%08x: read %#08x, calculated %#08x.\n",
107 			     ref_offset(ref), tn->data_crc, crc);
108 		return 1;
109 	}
110 
111 adj_acc:
112 	jeb = &c->blocks[ref->flash_offset / c->sector_size];
113 	len = ref_totlen(c, jeb, ref);
114 	/* If it should be REF_NORMAL, it'll get marked as such when
115 	   we build the fragtree, shortly. No need to worry about GC
116 	   moving it while it's marked REF_PRISTINE -- GC won't happen
117 	   till we've finished checking every inode anyway. */
118 	ref->flash_offset |= REF_PRISTINE;
119 	/*
120 	 * Mark the node as having been checked and fix the
121 	 * accounting accordingly.
122 	 */
123 	spin_lock(&c->erase_completion_lock);
124 	jeb->used_size += len;
125 	jeb->unchecked_size -= len;
126 	c->used_size += len;
127 	c->unchecked_size -= len;
128 	jffs2_dbg_acct_paranoia_check_nolock(c, jeb);
129 	spin_unlock(&c->erase_completion_lock);
130 
131 	return 0;
132 
133 free_out:
134 	if(!pointed)
135 		kfree(buffer);
136 #ifndef __ECOS
137 	else
138 		c->mtd->unpoint(c->mtd, buffer, ofs, len);
139 #endif
140 	return err;
141 }
142 
143 /*
144  * Helper function for jffs2_add_older_frag_to_fragtree().
145  *
146  * Checks the node if we are in the checking stage.
147  */
148 static int check_tn_node(struct jffs2_sb_info *c, struct jffs2_tmp_dnode_info *tn)
149 {
150 	int ret;
151 
152 	BUG_ON(ref_obsolete(tn->fn->raw));
153 
154 	/* We only check the data CRC of unchecked nodes */
155 	if (ref_flags(tn->fn->raw) != REF_UNCHECKED)
156 		return 0;
157 
158 	dbg_readinode("check node %#04x-%#04x, phys offs %#08x\n",
159 		      tn->fn->ofs, tn->fn->ofs + tn->fn->size, ref_offset(tn->fn->raw));
160 
161 	ret = check_node_data(c, tn);
162 	if (unlikely(ret < 0)) {
163 		JFFS2_ERROR("check_node_data() returned error: %d.\n",
164 			ret);
165 	} else if (unlikely(ret > 0)) {
166 		dbg_readinode("CRC error, mark it obsolete.\n");
167 		jffs2_mark_node_obsolete(c, tn->fn->raw);
168 	}
169 
170 	return ret;
171 }
172 
173 static struct jffs2_tmp_dnode_info *jffs2_lookup_tn(struct rb_root *tn_root, uint32_t offset)
174 {
175 	struct rb_node *next;
176 	struct jffs2_tmp_dnode_info *tn = NULL;
177 
178 	dbg_readinode("root %p, offset %d\n", tn_root, offset);
179 
180 	next = tn_root->rb_node;
181 
182 	while (next) {
183 		tn = rb_entry(next, struct jffs2_tmp_dnode_info, rb);
184 
185 		if (tn->fn->ofs < offset)
186 			next = tn->rb.rb_right;
187 		else if (tn->fn->ofs >= offset)
188 			next = tn->rb.rb_left;
189 		else
190 			break;
191 	}
192 
193 	return tn;
194 }
195 
196 
197 static void jffs2_kill_tn(struct jffs2_sb_info *c, struct jffs2_tmp_dnode_info *tn)
198 {
199 	jffs2_mark_node_obsolete(c, tn->fn->raw);
200 	jffs2_free_full_dnode(tn->fn);
201 	jffs2_free_tmp_dnode_info(tn);
202 }
203 /*
204  * This function is used when we read an inode. Data nodes arrive in
205  * arbitrary order -- they may be older or newer than the nodes which
206  * are already in the tree. Where overlaps occur, the older node can
207  * be discarded as long as the newer passes the CRC check. We don't
208  * bother to keep track of holes in this rbtree, and neither do we deal
209  * with frags -- we can have multiple entries starting at the same
210  * offset, and the one with the smallest length will come first in the
211  * ordering.
212  *
213  * Returns 0 if the node was handled (including marking it obsolete)
214  *	 < 0 an if error occurred
215  */
216 static int jffs2_add_tn_to_tree(struct jffs2_sb_info *c,
217 				struct jffs2_readinode_info *rii,
218 				struct jffs2_tmp_dnode_info *tn)
219 {
220 	uint32_t fn_end = tn->fn->ofs + tn->fn->size;
221 	struct jffs2_tmp_dnode_info *this;
222 
223 	dbg_readinode("insert fragment %#04x-%#04x, ver %u at %08x\n", tn->fn->ofs, fn_end, tn->version, ref_offset(tn->fn->raw));
224 
225 	/* If a node has zero dsize, we only have to keep if it if it might be the
226 	   node with highest version -- i.e. the one which will end up as f->metadata.
227 	   Note that such nodes won't be REF_UNCHECKED since there are no data to
228 	   check anyway. */
229 	if (!tn->fn->size) {
230 		if (rii->mdata_tn) {
231 			if (rii->mdata_tn->version < tn->version) {
232 				/* We had a candidate mdata node already */
233 				dbg_readinode("kill old mdata with ver %d\n", rii->mdata_tn->version);
234 				jffs2_kill_tn(c, rii->mdata_tn);
235 			} else {
236 				dbg_readinode("kill new mdata with ver %d (older than existing %d\n",
237 					      tn->version, rii->mdata_tn->version);
238 				jffs2_kill_tn(c, tn);
239 				return 0;
240 			}
241 		}
242 		rii->mdata_tn = tn;
243 		dbg_readinode("keep new mdata with ver %d\n", tn->version);
244 		return 0;
245 	}
246 
247 	/* Find the earliest node which _may_ be relevant to this one */
248 	this = jffs2_lookup_tn(&rii->tn_root, tn->fn->ofs);
249 	if (this) {
250 		/* If the node is coincident with another at a lower address,
251 		   back up until the other node is found. It may be relevant */
252 		while (this->overlapped)
253 			this = tn_prev(this);
254 
255 		/* First node should never be marked overlapped */
256 		BUG_ON(!this);
257 		dbg_readinode("'this' found %#04x-%#04x (%s)\n", this->fn->ofs, this->fn->ofs + this->fn->size, this->fn ? "data" : "hole");
258 	}
259 
260 	while (this) {
261 		if (this->fn->ofs > fn_end)
262 			break;
263 		dbg_readinode("Ponder this ver %d, 0x%x-0x%x\n",
264 			      this->version, this->fn->ofs, this->fn->size);
265 
266 		if (this->version == tn->version) {
267 			/* Version number collision means REF_PRISTINE GC. Accept either of them
268 			   as long as the CRC is correct. Check the one we have already...  */
269 			if (!check_tn_node(c, this)) {
270 				/* The one we already had was OK. Keep it and throw away the new one */
271 				dbg_readinode("Like old node. Throw away new\n");
272 				jffs2_kill_tn(c, tn);
273 				return 0;
274 			} else {
275 				/* Who cares if the new one is good; keep it for now anyway. */
276 				dbg_readinode("Like new node. Throw away old\n");
277 				rb_replace_node(&this->rb, &tn->rb, &rii->tn_root);
278 				jffs2_kill_tn(c, this);
279 				/* Same overlapping from in front and behind */
280 				return 0;
281 			}
282 		}
283 		if (this->version < tn->version &&
284 		    this->fn->ofs >= tn->fn->ofs &&
285 		    this->fn->ofs + this->fn->size <= fn_end) {
286 			/* New node entirely overlaps 'this' */
287 			if (check_tn_node(c, tn)) {
288 				dbg_readinode("new node bad CRC\n");
289 				jffs2_kill_tn(c, tn);
290 				return 0;
291 			}
292 			/* ... and is good. Kill 'this' and any subsequent nodes which are also overlapped */
293 			while (this && this->fn->ofs + this->fn->size <= fn_end) {
294 				struct jffs2_tmp_dnode_info *next = tn_next(this);
295 				if (this->version < tn->version) {
296 					tn_erase(this, &rii->tn_root);
297 					dbg_readinode("Kill overlapped ver %d, 0x%x-0x%x\n",
298 						      this->version, this->fn->ofs,
299 						      this->fn->ofs+this->fn->size);
300 					jffs2_kill_tn(c, this);
301 				}
302 				this = next;
303 			}
304 			dbg_readinode("Done killing overlapped nodes\n");
305 			continue;
306 		}
307 		if (this->version > tn->version &&
308 		    this->fn->ofs <= tn->fn->ofs &&
309 		    this->fn->ofs+this->fn->size >= fn_end) {
310 			/* New node entirely overlapped by 'this' */
311 			if (!check_tn_node(c, this)) {
312 				dbg_readinode("Good CRC on old node. Kill new\n");
313 				jffs2_kill_tn(c, tn);
314 				return 0;
315 			}
316 			/* ... but 'this' was bad. Replace it... */
317 			dbg_readinode("Bad CRC on old overlapping node. Kill it\n");
318 			tn_erase(this, &rii->tn_root);
319 			jffs2_kill_tn(c, this);
320 			break;
321 		}
322 
323 		this = tn_next(this);
324 	}
325 
326 	/* We neither completely obsoleted nor were completely
327 	   obsoleted by an earlier node. Insert into the tree */
328 	{
329 		struct rb_node *parent;
330 		struct rb_node **link = &rii->tn_root.rb_node;
331 		struct jffs2_tmp_dnode_info *insert_point = NULL;
332 
333 		while (*link) {
334 			parent = *link;
335 			insert_point = rb_entry(parent, struct jffs2_tmp_dnode_info, rb);
336 			if (tn->fn->ofs > insert_point->fn->ofs)
337 				link = &insert_point->rb.rb_right;
338 			else if (tn->fn->ofs < insert_point->fn->ofs ||
339 				 tn->fn->size < insert_point->fn->size)
340 				link = &insert_point->rb.rb_left;
341 			else
342 				link = &insert_point->rb.rb_right;
343 		}
344 		rb_link_node(&tn->rb, &insert_point->rb, link);
345 		rb_insert_color(&tn->rb, &rii->tn_root);
346 	}
347 
348 	/* If there's anything behind that overlaps us, note it */
349 	this = tn_prev(tn);
350 	if (this) {
351 		while (1) {
352 			if (this->fn->ofs + this->fn->size > tn->fn->ofs) {
353 				dbg_readinode("Node is overlapped by %p (v %d, 0x%x-0x%x)\n",
354 					      this, this->version, this->fn->ofs,
355 					      this->fn->ofs+this->fn->size);
356 				tn->overlapped = 1;
357 				break;
358 			}
359 			if (!this->overlapped)
360 				break;
361 			this = tn_prev(this);
362 		}
363 	}
364 
365 	/* If the new node overlaps anything ahead, note it */
366 	this = tn_next(tn);
367 	while (this && this->fn->ofs < fn_end) {
368 		this->overlapped = 1;
369 		dbg_readinode("Node ver %d, 0x%x-0x%x is overlapped\n",
370 			      this->version, this->fn->ofs,
371 			      this->fn->ofs+this->fn->size);
372 		this = tn_next(this);
373 	}
374 	return 0;
375 }
376 
377 /* Trivial function to remove the last node in the tree. Which by definition
378    has no right-hand -- so can be removed just by making its only child (if
379    any) take its place under its parent. */
380 static void eat_last(struct rb_root *root, struct rb_node *node)
381 {
382 	struct rb_node *parent = rb_parent(node);
383 	struct rb_node **link;
384 
385 	/* LAST! */
386 	BUG_ON(node->rb_right);
387 
388 	if (!parent)
389 		link = &root->rb_node;
390 	else if (node == parent->rb_left)
391 		link = &parent->rb_left;
392 	else
393 		link = &parent->rb_right;
394 
395 	*link = node->rb_left;
396 	/* Colour doesn't matter now. Only the parent pointer. */
397 	if (node->rb_left)
398 		node->rb_left->rb_parent_color = node->rb_parent_color;
399 }
400 
401 /* We put this in reverse order, so we can just use eat_last */
402 static void ver_insert(struct rb_root *ver_root, struct jffs2_tmp_dnode_info *tn)
403 {
404 	struct rb_node **link = &ver_root->rb_node;
405 	struct rb_node *parent = NULL;
406 	struct jffs2_tmp_dnode_info *this_tn;
407 
408 	while (*link) {
409 		parent = *link;
410 		this_tn = rb_entry(parent, struct jffs2_tmp_dnode_info, rb);
411 
412 		if (tn->version > this_tn->version)
413 			link = &parent->rb_left;
414 		else
415 			link = &parent->rb_right;
416 	}
417 	dbg_readinode("Link new node at %p (root is %p)\n", link, ver_root);
418 	rb_link_node(&tn->rb, parent, link);
419 	rb_insert_color(&tn->rb, ver_root);
420 }
421 
422 /* Build final, normal fragtree from tn tree. It doesn't matter which order
423    we add nodes to the real fragtree, as long as they don't overlap. And
424    having thrown away the majority of overlapped nodes as we went, there
425    really shouldn't be many sets of nodes which do overlap. If we start at
426    the end, we can use the overlap markers -- we can just eat nodes which
427    aren't overlapped, and when we encounter nodes which _do_ overlap we
428    sort them all into a temporary tree in version order before replaying them. */
429 static int jffs2_build_inode_fragtree(struct jffs2_sb_info *c,
430 				      struct jffs2_inode_info *f,
431 				      struct jffs2_readinode_info *rii)
432 {
433 	struct jffs2_tmp_dnode_info *pen, *last, *this;
434 	struct rb_root ver_root = RB_ROOT;
435 	uint32_t high_ver = 0;
436 
437 	if (rii->mdata_tn) {
438 		dbg_readinode("potential mdata is ver %d at %p\n", rii->mdata_tn->version, rii->mdata_tn);
439 		high_ver = rii->mdata_tn->version;
440 		rii->latest_ref = rii->mdata_tn->fn->raw;
441 	}
442 #ifdef JFFS2_DBG_READINODE_MESSAGES
443 	this = tn_last(&rii->tn_root);
444 	while (this) {
445 		dbg_readinode("tn %p ver %d range 0x%x-0x%x ov %d\n", this, this->version, this->fn->ofs,
446 			      this->fn->ofs+this->fn->size, this->overlapped);
447 		this = tn_prev(this);
448 	}
449 #endif
450 	pen = tn_last(&rii->tn_root);
451 	while ((last = pen)) {
452 		pen = tn_prev(last);
453 
454 		eat_last(&rii->tn_root, &last->rb);
455 		ver_insert(&ver_root, last);
456 
457 		if (unlikely(last->overlapped))
458 			continue;
459 
460 		/* Now we have a bunch of nodes in reverse version
461 		   order, in the tree at ver_root. Most of the time,
462 		   there'll actually be only one node in the 'tree',
463 		   in fact. */
464 		this = tn_last(&ver_root);
465 
466 		while (this) {
467 			struct jffs2_tmp_dnode_info *vers_next;
468 			int ret;
469 			vers_next = tn_prev(this);
470 			eat_last(&ver_root, &this->rb);
471 			if (check_tn_node(c, this)) {
472 				dbg_readinode("node ver %d, 0x%x-0x%x failed CRC\n",
473 					     this->version, this->fn->ofs,
474 					     this->fn->ofs+this->fn->size);
475 				jffs2_kill_tn(c, this);
476 			} else {
477 				if (this->version > high_ver) {
478 					/* Note that this is different from the other
479 					   highest_version, because this one is only
480 					   counting _valid_ nodes which could give the
481 					   latest inode metadata */
482 					high_ver = this->version;
483 					rii->latest_ref = this->fn->raw;
484 				}
485 				dbg_readinode("Add %p (v %d, 0x%x-0x%x, ov %d) to fragtree\n",
486 					     this, this->version, this->fn->ofs,
487 					     this->fn->ofs+this->fn->size, this->overlapped);
488 
489 				ret = jffs2_add_full_dnode_to_inode(c, f, this->fn);
490 				if (ret) {
491 					/* Free the nodes in vers_root; let the caller
492 					   deal with the rest */
493 					JFFS2_ERROR("Add node to tree failed %d\n", ret);
494 					while (1) {
495 						vers_next = tn_prev(this);
496 						if (check_tn_node(c, this))
497 							jffs2_mark_node_obsolete(c, this->fn->raw);
498 						jffs2_free_full_dnode(this->fn);
499 						jffs2_free_tmp_dnode_info(this);
500 						this = vers_next;
501 						if (!this)
502 							break;
503 						eat_last(&ver_root, &vers_next->rb);
504 					}
505 					return ret;
506 				}
507 				jffs2_free_tmp_dnode_info(this);
508 			}
509 			this = vers_next;
510 		}
511 	}
512 	return 0;
513 }
514 
515 static void jffs2_free_tmp_dnode_info_list(struct rb_root *list)
516 {
517 	struct rb_node *this;
518 	struct jffs2_tmp_dnode_info *tn;
519 
520 	this = list->rb_node;
521 
522 	/* Now at bottom of tree */
523 	while (this) {
524 		if (this->rb_left)
525 			this = this->rb_left;
526 		else if (this->rb_right)
527 			this = this->rb_right;
528 		else {
529 			tn = rb_entry(this, struct jffs2_tmp_dnode_info, rb);
530 			jffs2_free_full_dnode(tn->fn);
531 			jffs2_free_tmp_dnode_info(tn);
532 
533 			this = rb_parent(this);
534 			if (!this)
535 				break;
536 
537 			if (this->rb_left == &tn->rb)
538 				this->rb_left = NULL;
539 			else if (this->rb_right == &tn->rb)
540 				this->rb_right = NULL;
541 			else BUG();
542 		}
543 	}
544 	list->rb_node = NULL;
545 }
546 
547 static void jffs2_free_full_dirent_list(struct jffs2_full_dirent *fd)
548 {
549 	struct jffs2_full_dirent *next;
550 
551 	while (fd) {
552 		next = fd->next;
553 		jffs2_free_full_dirent(fd);
554 		fd = next;
555 	}
556 }
557 
558 /* Returns first valid node after 'ref'. May return 'ref' */
559 static struct jffs2_raw_node_ref *jffs2_first_valid_node(struct jffs2_raw_node_ref *ref)
560 {
561 	while (ref && ref->next_in_ino) {
562 		if (!ref_obsolete(ref))
563 			return ref;
564 		dbg_noderef("node at 0x%08x is obsoleted. Ignoring.\n", ref_offset(ref));
565 		ref = ref->next_in_ino;
566 	}
567 	return NULL;
568 }
569 
570 /*
571  * Helper function for jffs2_get_inode_nodes().
572  * It is called every time an directory entry node is found.
573  *
574  * Returns: 0 on success;
575  * 	    negative error code on failure.
576  */
577 static inline int read_direntry(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *ref,
578 				struct jffs2_raw_dirent *rd, size_t read,
579 				struct jffs2_readinode_info *rii)
580 {
581 	struct jffs2_full_dirent *fd;
582 	uint32_t crc;
583 
584 	/* Obsoleted. This cannot happen, surely? dwmw2 20020308 */
585 	BUG_ON(ref_obsolete(ref));
586 
587 	crc = crc32(0, rd, sizeof(*rd) - 8);
588 	if (unlikely(crc != je32_to_cpu(rd->node_crc))) {
589 		JFFS2_NOTICE("header CRC failed on dirent node at %#08x: read %#08x, calculated %#08x\n",
590 			     ref_offset(ref), je32_to_cpu(rd->node_crc), crc);
591 		jffs2_mark_node_obsolete(c, ref);
592 		return 0;
593 	}
594 
595 	/* If we've never checked the CRCs on this node, check them now */
596 	if (ref_flags(ref) == REF_UNCHECKED) {
597 		struct jffs2_eraseblock *jeb;
598 		int len;
599 
600 		/* Sanity check */
601 		if (unlikely(PAD((rd->nsize + sizeof(*rd))) != PAD(je32_to_cpu(rd->totlen)))) {
602 			JFFS2_ERROR("illegal nsize in node at %#08x: nsize %#02x, totlen %#04x\n",
603 				    ref_offset(ref), rd->nsize, je32_to_cpu(rd->totlen));
604 			jffs2_mark_node_obsolete(c, ref);
605 			return 0;
606 		}
607 
608 		jeb = &c->blocks[ref->flash_offset / c->sector_size];
609 		len = ref_totlen(c, jeb, ref);
610 
611 		spin_lock(&c->erase_completion_lock);
612 		jeb->used_size += len;
613 		jeb->unchecked_size -= len;
614 		c->used_size += len;
615 		c->unchecked_size -= len;
616 		ref->flash_offset = ref_offset(ref) | dirent_node_state(rd);
617 		spin_unlock(&c->erase_completion_lock);
618 	}
619 
620 	fd = jffs2_alloc_full_dirent(rd->nsize + 1);
621 	if (unlikely(!fd))
622 		return -ENOMEM;
623 
624 	fd->raw = ref;
625 	fd->version = je32_to_cpu(rd->version);
626 	fd->ino = je32_to_cpu(rd->ino);
627 	fd->type = rd->type;
628 
629 	if (fd->version > rii->highest_version)
630 		rii->highest_version = fd->version;
631 
632 	/* Pick out the mctime of the latest dirent */
633 	if(fd->version > rii->mctime_ver && je32_to_cpu(rd->mctime)) {
634 		rii->mctime_ver = fd->version;
635 		rii->latest_mctime = je32_to_cpu(rd->mctime);
636 	}
637 
638 	/*
639 	 * Copy as much of the name as possible from the raw
640 	 * dirent we've already read from the flash.
641 	 */
642 	if (read > sizeof(*rd))
643 		memcpy(&fd->name[0], &rd->name[0],
644 		       min_t(uint32_t, rd->nsize, (read - sizeof(*rd)) ));
645 
646 	/* Do we need to copy any more of the name directly from the flash? */
647 	if (rd->nsize + sizeof(*rd) > read) {
648 		/* FIXME: point() */
649 		int err;
650 		int already = read - sizeof(*rd);
651 
652 		err = jffs2_flash_read(c, (ref_offset(ref)) + read,
653 				rd->nsize - already, &read, &fd->name[already]);
654 		if (unlikely(read != rd->nsize - already) && likely(!err))
655 			return -EIO;
656 
657 		if (unlikely(err)) {
658 			JFFS2_ERROR("read remainder of name: error %d\n", err);
659 			jffs2_free_full_dirent(fd);
660 			return -EIO;
661 		}
662 	}
663 
664 	fd->nhash = full_name_hash(fd->name, rd->nsize);
665 	fd->next = NULL;
666 	fd->name[rd->nsize] = '\0';
667 
668 	/*
669 	 * Wheee. We now have a complete jffs2_full_dirent structure, with
670 	 * the name in it and everything. Link it into the list
671 	 */
672 	jffs2_add_fd_to_list(c, fd, &rii->fds);
673 
674 	return 0;
675 }
676 
677 /*
678  * Helper function for jffs2_get_inode_nodes().
679  * It is called every time an inode node is found.
680  *
681  * Returns: 0 on success (possibly after marking a bad node obsolete);
682  * 	    negative error code on failure.
683  */
684 static inline int read_dnode(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *ref,
685 			     struct jffs2_raw_inode *rd, int rdlen,
686 			     struct jffs2_readinode_info *rii)
687 {
688 	struct jffs2_tmp_dnode_info *tn;
689 	uint32_t len, csize;
690 	int ret = 0;
691 	uint32_t crc;
692 
693 	/* Obsoleted. This cannot happen, surely? dwmw2 20020308 */
694 	BUG_ON(ref_obsolete(ref));
695 
696 	crc = crc32(0, rd, sizeof(*rd) - 8);
697 	if (unlikely(crc != je32_to_cpu(rd->node_crc))) {
698 		JFFS2_NOTICE("node CRC failed on dnode at %#08x: read %#08x, calculated %#08x\n",
699 			     ref_offset(ref), je32_to_cpu(rd->node_crc), crc);
700 		jffs2_mark_node_obsolete(c, ref);
701 		return 0;
702 	}
703 
704 	tn = jffs2_alloc_tmp_dnode_info();
705 	if (!tn) {
706 		JFFS2_ERROR("failed to allocate tn (%zu bytes).\n", sizeof(*tn));
707 		return -ENOMEM;
708 	}
709 
710 	tn->partial_crc = 0;
711 	csize = je32_to_cpu(rd->csize);
712 
713 	/* If we've never checked the CRCs on this node, check them now */
714 	if (ref_flags(ref) == REF_UNCHECKED) {
715 
716 		/* Sanity checks */
717 		if (unlikely(je32_to_cpu(rd->offset) > je32_to_cpu(rd->isize)) ||
718 		    unlikely(PAD(je32_to_cpu(rd->csize) + sizeof(*rd)) != PAD(je32_to_cpu(rd->totlen)))) {
719 			JFFS2_WARNING("inode node header CRC is corrupted at %#08x\n", ref_offset(ref));
720 			jffs2_dbg_dump_node(c, ref_offset(ref));
721 			jffs2_mark_node_obsolete(c, ref);
722 			goto free_out;
723 		}
724 
725 		if (jffs2_is_writebuffered(c) && csize != 0) {
726 			/* At this point we are supposed to check the data CRC
727 			 * of our unchecked node. But thus far, we do not
728 			 * know whether the node is valid or obsolete. To
729 			 * figure this out, we need to walk all the nodes of
730 			 * the inode and build the inode fragtree. We don't
731 			 * want to spend time checking data of nodes which may
732 			 * later be found to be obsolete. So we put off the full
733 			 * data CRC checking until we have read all the inode
734 			 * nodes and have started building the fragtree.
735 			 *
736 			 * The fragtree is being built starting with nodes
737 			 * having the highest version number, so we'll be able
738 			 * to detect whether a node is valid (i.e., it is not
739 			 * overlapped by a node with higher version) or not.
740 			 * And we'll be able to check only those nodes, which
741 			 * are not obsolete.
742 			 *
743 			 * Of course, this optimization only makes sense in case
744 			 * of NAND flashes (or other flashes whith
745 			 * !jffs2_can_mark_obsolete()), since on NOR flashes
746 			 * nodes are marked obsolete physically.
747 			 *
748 			 * Since NAND flashes (or other flashes with
749 			 * jffs2_is_writebuffered(c)) are anyway read by
750 			 * fractions of c->wbuf_pagesize, and we have just read
751 			 * the node header, it is likely that the starting part
752 			 * of the node data is also read when we read the
753 			 * header. So we don't mind to check the CRC of the
754 			 * starting part of the data of the node now, and check
755 			 * the second part later (in jffs2_check_node_data()).
756 			 * Of course, we will not need to re-read and re-check
757 			 * the NAND page which we have just read. This is why we
758 			 * read the whole NAND page at jffs2_get_inode_nodes(),
759 			 * while we needed only the node header.
760 			 */
761 			unsigned char *buf;
762 
763 			/* 'buf' will point to the start of data */
764 			buf = (unsigned char *)rd + sizeof(*rd);
765 			/* len will be the read data length */
766 			len = min_t(uint32_t, rdlen - sizeof(*rd), csize);
767 			tn->partial_crc = crc32(0, buf, len);
768 
769 			dbg_readinode("Calculates CRC (%#08x) for %d bytes, csize %d\n", tn->partial_crc, len, csize);
770 
771 			/* If we actually calculated the whole data CRC
772 			 * and it is wrong, drop the node. */
773 			if (len >= csize && unlikely(tn->partial_crc != je32_to_cpu(rd->data_crc))) {
774 				JFFS2_NOTICE("wrong data CRC in data node at 0x%08x: read %#08x, calculated %#08x.\n",
775 					ref_offset(ref), tn->partial_crc, je32_to_cpu(rd->data_crc));
776 				jffs2_mark_node_obsolete(c, ref);
777 				goto free_out;
778 			}
779 
780 		} else if (csize == 0) {
781 			/*
782 			 * We checked the header CRC. If the node has no data, adjust
783 			 * the space accounting now. For other nodes this will be done
784 			 * later either when the node is marked obsolete or when its
785 			 * data is checked.
786 			 */
787 			struct jffs2_eraseblock *jeb;
788 
789 			dbg_readinode("the node has no data.\n");
790 			jeb = &c->blocks[ref->flash_offset / c->sector_size];
791 			len = ref_totlen(c, jeb, ref);
792 
793 			spin_lock(&c->erase_completion_lock);
794 			jeb->used_size += len;
795 			jeb->unchecked_size -= len;
796 			c->used_size += len;
797 			c->unchecked_size -= len;
798 			ref->flash_offset = ref_offset(ref) | REF_NORMAL;
799 			spin_unlock(&c->erase_completion_lock);
800 		}
801 	}
802 
803 	tn->fn = jffs2_alloc_full_dnode();
804 	if (!tn->fn) {
805 		JFFS2_ERROR("alloc fn failed\n");
806 		ret = -ENOMEM;
807 		goto free_out;
808 	}
809 
810 	tn->version = je32_to_cpu(rd->version);
811 	tn->fn->ofs = je32_to_cpu(rd->offset);
812 	tn->data_crc = je32_to_cpu(rd->data_crc);
813 	tn->csize = csize;
814 	tn->fn->raw = ref;
815 	tn->overlapped = 0;
816 
817 	if (tn->version > rii->highest_version)
818 		rii->highest_version = tn->version;
819 
820 	/* There was a bug where we wrote hole nodes out with
821 	   csize/dsize swapped. Deal with it */
822 	if (rd->compr == JFFS2_COMPR_ZERO && !je32_to_cpu(rd->dsize) && csize)
823 		tn->fn->size = csize;
824 	else // normal case...
825 		tn->fn->size = je32_to_cpu(rd->dsize);
826 
827 	dbg_readinode("dnode @%08x: ver %u, offset %#04x, dsize %#04x, csize %#04x\n",
828 		  ref_offset(ref), je32_to_cpu(rd->version), je32_to_cpu(rd->offset), je32_to_cpu(rd->dsize), csize);
829 
830 	ret = jffs2_add_tn_to_tree(c, rii, tn);
831 
832 	if (ret) {
833 		jffs2_free_full_dnode(tn->fn);
834 	free_out:
835 		jffs2_free_tmp_dnode_info(tn);
836 		return ret;
837 	}
838 #ifdef JFFS2_DBG_READINODE_MESSAGES
839 	dbg_readinode("After adding ver %d:\n", je32_to_cpu(rd->version));
840 	tn = tn_first(&rii->tn_root);
841 	while (tn) {
842 		dbg_readinode("%p: v %d r 0x%x-0x%x ov %d\n",
843 			     tn, tn->version, tn->fn->ofs,
844 			     tn->fn->ofs+tn->fn->size, tn->overlapped);
845 		tn = tn_next(tn);
846 	}
847 #endif
848 	return 0;
849 }
850 
851 /*
852  * Helper function for jffs2_get_inode_nodes().
853  * It is called every time an unknown node is found.
854  *
855  * Returns: 0 on success;
856  * 	    negative error code on failure.
857  */
858 static inline int read_unknown(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *ref, struct jffs2_unknown_node *un)
859 {
860 	/* We don't mark unknown nodes as REF_UNCHECKED */
861 	if (ref_flags(ref) == REF_UNCHECKED) {
862 		JFFS2_ERROR("REF_UNCHECKED but unknown node at %#08x\n",
863 			    ref_offset(ref));
864 		JFFS2_ERROR("Node is {%04x,%04x,%08x,%08x}. Please report this error.\n",
865 			    je16_to_cpu(un->magic), je16_to_cpu(un->nodetype),
866 			    je32_to_cpu(un->totlen), je32_to_cpu(un->hdr_crc));
867 		jffs2_mark_node_obsolete(c, ref);
868 		return 0;
869 	}
870 
871 	un->nodetype = cpu_to_je16(JFFS2_NODE_ACCURATE | je16_to_cpu(un->nodetype));
872 
873 	switch(je16_to_cpu(un->nodetype) & JFFS2_COMPAT_MASK) {
874 
875 	case JFFS2_FEATURE_INCOMPAT:
876 		JFFS2_ERROR("unknown INCOMPAT nodetype %#04X at %#08x\n",
877 			    je16_to_cpu(un->nodetype), ref_offset(ref));
878 		/* EEP */
879 		BUG();
880 		break;
881 
882 	case JFFS2_FEATURE_ROCOMPAT:
883 		JFFS2_ERROR("unknown ROCOMPAT nodetype %#04X at %#08x\n",
884 			    je16_to_cpu(un->nodetype), ref_offset(ref));
885 		BUG_ON(!(c->flags & JFFS2_SB_FLAG_RO));
886 		break;
887 
888 	case JFFS2_FEATURE_RWCOMPAT_COPY:
889 		JFFS2_NOTICE("unknown RWCOMPAT_COPY nodetype %#04X at %#08x\n",
890 			     je16_to_cpu(un->nodetype), ref_offset(ref));
891 		break;
892 
893 	case JFFS2_FEATURE_RWCOMPAT_DELETE:
894 		JFFS2_NOTICE("unknown RWCOMPAT_DELETE nodetype %#04X at %#08x\n",
895 			     je16_to_cpu(un->nodetype), ref_offset(ref));
896 		jffs2_mark_node_obsolete(c, ref);
897 		return 0;
898 	}
899 
900 	return 0;
901 }
902 
903 /*
904  * Helper function for jffs2_get_inode_nodes().
905  * The function detects whether more data should be read and reads it if yes.
906  *
907  * Returns: 0 on succes;
908  * 	    negative error code on failure.
909  */
910 static int read_more(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *ref,
911 		     int needed_len, int *rdlen, unsigned char *buf)
912 {
913 	int err, to_read = needed_len - *rdlen;
914 	size_t retlen;
915 	uint32_t offs;
916 
917 	if (jffs2_is_writebuffered(c)) {
918 		int rem = to_read % c->wbuf_pagesize;
919 
920 		if (rem)
921 			to_read += c->wbuf_pagesize - rem;
922 	}
923 
924 	/* We need to read more data */
925 	offs = ref_offset(ref) + *rdlen;
926 
927 	dbg_readinode("read more %d bytes\n", to_read);
928 
929 	err = jffs2_flash_read(c, offs, to_read, &retlen, buf + *rdlen);
930 	if (err) {
931 		JFFS2_ERROR("can not read %d bytes from 0x%08x, "
932 			"error code: %d.\n", to_read, offs, err);
933 		return err;
934 	}
935 
936 	if (retlen < to_read) {
937 		JFFS2_ERROR("short read at %#08x: %zu instead of %d.\n",
938 				offs, retlen, to_read);
939 		return -EIO;
940 	}
941 
942 	*rdlen += to_read;
943 	return 0;
944 }
945 
946 /* Get tmp_dnode_info and full_dirent for all non-obsolete nodes associated
947    with this ino. Perform a preliminary ordering on data nodes, throwing away
948    those which are completely obsoleted by newer ones. The naïve approach we
949    use to take of just returning them _all_ in version order will cause us to
950    run out of memory in certain degenerate cases. */
951 static int jffs2_get_inode_nodes(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
952 				 struct jffs2_readinode_info *rii)
953 {
954 	struct jffs2_raw_node_ref *ref, *valid_ref;
955 	unsigned char *buf = NULL;
956 	union jffs2_node_union *node;
957 	size_t retlen;
958 	int len, err;
959 
960 	rii->mctime_ver = 0;
961 
962 	dbg_readinode("ino #%u\n", f->inocache->ino);
963 
964 	/* FIXME: in case of NOR and available ->point() this
965 	 * needs to be fixed. */
966 	len = sizeof(union jffs2_node_union) + c->wbuf_pagesize;
967 	buf = kmalloc(len, GFP_KERNEL);
968 	if (!buf)
969 		return -ENOMEM;
970 
971 	spin_lock(&c->erase_completion_lock);
972 	valid_ref = jffs2_first_valid_node(f->inocache->nodes);
973 	if (!valid_ref && f->inocache->ino != 1)
974 		JFFS2_WARNING("Eep. No valid nodes for ino #%u.\n", f->inocache->ino);
975 	while (valid_ref) {
976 		/* We can hold a pointer to a non-obsolete node without the spinlock,
977 		   but _obsolete_ nodes may disappear at any time, if the block
978 		   they're in gets erased. So if we mark 'ref' obsolete while we're
979 		   not holding the lock, it can go away immediately. For that reason,
980 		   we find the next valid node first, before processing 'ref'.
981 		*/
982 		ref = valid_ref;
983 		valid_ref = jffs2_first_valid_node(ref->next_in_ino);
984 		spin_unlock(&c->erase_completion_lock);
985 
986 		cond_resched();
987 
988 		/*
989 		 * At this point we don't know the type of the node we're going
990 		 * to read, so we do not know the size of its header. In order
991 		 * to minimize the amount of flash IO we assume the header is
992 		 * of size = JFFS2_MIN_NODE_HEADER.
993 		 */
994 		len = JFFS2_MIN_NODE_HEADER;
995 		if (jffs2_is_writebuffered(c)) {
996 			int end, rem;
997 
998 			/*
999 			 * We are about to read JFFS2_MIN_NODE_HEADER bytes,
1000 			 * but this flash has some minimal I/O unit. It is
1001 			 * possible that we'll need to read more soon, so read
1002 			 * up to the next min. I/O unit, in order not to
1003 			 * re-read the same min. I/O unit twice.
1004 			 */
1005 			end = ref_offset(ref) + len;
1006 			rem = end % c->wbuf_pagesize;
1007 			if (rem)
1008 				end += c->wbuf_pagesize - rem;
1009 			len = end - ref_offset(ref);
1010 		}
1011 
1012 		dbg_readinode("read %d bytes at %#08x(%d).\n", len, ref_offset(ref), ref_flags(ref));
1013 
1014 		/* FIXME: point() */
1015 		err = jffs2_flash_read(c, ref_offset(ref), len, &retlen, buf);
1016 		if (err) {
1017 			JFFS2_ERROR("can not read %d bytes from 0x%08x, " "error code: %d.\n", len, ref_offset(ref), err);
1018 			goto free_out;
1019 		}
1020 
1021 		if (retlen < len) {
1022 			JFFS2_ERROR("short read at %#08x: %zu instead of %d.\n", ref_offset(ref), retlen, len);
1023 			err = -EIO;
1024 			goto free_out;
1025 		}
1026 
1027 		node = (union jffs2_node_union *)buf;
1028 
1029 		/* No need to mask in the valid bit; it shouldn't be invalid */
1030 		if (je32_to_cpu(node->u.hdr_crc) != crc32(0, node, sizeof(node->u)-4)) {
1031 			JFFS2_NOTICE("Node header CRC failed at %#08x. {%04x,%04x,%08x,%08x}\n",
1032 				     ref_offset(ref), je16_to_cpu(node->u.magic),
1033 				     je16_to_cpu(node->u.nodetype),
1034 				     je32_to_cpu(node->u.totlen),
1035 				     je32_to_cpu(node->u.hdr_crc));
1036 			jffs2_dbg_dump_node(c, ref_offset(ref));
1037 			jffs2_mark_node_obsolete(c, ref);
1038 			goto cont;
1039 		}
1040 		if (je16_to_cpu(node->u.magic) != JFFS2_MAGIC_BITMASK) {
1041 			/* Not a JFFS2 node, whinge and move on */
1042 			JFFS2_NOTICE("Wrong magic bitmask 0x%04x in node header at %#08x.\n",
1043 				     je16_to_cpu(node->u.magic), ref_offset(ref));
1044 			jffs2_mark_node_obsolete(c, ref);
1045 			goto cont;
1046 		}
1047 
1048 		switch (je16_to_cpu(node->u.nodetype)) {
1049 
1050 		case JFFS2_NODETYPE_DIRENT:
1051 
1052 			if (JFFS2_MIN_NODE_HEADER < sizeof(struct jffs2_raw_dirent) &&
1053 			    len < sizeof(struct jffs2_raw_dirent)) {
1054 				err = read_more(c, ref, sizeof(struct jffs2_raw_dirent), &len, buf);
1055 				if (unlikely(err))
1056 					goto free_out;
1057 			}
1058 
1059 			err = read_direntry(c, ref, &node->d, retlen, rii);
1060 			if (unlikely(err))
1061 				goto free_out;
1062 
1063 			break;
1064 
1065 		case JFFS2_NODETYPE_INODE:
1066 
1067 			if (JFFS2_MIN_NODE_HEADER < sizeof(struct jffs2_raw_inode) &&
1068 			    len < sizeof(struct jffs2_raw_inode)) {
1069 				err = read_more(c, ref, sizeof(struct jffs2_raw_inode), &len, buf);
1070 				if (unlikely(err))
1071 					goto free_out;
1072 			}
1073 
1074 			err = read_dnode(c, ref, &node->i, len, rii);
1075 			if (unlikely(err))
1076 				goto free_out;
1077 
1078 			break;
1079 
1080 		default:
1081 			if (JFFS2_MIN_NODE_HEADER < sizeof(struct jffs2_unknown_node) &&
1082 			    len < sizeof(struct jffs2_unknown_node)) {
1083 				err = read_more(c, ref, sizeof(struct jffs2_unknown_node), &len, buf);
1084 				if (unlikely(err))
1085 					goto free_out;
1086 			}
1087 
1088 			err = read_unknown(c, ref, &node->u);
1089 			if (unlikely(err))
1090 				goto free_out;
1091 
1092 		}
1093 	cont:
1094 		spin_lock(&c->erase_completion_lock);
1095 	}
1096 
1097 	spin_unlock(&c->erase_completion_lock);
1098 	kfree(buf);
1099 
1100 	f->highest_version = rii->highest_version;
1101 
1102 	dbg_readinode("nodes of inode #%u were read, the highest version is %u, latest_mctime %u, mctime_ver %u.\n",
1103 		      f->inocache->ino, rii->highest_version, rii->latest_mctime,
1104 		      rii->mctime_ver);
1105 	return 0;
1106 
1107  free_out:
1108 	jffs2_free_tmp_dnode_info_list(&rii->tn_root);
1109 	jffs2_free_full_dirent_list(rii->fds);
1110 	rii->fds = NULL;
1111 	kfree(buf);
1112 	return err;
1113 }
1114 
1115 static int jffs2_do_read_inode_internal(struct jffs2_sb_info *c,
1116 					struct jffs2_inode_info *f,
1117 					struct jffs2_raw_inode *latest_node)
1118 {
1119 	struct jffs2_readinode_info rii;
1120 	uint32_t crc, new_size;
1121 	size_t retlen;
1122 	int ret;
1123 
1124 	dbg_readinode("ino #%u nlink is %d\n", f->inocache->ino, f->inocache->nlink);
1125 
1126 	memset(&rii, 0, sizeof(rii));
1127 
1128 	/* Grab all nodes relevant to this ino */
1129 	ret = jffs2_get_inode_nodes(c, f, &rii);
1130 
1131 	if (ret) {
1132 		JFFS2_ERROR("cannot read nodes for ino %u, returned error is %d\n", f->inocache->ino, ret);
1133 		if (f->inocache->state == INO_STATE_READING)
1134 			jffs2_set_inocache_state(c, f->inocache, INO_STATE_CHECKEDABSENT);
1135 		return ret;
1136 	}
1137 
1138 	ret = jffs2_build_inode_fragtree(c, f, &rii);
1139 	if (ret) {
1140 		JFFS2_ERROR("Failed to build final fragtree for inode #%u: error %d\n",
1141 			    f->inocache->ino, ret);
1142 		if (f->inocache->state == INO_STATE_READING)
1143 			jffs2_set_inocache_state(c, f->inocache, INO_STATE_CHECKEDABSENT);
1144 		jffs2_free_tmp_dnode_info_list(&rii.tn_root);
1145 		/* FIXME: We could at least crc-check them all */
1146 		if (rii.mdata_tn) {
1147 			jffs2_free_full_dnode(rii.mdata_tn->fn);
1148 			jffs2_free_tmp_dnode_info(rii.mdata_tn);
1149 			rii.mdata_tn = NULL;
1150 		}
1151 		return ret;
1152 	}
1153 
1154 	if (rii.mdata_tn) {
1155 		if (rii.mdata_tn->fn->raw == rii.latest_ref) {
1156 			f->metadata = rii.mdata_tn->fn;
1157 			jffs2_free_tmp_dnode_info(rii.mdata_tn);
1158 		} else {
1159 			jffs2_kill_tn(c, rii.mdata_tn);
1160 		}
1161 		rii.mdata_tn = NULL;
1162 	}
1163 
1164 	f->dents = rii.fds;
1165 
1166 	jffs2_dbg_fragtree_paranoia_check_nolock(f);
1167 
1168 	if (unlikely(!rii.latest_ref)) {
1169 		/* No data nodes for this inode. */
1170 		if (f->inocache->ino != 1) {
1171 			JFFS2_WARNING("no data nodes found for ino #%u\n", f->inocache->ino);
1172 			if (!rii.fds) {
1173 				if (f->inocache->state == INO_STATE_READING)
1174 					jffs2_set_inocache_state(c, f->inocache, INO_STATE_CHECKEDABSENT);
1175 				return -EIO;
1176 			}
1177 			JFFS2_NOTICE("but it has children so we fake some modes for it\n");
1178 		}
1179 		latest_node->mode = cpu_to_jemode(S_IFDIR|S_IRUGO|S_IWUSR|S_IXUGO);
1180 		latest_node->version = cpu_to_je32(0);
1181 		latest_node->atime = latest_node->ctime = latest_node->mtime = cpu_to_je32(0);
1182 		latest_node->isize = cpu_to_je32(0);
1183 		latest_node->gid = cpu_to_je16(0);
1184 		latest_node->uid = cpu_to_je16(0);
1185 		if (f->inocache->state == INO_STATE_READING)
1186 			jffs2_set_inocache_state(c, f->inocache, INO_STATE_PRESENT);
1187 		return 0;
1188 	}
1189 
1190 	ret = jffs2_flash_read(c, ref_offset(rii.latest_ref), sizeof(*latest_node), &retlen, (void *)latest_node);
1191 	if (ret || retlen != sizeof(*latest_node)) {
1192 		JFFS2_ERROR("failed to read from flash: error %d, %zd of %zd bytes read\n",
1193 			ret, retlen, sizeof(*latest_node));
1194 		/* FIXME: If this fails, there seems to be a memory leak. Find it. */
1195 		up(&f->sem);
1196 		jffs2_do_clear_inode(c, f);
1197 		return ret?ret:-EIO;
1198 	}
1199 
1200 	crc = crc32(0, latest_node, sizeof(*latest_node)-8);
1201 	if (crc != je32_to_cpu(latest_node->node_crc)) {
1202 		JFFS2_ERROR("CRC failed for read_inode of inode %u at physical location 0x%x\n",
1203 			f->inocache->ino, ref_offset(rii.latest_ref));
1204 		up(&f->sem);
1205 		jffs2_do_clear_inode(c, f);
1206 		return -EIO;
1207 	}
1208 
1209 	switch(jemode_to_cpu(latest_node->mode) & S_IFMT) {
1210 	case S_IFDIR:
1211 		if (rii.mctime_ver > je32_to_cpu(latest_node->version)) {
1212 			/* The times in the latest_node are actually older than
1213 			   mctime in the latest dirent. Cheat. */
1214 			latest_node->ctime = latest_node->mtime = cpu_to_je32(rii.latest_mctime);
1215 		}
1216 		break;
1217 
1218 
1219 	case S_IFREG:
1220 		/* If it was a regular file, truncate it to the latest node's isize */
1221 		new_size = jffs2_truncate_fragtree(c, &f->fragtree, je32_to_cpu(latest_node->isize));
1222 		if (new_size != je32_to_cpu(latest_node->isize)) {
1223 			JFFS2_WARNING("Truncating ino #%u to %d bytes failed because it only had %d bytes to start with!\n",
1224 				      f->inocache->ino, je32_to_cpu(latest_node->isize), new_size);
1225 			latest_node->isize = cpu_to_je32(new_size);
1226 		}
1227 		break;
1228 
1229 	case S_IFLNK:
1230 		/* Hack to work around broken isize in old symlink code.
1231 		   Remove this when dwmw2 comes to his senses and stops
1232 		   symlinks from being an entirely gratuitous special
1233 		   case. */
1234 		if (!je32_to_cpu(latest_node->isize))
1235 			latest_node->isize = latest_node->dsize;
1236 
1237 		if (f->inocache->state != INO_STATE_CHECKING) {
1238 			/* Symlink's inode data is the target path. Read it and
1239 			 * keep in RAM to facilitate quick follow symlink
1240 			 * operation. */
1241 			f->target = kmalloc(je32_to_cpu(latest_node->csize) + 1, GFP_KERNEL);
1242 			if (!f->target) {
1243 				JFFS2_ERROR("can't allocate %d bytes of memory for the symlink target path cache\n", je32_to_cpu(latest_node->csize));
1244 				up(&f->sem);
1245 				jffs2_do_clear_inode(c, f);
1246 				return -ENOMEM;
1247 			}
1248 
1249 			ret = jffs2_flash_read(c, ref_offset(rii.latest_ref) + sizeof(*latest_node),
1250 						je32_to_cpu(latest_node->csize), &retlen, (char *)f->target);
1251 
1252 			if (ret  || retlen != je32_to_cpu(latest_node->csize)) {
1253 				if (retlen != je32_to_cpu(latest_node->csize))
1254 					ret = -EIO;
1255 				kfree(f->target);
1256 				f->target = NULL;
1257 				up(&f->sem);
1258 				jffs2_do_clear_inode(c, f);
1259 				return -ret;
1260 			}
1261 
1262 			f->target[je32_to_cpu(latest_node->csize)] = '\0';
1263 			dbg_readinode("symlink's target '%s' cached\n", f->target);
1264 		}
1265 
1266 		/* fall through... */
1267 
1268 	case S_IFBLK:
1269 	case S_IFCHR:
1270 		/* Certain inode types should have only one data node, and it's
1271 		   kept as the metadata node */
1272 		if (f->metadata) {
1273 			JFFS2_ERROR("Argh. Special inode #%u with mode 0%o had metadata node\n",
1274 			       f->inocache->ino, jemode_to_cpu(latest_node->mode));
1275 			up(&f->sem);
1276 			jffs2_do_clear_inode(c, f);
1277 			return -EIO;
1278 		}
1279 		if (!frag_first(&f->fragtree)) {
1280 			JFFS2_ERROR("Argh. Special inode #%u with mode 0%o has no fragments\n",
1281 			       f->inocache->ino, jemode_to_cpu(latest_node->mode));
1282 			up(&f->sem);
1283 			jffs2_do_clear_inode(c, f);
1284 			return -EIO;
1285 		}
1286 		/* ASSERT: f->fraglist != NULL */
1287 		if (frag_next(frag_first(&f->fragtree))) {
1288 			JFFS2_ERROR("Argh. Special inode #%u with mode 0x%x had more than one node\n",
1289 			       f->inocache->ino, jemode_to_cpu(latest_node->mode));
1290 			/* FIXME: Deal with it - check crc32, check for duplicate node, check times and discard the older one */
1291 			up(&f->sem);
1292 			jffs2_do_clear_inode(c, f);
1293 			return -EIO;
1294 		}
1295 		/* OK. We're happy */
1296 		f->metadata = frag_first(&f->fragtree)->node;
1297 		jffs2_free_node_frag(frag_first(&f->fragtree));
1298 		f->fragtree = RB_ROOT;
1299 		break;
1300 	}
1301 	if (f->inocache->state == INO_STATE_READING)
1302 		jffs2_set_inocache_state(c, f->inocache, INO_STATE_PRESENT);
1303 
1304 	return 0;
1305 }
1306 
1307 /* Scan the list of all nodes present for this ino, build map of versions, etc. */
1308 int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
1309 			uint32_t ino, struct jffs2_raw_inode *latest_node)
1310 {
1311 	dbg_readinode("read inode #%u\n", ino);
1312 
1313  retry_inocache:
1314 	spin_lock(&c->inocache_lock);
1315 	f->inocache = jffs2_get_ino_cache(c, ino);
1316 
1317 	if (f->inocache) {
1318 		/* Check its state. We may need to wait before we can use it */
1319 		switch(f->inocache->state) {
1320 		case INO_STATE_UNCHECKED:
1321 		case INO_STATE_CHECKEDABSENT:
1322 			f->inocache->state = INO_STATE_READING;
1323 			break;
1324 
1325 		case INO_STATE_CHECKING:
1326 		case INO_STATE_GC:
1327 			/* If it's in either of these states, we need
1328 			   to wait for whoever's got it to finish and
1329 			   put it back. */
1330 			dbg_readinode("waiting for ino #%u in state %d\n", ino, f->inocache->state);
1331 			sleep_on_spinunlock(&c->inocache_wq, &c->inocache_lock);
1332 			goto retry_inocache;
1333 
1334 		case INO_STATE_READING:
1335 		case INO_STATE_PRESENT:
1336 			/* Eep. This should never happen. It can
1337 			happen if Linux calls read_inode() again
1338 			before clear_inode() has finished though. */
1339 			JFFS2_ERROR("Eep. Trying to read_inode #%u when it's already in state %d!\n", ino, f->inocache->state);
1340 			/* Fail. That's probably better than allowing it to succeed */
1341 			f->inocache = NULL;
1342 			break;
1343 
1344 		default:
1345 			BUG();
1346 		}
1347 	}
1348 	spin_unlock(&c->inocache_lock);
1349 
1350 	if (!f->inocache && ino == 1) {
1351 		/* Special case - no root inode on medium */
1352 		f->inocache = jffs2_alloc_inode_cache();
1353 		if (!f->inocache) {
1354 			JFFS2_ERROR("cannot allocate inocache for root inode\n");
1355 			return -ENOMEM;
1356 		}
1357 		dbg_readinode("creating inocache for root inode\n");
1358 		memset(f->inocache, 0, sizeof(struct jffs2_inode_cache));
1359 		f->inocache->ino = f->inocache->nlink = 1;
1360 		f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache;
1361 		f->inocache->state = INO_STATE_READING;
1362 		jffs2_add_ino_cache(c, f->inocache);
1363 	}
1364 	if (!f->inocache) {
1365 		JFFS2_ERROR("requestied to read an nonexistent ino %u\n", ino);
1366 		return -ENOENT;
1367 	}
1368 
1369 	return jffs2_do_read_inode_internal(c, f, latest_node);
1370 }
1371 
1372 int jffs2_do_crccheck_inode(struct jffs2_sb_info *c, struct jffs2_inode_cache *ic)
1373 {
1374 	struct jffs2_raw_inode n;
1375 	struct jffs2_inode_info *f = kzalloc(sizeof(*f), GFP_KERNEL);
1376 	int ret;
1377 
1378 	if (!f)
1379 		return -ENOMEM;
1380 
1381 	init_MUTEX_LOCKED(&f->sem);
1382 	f->inocache = ic;
1383 
1384 	ret = jffs2_do_read_inode_internal(c, f, &n);
1385 	if (!ret) {
1386 		up(&f->sem);
1387 		jffs2_do_clear_inode(c, f);
1388 	}
1389 	kfree (f);
1390 	return ret;
1391 }
1392 
1393 void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f)
1394 {
1395 	struct jffs2_full_dirent *fd, *fds;
1396 	int deleted;
1397 
1398 	jffs2_clear_acl(f);
1399 	jffs2_xattr_delete_inode(c, f->inocache);
1400 	down(&f->sem);
1401 	deleted = f->inocache && !f->inocache->nlink;
1402 
1403 	if (f->inocache && f->inocache->state != INO_STATE_CHECKING)
1404 		jffs2_set_inocache_state(c, f->inocache, INO_STATE_CLEARING);
1405 
1406 	if (f->metadata) {
1407 		if (deleted)
1408 			jffs2_mark_node_obsolete(c, f->metadata->raw);
1409 		jffs2_free_full_dnode(f->metadata);
1410 	}
1411 
1412 	jffs2_kill_fragtree(&f->fragtree, deleted?c:NULL);
1413 
1414 	if (f->target) {
1415 		kfree(f->target);
1416 		f->target = NULL;
1417 	}
1418 
1419 	fds = f->dents;
1420 	while(fds) {
1421 		fd = fds;
1422 		fds = fd->next;
1423 		jffs2_free_full_dirent(fd);
1424 	}
1425 
1426 	if (f->inocache && f->inocache->state != INO_STATE_CHECKING) {
1427 		jffs2_set_inocache_state(c, f->inocache, INO_STATE_CHECKEDABSENT);
1428 		if (f->inocache->nodes == (void *)f->inocache)
1429 			jffs2_del_ino_cache(c, f->inocache);
1430 	}
1431 
1432 	up(&f->sem);
1433 }
1434