xref: /linux/fs/jffs2/wbuf.c (revision c537b994505099b7197e7d3125b942ecbcc51eb6)
1 /*
2  * JFFS2 -- Journalling Flash File System, Version 2.
3  *
4  * Copyright (C) 2001-2003 Red Hat, Inc.
5  * Copyright (C) 2004 Thomas Gleixner <tglx@linutronix.de>
6  *
7  * Created by David Woodhouse <dwmw2@infradead.org>
8  * Modified debugged and enhanced by Thomas Gleixner <tglx@linutronix.de>
9  *
10  * For licensing information, see the file 'LICENCE' in this directory.
11  *
12  * $Id: wbuf.c,v 1.100 2005/09/30 13:59:13 dedekind Exp $
13  *
14  */
15 
16 #include <linux/kernel.h>
17 #include <linux/slab.h>
18 #include <linux/mtd/mtd.h>
19 #include <linux/crc32.h>
20 #include <linux/mtd/nand.h>
21 #include <linux/jiffies.h>
22 #include <linux/sched.h>
23 
24 #include "nodelist.h"
25 
26 /* For testing write failures */
27 #undef BREAKME
28 #undef BREAKMEHEADER
29 
30 #ifdef BREAKME
31 static unsigned char *brokenbuf;
32 #endif
33 
34 #define PAGE_DIV(x) ( ((unsigned long)(x) / (unsigned long)(c->wbuf_pagesize)) * (unsigned long)(c->wbuf_pagesize) )
35 #define PAGE_MOD(x) ( (unsigned long)(x) % (unsigned long)(c->wbuf_pagesize) )
36 
37 /* max. erase failures before we mark a block bad */
38 #define MAX_ERASE_FAILURES 	2
39 
40 struct jffs2_inodirty {
41 	uint32_t ino;
42 	struct jffs2_inodirty *next;
43 };
44 
45 static struct jffs2_inodirty inodirty_nomem;
46 
47 static int jffs2_wbuf_pending_for_ino(struct jffs2_sb_info *c, uint32_t ino)
48 {
49 	struct jffs2_inodirty *this = c->wbuf_inodes;
50 
51 	/* If a malloc failed, consider _everything_ dirty */
52 	if (this == &inodirty_nomem)
53 		return 1;
54 
55 	/* If ino == 0, _any_ non-GC writes mean 'yes' */
56 	if (this && !ino)
57 		return 1;
58 
59 	/* Look to see if the inode in question is pending in the wbuf */
60 	while (this) {
61 		if (this->ino == ino)
62 			return 1;
63 		this = this->next;
64 	}
65 	return 0;
66 }
67 
68 static void jffs2_clear_wbuf_ino_list(struct jffs2_sb_info *c)
69 {
70 	struct jffs2_inodirty *this;
71 
72 	this = c->wbuf_inodes;
73 
74 	if (this != &inodirty_nomem) {
75 		while (this) {
76 			struct jffs2_inodirty *next = this->next;
77 			kfree(this);
78 			this = next;
79 		}
80 	}
81 	c->wbuf_inodes = NULL;
82 }
83 
84 static void jffs2_wbuf_dirties_inode(struct jffs2_sb_info *c, uint32_t ino)
85 {
86 	struct jffs2_inodirty *new;
87 
88 	/* Mark the superblock dirty so that kupdated will flush... */
89 	jffs2_erase_pending_trigger(c);
90 
91 	if (jffs2_wbuf_pending_for_ino(c, ino))
92 		return;
93 
94 	new = kmalloc(sizeof(*new), GFP_KERNEL);
95 	if (!new) {
96 		D1(printk(KERN_DEBUG "No memory to allocate inodirty. Fallback to all considered dirty\n"));
97 		jffs2_clear_wbuf_ino_list(c);
98 		c->wbuf_inodes = &inodirty_nomem;
99 		return;
100 	}
101 	new->ino = ino;
102 	new->next = c->wbuf_inodes;
103 	c->wbuf_inodes = new;
104 	return;
105 }
106 
107 static inline void jffs2_refile_wbuf_blocks(struct jffs2_sb_info *c)
108 {
109 	struct list_head *this, *next;
110 	static int n;
111 
112 	if (list_empty(&c->erasable_pending_wbuf_list))
113 		return;
114 
115 	list_for_each_safe(this, next, &c->erasable_pending_wbuf_list) {
116 		struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
117 
118 		D1(printk(KERN_DEBUG "Removing eraseblock at 0x%08x from erasable_pending_wbuf_list...\n", jeb->offset));
119 		list_del(this);
120 		if ((jiffies + (n++)) & 127) {
121 			/* Most of the time, we just erase it immediately. Otherwise we
122 			   spend ages scanning it on mount, etc. */
123 			D1(printk(KERN_DEBUG "...and adding to erase_pending_list\n"));
124 			list_add_tail(&jeb->list, &c->erase_pending_list);
125 			c->nr_erasing_blocks++;
126 			jffs2_erase_pending_trigger(c);
127 		} else {
128 			/* Sometimes, however, we leave it elsewhere so it doesn't get
129 			   immediately reused, and we spread the load a bit. */
130 			D1(printk(KERN_DEBUG "...and adding to erasable_list\n"));
131 			list_add_tail(&jeb->list, &c->erasable_list);
132 		}
133 	}
134 }
135 
136 #define REFILE_NOTEMPTY 0
137 #define REFILE_ANYWAY   1
138 
139 static void jffs2_block_refile(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, int allow_empty)
140 {
141 	D1(printk("About to refile bad block at %08x\n", jeb->offset));
142 
143 	/* File the existing block on the bad_used_list.... */
144 	if (c->nextblock == jeb)
145 		c->nextblock = NULL;
146 	else /* Not sure this should ever happen... need more coffee */
147 		list_del(&jeb->list);
148 	if (jeb->first_node) {
149 		D1(printk("Refiling block at %08x to bad_used_list\n", jeb->offset));
150 		list_add(&jeb->list, &c->bad_used_list);
151 	} else {
152 		BUG_ON(allow_empty == REFILE_NOTEMPTY);
153 		/* It has to have had some nodes or we couldn't be here */
154 		D1(printk("Refiling block at %08x to erase_pending_list\n", jeb->offset));
155 		list_add(&jeb->list, &c->erase_pending_list);
156 		c->nr_erasing_blocks++;
157 		jffs2_erase_pending_trigger(c);
158 	}
159 
160 	if (!jffs2_prealloc_raw_node_refs(c, jeb, 1)) {
161 		uint32_t oldfree = jeb->free_size;
162 
163 		jffs2_link_node_ref(c, jeb,
164 				    (jeb->offset+c->sector_size-oldfree) | REF_OBSOLETE,
165 				    oldfree, NULL);
166 		/* convert to wasted */
167 		c->wasted_size += oldfree;
168 		jeb->wasted_size += oldfree;
169 		c->dirty_size -= oldfree;
170 		jeb->dirty_size -= oldfree;
171 	}
172 
173 	jffs2_dbg_dump_block_lists_nolock(c);
174 	jffs2_dbg_acct_sanity_check_nolock(c,jeb);
175 	jffs2_dbg_acct_paranoia_check_nolock(c, jeb);
176 }
177 
178 static struct jffs2_raw_node_ref **jffs2_incore_replace_raw(struct jffs2_sb_info *c,
179 							    struct jffs2_inode_info *f,
180 							    struct jffs2_raw_node_ref *raw,
181 							    union jffs2_node_union *node)
182 {
183 	struct jffs2_node_frag *frag;
184 	struct jffs2_full_dirent *fd;
185 
186 	dbg_noderef("incore_replace_raw: node at %p is {%04x,%04x}\n",
187 		    node, je16_to_cpu(node->u.magic), je16_to_cpu(node->u.nodetype));
188 
189 	BUG_ON(je16_to_cpu(node->u.magic) != 0x1985 &&
190 	       je16_to_cpu(node->u.magic) != 0);
191 
192 	switch (je16_to_cpu(node->u.nodetype)) {
193 	case JFFS2_NODETYPE_INODE:
194 		if (f->metadata && f->metadata->raw == raw) {
195 			dbg_noderef("Will replace ->raw in f->metadata at %p\n", f->metadata);
196 			return &f->metadata->raw;
197 		}
198 		frag = jffs2_lookup_node_frag(&f->fragtree, je32_to_cpu(node->i.offset));
199 		BUG_ON(!frag);
200 		/* Find a frag which refers to the full_dnode we want to modify */
201 		while (!frag->node || frag->node->raw != raw) {
202 			frag = frag_next(frag);
203 			BUG_ON(!frag);
204 		}
205 		dbg_noderef("Will replace ->raw in full_dnode at %p\n", frag->node);
206 		return &frag->node->raw;
207 
208 	case JFFS2_NODETYPE_DIRENT:
209 		for (fd = f->dents; fd; fd = fd->next) {
210 			if (fd->raw == raw) {
211 				dbg_noderef("Will replace ->raw in full_dirent at %p\n", fd);
212 				return &fd->raw;
213 			}
214 		}
215 		BUG();
216 
217 	default:
218 		dbg_noderef("Don't care about replacing raw for nodetype %x\n",
219 			    je16_to_cpu(node->u.nodetype));
220 		break;
221 	}
222 	return NULL;
223 }
224 
225 /* Recover from failure to write wbuf. Recover the nodes up to the
226  * wbuf, not the one which we were starting to try to write. */
227 
228 static void jffs2_wbuf_recover(struct jffs2_sb_info *c)
229 {
230 	struct jffs2_eraseblock *jeb, *new_jeb;
231 	struct jffs2_raw_node_ref *raw, *next, *first_raw = NULL;
232 	size_t retlen;
233 	int ret;
234 	int nr_refile = 0;
235 	unsigned char *buf;
236 	uint32_t start, end, ofs, len;
237 
238 	jeb = &c->blocks[c->wbuf_ofs / c->sector_size];
239 
240 	spin_lock(&c->erase_completion_lock);
241 	if (c->wbuf_ofs % c->mtd->erasesize)
242 		jffs2_block_refile(c, jeb, REFILE_NOTEMPTY);
243 	else
244 		jffs2_block_refile(c, jeb, REFILE_ANYWAY);
245 	spin_unlock(&c->erase_completion_lock);
246 
247 	BUG_ON(!ref_obsolete(jeb->last_node));
248 
249 	/* Find the first node to be recovered, by skipping over every
250 	   node which ends before the wbuf starts, or which is obsolete. */
251 	for (next = raw = jeb->first_node; next; raw = next) {
252 		next = ref_next(raw);
253 
254 		if (ref_obsolete(raw) ||
255 		    (next && ref_offset(next) <= c->wbuf_ofs)) {
256 			dbg_noderef("Skipping node at 0x%08x(%d)-0x%08x which is either before 0x%08x or obsolete\n",
257 				    ref_offset(raw), ref_flags(raw),
258 				    (ref_offset(raw) + ref_totlen(c, jeb, raw)),
259 				    c->wbuf_ofs);
260 			continue;
261 		}
262 		dbg_noderef("First node to be recovered is at 0x%08x(%d)-0x%08x\n",
263 			    ref_offset(raw), ref_flags(raw),
264 			    (ref_offset(raw) + ref_totlen(c, jeb, raw)));
265 
266 		first_raw = raw;
267 		break;
268 	}
269 
270 	if (!first_raw) {
271 		/* All nodes were obsolete. Nothing to recover. */
272 		D1(printk(KERN_DEBUG "No non-obsolete nodes to be recovered. Just filing block bad\n"));
273 		c->wbuf_len = 0;
274 		return;
275 	}
276 
277 	start = ref_offset(first_raw);
278 	end = ref_offset(jeb->last_node);
279 	nr_refile = 1;
280 
281 	/* Count the number of refs which need to be copied */
282 	while ((raw = ref_next(raw)) != jeb->last_node)
283 		nr_refile++;
284 
285 	dbg_noderef("wbuf recover %08x-%08x (%d bytes in %d nodes)\n",
286 		    start, end, end - start, nr_refile);
287 
288 	buf = NULL;
289 	if (start < c->wbuf_ofs) {
290 		/* First affected node was already partially written.
291 		 * Attempt to reread the old data into our buffer. */
292 
293 		buf = kmalloc(end - start, GFP_KERNEL);
294 		if (!buf) {
295 			printk(KERN_CRIT "Malloc failure in wbuf recovery. Data loss ensues.\n");
296 
297 			goto read_failed;
298 		}
299 
300 		/* Do the read... */
301 		ret = c->mtd->read(c->mtd, start, c->wbuf_ofs - start, &retlen, buf);
302 
303 		/* ECC recovered ? */
304 		if ((ret == -EUCLEAN || ret == -EBADMSG) &&
305 		    (retlen == c->wbuf_ofs - start))
306 			ret = 0;
307 
308 		if (ret || retlen != c->wbuf_ofs - start) {
309 			printk(KERN_CRIT "Old data are already lost in wbuf recovery. Data loss ensues.\n");
310 
311 			kfree(buf);
312 			buf = NULL;
313 		read_failed:
314 			first_raw = ref_next(first_raw);
315 			nr_refile--;
316 			while (first_raw && ref_obsolete(first_raw)) {
317 				first_raw = ref_next(first_raw);
318 				nr_refile--;
319 			}
320 
321 			/* If this was the only node to be recovered, give up */
322 			if (!first_raw) {
323 				c->wbuf_len = 0;
324 				return;
325 			}
326 
327 			/* It wasn't. Go on and try to recover nodes complete in the wbuf */
328 			start = ref_offset(first_raw);
329 			dbg_noderef("wbuf now recover %08x-%08x (%d bytes in %d nodes)\n",
330 				    start, end, end - start, nr_refile);
331 
332 		} else {
333 			/* Read succeeded. Copy the remaining data from the wbuf */
334 			memcpy(buf + (c->wbuf_ofs - start), c->wbuf, end - c->wbuf_ofs);
335 		}
336 	}
337 	/* OK... we're to rewrite (end-start) bytes of data from first_raw onwards.
338 	   Either 'buf' contains the data, or we find it in the wbuf */
339 
340 	/* ... and get an allocation of space from a shiny new block instead */
341 	ret = jffs2_reserve_space_gc(c, end-start, &len, JFFS2_SUMMARY_NOSUM_SIZE);
342 	if (ret) {
343 		printk(KERN_WARNING "Failed to allocate space for wbuf recovery. Data loss ensues.\n");
344 		kfree(buf);
345 		return;
346 	}
347 
348 	ret = jffs2_prealloc_raw_node_refs(c, c->nextblock, nr_refile);
349 	if (ret) {
350 		printk(KERN_WARNING "Failed to allocate node refs for wbuf recovery. Data loss ensues.\n");
351 		kfree(buf);
352 		return;
353 	}
354 
355 	ofs = write_ofs(c);
356 
357 	if (end-start >= c->wbuf_pagesize) {
358 		/* Need to do another write immediately, but it's possible
359 		   that this is just because the wbuf itself is completely
360 		   full, and there's nothing earlier read back from the
361 		   flash. Hence 'buf' isn't necessarily what we're writing
362 		   from. */
363 		unsigned char *rewrite_buf = buf?:c->wbuf;
364 		uint32_t towrite = (end-start) - ((end-start)%c->wbuf_pagesize);
365 
366 		D1(printk(KERN_DEBUG "Write 0x%x bytes at 0x%08x in wbuf recover\n",
367 			  towrite, ofs));
368 
369 #ifdef BREAKMEHEADER
370 		static int breakme;
371 		if (breakme++ == 20) {
372 			printk(KERN_NOTICE "Faking write error at 0x%08x\n", ofs);
373 			breakme = 0;
374 			c->mtd->write(c->mtd, ofs, towrite, &retlen,
375 				      brokenbuf);
376 			ret = -EIO;
377 		} else
378 #endif
379 			ret = c->mtd->write(c->mtd, ofs, towrite, &retlen,
380 					    rewrite_buf);
381 
382 		if (ret || retlen != towrite) {
383 			/* Argh. We tried. Really we did. */
384 			printk(KERN_CRIT "Recovery of wbuf failed due to a second write error\n");
385 			kfree(buf);
386 
387 			if (retlen)
388 				jffs2_add_physical_node_ref(c, ofs | REF_OBSOLETE, ref_totlen(c, jeb, first_raw), NULL);
389 
390 			return;
391 		}
392 		printk(KERN_NOTICE "Recovery of wbuf succeeded to %08x\n", ofs);
393 
394 		c->wbuf_len = (end - start) - towrite;
395 		c->wbuf_ofs = ofs + towrite;
396 		memmove(c->wbuf, rewrite_buf + towrite, c->wbuf_len);
397 		/* Don't muck about with c->wbuf_inodes. False positives are harmless. */
398 	} else {
399 		/* OK, now we're left with the dregs in whichever buffer we're using */
400 		if (buf) {
401 			memcpy(c->wbuf, buf, end-start);
402 		} else {
403 			memmove(c->wbuf, c->wbuf + (start - c->wbuf_ofs), end - start);
404 		}
405 		c->wbuf_ofs = ofs;
406 		c->wbuf_len = end - start;
407 	}
408 
409 	/* Now sort out the jffs2_raw_node_refs, moving them from the old to the next block */
410 	new_jeb = &c->blocks[ofs / c->sector_size];
411 
412 	spin_lock(&c->erase_completion_lock);
413 	for (raw = first_raw; raw != jeb->last_node; raw = ref_next(raw)) {
414 		uint32_t rawlen = ref_totlen(c, jeb, raw);
415 		struct jffs2_inode_cache *ic;
416 		struct jffs2_raw_node_ref *new_ref;
417 		struct jffs2_raw_node_ref **adjust_ref = NULL;
418 		struct jffs2_inode_info *f = NULL;
419 
420 		D1(printk(KERN_DEBUG "Refiling block of %08x at %08x(%d) to %08x\n",
421 			  rawlen, ref_offset(raw), ref_flags(raw), ofs));
422 
423 		ic = jffs2_raw_ref_to_ic(raw);
424 
425 		/* Ick. This XATTR mess should be fixed shortly... */
426 		if (ic && ic->class == RAWNODE_CLASS_XATTR_DATUM) {
427 			struct jffs2_xattr_datum *xd = (void *)ic;
428 			BUG_ON(xd->node != raw);
429 			adjust_ref = &xd->node;
430 			raw->next_in_ino = NULL;
431 			ic = NULL;
432 		} else if (ic && ic->class == RAWNODE_CLASS_XATTR_REF) {
433 			struct jffs2_xattr_datum *xr = (void *)ic;
434 			BUG_ON(xr->node != raw);
435 			adjust_ref = &xr->node;
436 			raw->next_in_ino = NULL;
437 			ic = NULL;
438 		} else if (ic && ic->class == RAWNODE_CLASS_INODE_CACHE) {
439 			struct jffs2_raw_node_ref **p = &ic->nodes;
440 
441 			/* Remove the old node from the per-inode list */
442 			while (*p && *p != (void *)ic) {
443 				if (*p == raw) {
444 					(*p) = (raw->next_in_ino);
445 					raw->next_in_ino = NULL;
446 					break;
447 				}
448 				p = &((*p)->next_in_ino);
449 			}
450 
451 			if (ic->state == INO_STATE_PRESENT && !ref_obsolete(raw)) {
452 				/* If it's an in-core inode, then we have to adjust any
453 				   full_dirent or full_dnode structure to point to the
454 				   new version instead of the old */
455 				f = jffs2_gc_fetch_inode(c, ic->ino, ic->nlink);
456 				if (IS_ERR(f)) {
457 					/* Should never happen; it _must_ be present */
458 					JFFS2_ERROR("Failed to iget() ino #%u, err %ld\n",
459 						    ic->ino, PTR_ERR(f));
460 					BUG();
461 				}
462 				/* We don't lock f->sem. There's a number of ways we could
463 				   end up in here with it already being locked, and nobody's
464 				   going to modify it on us anyway because we hold the
465 				   alloc_sem. We're only changing one ->raw pointer too,
466 				   which we can get away with without upsetting readers. */
467 				adjust_ref = jffs2_incore_replace_raw(c, f, raw,
468 								      (void *)(buf?:c->wbuf) + (ref_offset(raw) - start));
469 			} else if (unlikely(ic->state != INO_STATE_PRESENT &&
470 					    ic->state != INO_STATE_CHECKEDABSENT &&
471 					    ic->state != INO_STATE_GC)) {
472 				JFFS2_ERROR("Inode #%u is in strange state %d!\n", ic->ino, ic->state);
473 				BUG();
474 			}
475 		}
476 
477 		new_ref = jffs2_link_node_ref(c, new_jeb, ofs | ref_flags(raw), rawlen, ic);
478 
479 		if (adjust_ref) {
480 			BUG_ON(*adjust_ref != raw);
481 			*adjust_ref = new_ref;
482 		}
483 		if (f)
484 			jffs2_gc_release_inode(c, f);
485 
486 		if (!ref_obsolete(raw)) {
487 			jeb->dirty_size += rawlen;
488 			jeb->used_size  -= rawlen;
489 			c->dirty_size += rawlen;
490 			c->used_size -= rawlen;
491 			raw->flash_offset = ref_offset(raw) | REF_OBSOLETE;
492 			BUG_ON(raw->next_in_ino);
493 		}
494 		ofs += rawlen;
495 	}
496 
497 	kfree(buf);
498 
499 	/* Fix up the original jeb now it's on the bad_list */
500 	if (first_raw == jeb->first_node) {
501 		D1(printk(KERN_DEBUG "Failing block at %08x is now empty. Moving to erase_pending_list\n", jeb->offset));
502 		list_move(&jeb->list, &c->erase_pending_list);
503 		c->nr_erasing_blocks++;
504 		jffs2_erase_pending_trigger(c);
505 	}
506 
507 	jffs2_dbg_acct_sanity_check_nolock(c, jeb);
508 	jffs2_dbg_acct_paranoia_check_nolock(c, jeb);
509 
510 	jffs2_dbg_acct_sanity_check_nolock(c, new_jeb);
511 	jffs2_dbg_acct_paranoia_check_nolock(c, new_jeb);
512 
513 	spin_unlock(&c->erase_completion_lock);
514 
515 	D1(printk(KERN_DEBUG "wbuf recovery completed OK. wbuf_ofs 0x%08x, len 0x%x\n", c->wbuf_ofs, c->wbuf_len));
516 
517 }
518 
519 /* Meaning of pad argument:
520    0: Do not pad. Probably pointless - we only ever use this when we can't pad anyway.
521    1: Pad, do not adjust nextblock free_size
522    2: Pad, adjust nextblock free_size
523 */
524 #define NOPAD		0
525 #define PAD_NOACCOUNT	1
526 #define PAD_ACCOUNTING	2
527 
528 static int __jffs2_flush_wbuf(struct jffs2_sb_info *c, int pad)
529 {
530 	struct jffs2_eraseblock *wbuf_jeb;
531 	int ret;
532 	size_t retlen;
533 
534 	/* Nothing to do if not write-buffering the flash. In particular, we shouldn't
535 	   del_timer() the timer we never initialised. */
536 	if (!jffs2_is_writebuffered(c))
537 		return 0;
538 
539 	if (!down_trylock(&c->alloc_sem)) {
540 		up(&c->alloc_sem);
541 		printk(KERN_CRIT "jffs2_flush_wbuf() called with alloc_sem not locked!\n");
542 		BUG();
543 	}
544 
545 	if (!c->wbuf_len)	/* already checked c->wbuf above */
546 		return 0;
547 
548 	wbuf_jeb = &c->blocks[c->wbuf_ofs / c->sector_size];
549 	if (jffs2_prealloc_raw_node_refs(c, wbuf_jeb, c->nextblock->allocated_refs + 1))
550 		return -ENOMEM;
551 
552 	/* claim remaining space on the page
553 	   this happens, if we have a change to a new block,
554 	   or if fsync forces us to flush the writebuffer.
555 	   if we have a switch to next page, we will not have
556 	   enough remaining space for this.
557 	*/
558 	if (pad ) {
559 		c->wbuf_len = PAD(c->wbuf_len);
560 
561 		/* Pad with JFFS2_DIRTY_BITMASK initially.  this helps out ECC'd NOR
562 		   with 8 byte page size */
563 		memset(c->wbuf + c->wbuf_len, 0, c->wbuf_pagesize - c->wbuf_len);
564 
565 		if ( c->wbuf_len + sizeof(struct jffs2_unknown_node) < c->wbuf_pagesize) {
566 			struct jffs2_unknown_node *padnode = (void *)(c->wbuf + c->wbuf_len);
567 			padnode->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
568 			padnode->nodetype = cpu_to_je16(JFFS2_NODETYPE_PADDING);
569 			padnode->totlen = cpu_to_je32(c->wbuf_pagesize - c->wbuf_len);
570 			padnode->hdr_crc = cpu_to_je32(crc32(0, padnode, sizeof(*padnode)-4));
571 		}
572 	}
573 	/* else jffs2_flash_writev has actually filled in the rest of the
574 	   buffer for us, and will deal with the node refs etc. later. */
575 
576 #ifdef BREAKME
577 	static int breakme;
578 	if (breakme++ == 20) {
579 		printk(KERN_NOTICE "Faking write error at 0x%08x\n", c->wbuf_ofs);
580 		breakme = 0;
581 		c->mtd->write(c->mtd, c->wbuf_ofs, c->wbuf_pagesize, &retlen,
582 			      brokenbuf);
583 		ret = -EIO;
584 	} else
585 #endif
586 
587 		ret = c->mtd->write(c->mtd, c->wbuf_ofs, c->wbuf_pagesize, &retlen, c->wbuf);
588 
589 	if (ret || retlen != c->wbuf_pagesize) {
590 		if (ret)
591 			printk(KERN_WARNING "jffs2_flush_wbuf(): Write failed with %d\n",ret);
592 		else {
593 			printk(KERN_WARNING "jffs2_flush_wbuf(): Write was short: %zd instead of %d\n",
594 				retlen, c->wbuf_pagesize);
595 			ret = -EIO;
596 		}
597 
598 		jffs2_wbuf_recover(c);
599 
600 		return ret;
601 	}
602 
603 	/* Adjust free size of the block if we padded. */
604 	if (pad) {
605 		uint32_t waste = c->wbuf_pagesize - c->wbuf_len;
606 
607 		D1(printk(KERN_DEBUG "jffs2_flush_wbuf() adjusting free_size of %sblock at %08x\n",
608 			  (wbuf_jeb==c->nextblock)?"next":"", wbuf_jeb->offset));
609 
610 		/* wbuf_pagesize - wbuf_len is the amount of space that's to be
611 		   padded. If there is less free space in the block than that,
612 		   something screwed up */
613 		if (wbuf_jeb->free_size < waste) {
614 			printk(KERN_CRIT "jffs2_flush_wbuf(): Accounting error. wbuf at 0x%08x has 0x%03x bytes, 0x%03x left.\n",
615 			       c->wbuf_ofs, c->wbuf_len, waste);
616 			printk(KERN_CRIT "jffs2_flush_wbuf(): But free_size for block at 0x%08x is only 0x%08x\n",
617 			       wbuf_jeb->offset, wbuf_jeb->free_size);
618 			BUG();
619 		}
620 
621 		spin_lock(&c->erase_completion_lock);
622 
623 		jffs2_link_node_ref(c, wbuf_jeb, (c->wbuf_ofs + c->wbuf_len) | REF_OBSOLETE, waste, NULL);
624 		/* FIXME: that made it count as dirty. Convert to wasted */
625 		wbuf_jeb->dirty_size -= waste;
626 		c->dirty_size -= waste;
627 		wbuf_jeb->wasted_size += waste;
628 		c->wasted_size += waste;
629 	} else
630 		spin_lock(&c->erase_completion_lock);
631 
632 	/* Stick any now-obsoleted blocks on the erase_pending_list */
633 	jffs2_refile_wbuf_blocks(c);
634 	jffs2_clear_wbuf_ino_list(c);
635 	spin_unlock(&c->erase_completion_lock);
636 
637 	memset(c->wbuf,0xff,c->wbuf_pagesize);
638 	/* adjust write buffer offset, else we get a non contiguous write bug */
639 	c->wbuf_ofs += c->wbuf_pagesize;
640 	c->wbuf_len = 0;
641 	return 0;
642 }
643 
644 /* Trigger garbage collection to flush the write-buffer.
645    If ino arg is zero, do it if _any_ real (i.e. not GC) writes are
646    outstanding. If ino arg non-zero, do it only if a write for the
647    given inode is outstanding. */
648 int jffs2_flush_wbuf_gc(struct jffs2_sb_info *c, uint32_t ino)
649 {
650 	uint32_t old_wbuf_ofs;
651 	uint32_t old_wbuf_len;
652 	int ret = 0;
653 
654 	D1(printk(KERN_DEBUG "jffs2_flush_wbuf_gc() called for ino #%u...\n", ino));
655 
656 	if (!c->wbuf)
657 		return 0;
658 
659 	down(&c->alloc_sem);
660 	if (!jffs2_wbuf_pending_for_ino(c, ino)) {
661 		D1(printk(KERN_DEBUG "Ino #%d not pending in wbuf. Returning\n", ino));
662 		up(&c->alloc_sem);
663 		return 0;
664 	}
665 
666 	old_wbuf_ofs = c->wbuf_ofs;
667 	old_wbuf_len = c->wbuf_len;
668 
669 	if (c->unchecked_size) {
670 		/* GC won't make any progress for a while */
671 		D1(printk(KERN_DEBUG "jffs2_flush_wbuf_gc() padding. Not finished checking\n"));
672 		down_write(&c->wbuf_sem);
673 		ret = __jffs2_flush_wbuf(c, PAD_ACCOUNTING);
674 		/* retry flushing wbuf in case jffs2_wbuf_recover
675 		   left some data in the wbuf */
676 		if (ret)
677 			ret = __jffs2_flush_wbuf(c, PAD_ACCOUNTING);
678 		up_write(&c->wbuf_sem);
679 	} else while (old_wbuf_len &&
680 		      old_wbuf_ofs == c->wbuf_ofs) {
681 
682 		up(&c->alloc_sem);
683 
684 		D1(printk(KERN_DEBUG "jffs2_flush_wbuf_gc() calls gc pass\n"));
685 
686 		ret = jffs2_garbage_collect_pass(c);
687 		if (ret) {
688 			/* GC failed. Flush it with padding instead */
689 			down(&c->alloc_sem);
690 			down_write(&c->wbuf_sem);
691 			ret = __jffs2_flush_wbuf(c, PAD_ACCOUNTING);
692 			/* retry flushing wbuf in case jffs2_wbuf_recover
693 			   left some data in the wbuf */
694 			if (ret)
695 				ret = __jffs2_flush_wbuf(c, PAD_ACCOUNTING);
696 			up_write(&c->wbuf_sem);
697 			break;
698 		}
699 		down(&c->alloc_sem);
700 	}
701 
702 	D1(printk(KERN_DEBUG "jffs2_flush_wbuf_gc() ends...\n"));
703 
704 	up(&c->alloc_sem);
705 	return ret;
706 }
707 
708 /* Pad write-buffer to end and write it, wasting space. */
709 int jffs2_flush_wbuf_pad(struct jffs2_sb_info *c)
710 {
711 	int ret;
712 
713 	if (!c->wbuf)
714 		return 0;
715 
716 	down_write(&c->wbuf_sem);
717 	ret = __jffs2_flush_wbuf(c, PAD_NOACCOUNT);
718 	/* retry - maybe wbuf recover left some data in wbuf. */
719 	if (ret)
720 		ret = __jffs2_flush_wbuf(c, PAD_NOACCOUNT);
721 	up_write(&c->wbuf_sem);
722 
723 	return ret;
724 }
725 
726 static size_t jffs2_fill_wbuf(struct jffs2_sb_info *c, const uint8_t *buf,
727 			      size_t len)
728 {
729 	if (len && !c->wbuf_len && (len >= c->wbuf_pagesize))
730 		return 0;
731 
732 	if (len > (c->wbuf_pagesize - c->wbuf_len))
733 		len = c->wbuf_pagesize - c->wbuf_len;
734 	memcpy(c->wbuf + c->wbuf_len, buf, len);
735 	c->wbuf_len += (uint32_t) len;
736 	return len;
737 }
738 
739 int jffs2_flash_writev(struct jffs2_sb_info *c, const struct kvec *invecs,
740 		       unsigned long count, loff_t to, size_t *retlen,
741 		       uint32_t ino)
742 {
743 	struct jffs2_eraseblock *jeb;
744 	size_t wbuf_retlen, donelen = 0;
745 	uint32_t outvec_to = to;
746 	int ret, invec;
747 
748 	/* If not writebuffered flash, don't bother */
749 	if (!jffs2_is_writebuffered(c))
750 		return jffs2_flash_direct_writev(c, invecs, count, to, retlen);
751 
752 	down_write(&c->wbuf_sem);
753 
754 	/* If wbuf_ofs is not initialized, set it to target address */
755 	if (c->wbuf_ofs == 0xFFFFFFFF) {
756 		c->wbuf_ofs = PAGE_DIV(to);
757 		c->wbuf_len = PAGE_MOD(to);
758 		memset(c->wbuf,0xff,c->wbuf_pagesize);
759 	}
760 
761 	/*
762 	 * Sanity checks on target address.  It's permitted to write
763 	 * at PAD(c->wbuf_len+c->wbuf_ofs), and it's permitted to
764 	 * write at the beginning of a new erase block. Anything else,
765 	 * and you die.  New block starts at xxx000c (0-b = block
766 	 * header)
767 	 */
768 	if (SECTOR_ADDR(to) != SECTOR_ADDR(c->wbuf_ofs)) {
769 		/* It's a write to a new block */
770 		if (c->wbuf_len) {
771 			D1(printk(KERN_DEBUG "jffs2_flash_writev() to 0x%lx "
772 				  "causes flush of wbuf at 0x%08x\n",
773 				  (unsigned long)to, c->wbuf_ofs));
774 			ret = __jffs2_flush_wbuf(c, PAD_NOACCOUNT);
775 			if (ret)
776 				goto outerr;
777 		}
778 		/* set pointer to new block */
779 		c->wbuf_ofs = PAGE_DIV(to);
780 		c->wbuf_len = PAGE_MOD(to);
781 	}
782 
783 	if (to != PAD(c->wbuf_ofs + c->wbuf_len)) {
784 		/* We're not writing immediately after the writebuffer. Bad. */
785 		printk(KERN_CRIT "jffs2_flash_writev(): Non-contiguous write "
786 		       "to %08lx\n", (unsigned long)to);
787 		if (c->wbuf_len)
788 			printk(KERN_CRIT "wbuf was previously %08x-%08x\n",
789 			       c->wbuf_ofs, c->wbuf_ofs+c->wbuf_len);
790 		BUG();
791 	}
792 
793 	/* adjust alignment offset */
794 	if (c->wbuf_len != PAGE_MOD(to)) {
795 		c->wbuf_len = PAGE_MOD(to);
796 		/* take care of alignment to next page */
797 		if (!c->wbuf_len) {
798 			c->wbuf_len = c->wbuf_pagesize;
799 			ret = __jffs2_flush_wbuf(c, NOPAD);
800 			if (ret)
801 				goto outerr;
802 		}
803 	}
804 
805 	for (invec = 0; invec < count; invec++) {
806 		int vlen = invecs[invec].iov_len;
807 		uint8_t *v = invecs[invec].iov_base;
808 
809 		wbuf_retlen = jffs2_fill_wbuf(c, v, vlen);
810 
811 		if (c->wbuf_len == c->wbuf_pagesize) {
812 			ret = __jffs2_flush_wbuf(c, NOPAD);
813 			if (ret)
814 				goto outerr;
815 		}
816 		vlen -= wbuf_retlen;
817 		outvec_to += wbuf_retlen;
818 		donelen += wbuf_retlen;
819 		v += wbuf_retlen;
820 
821 		if (vlen >= c->wbuf_pagesize) {
822 			ret = c->mtd->write(c->mtd, outvec_to, PAGE_DIV(vlen),
823 					    &wbuf_retlen, v);
824 			if (ret < 0 || wbuf_retlen != PAGE_DIV(vlen))
825 				goto outfile;
826 
827 			vlen -= wbuf_retlen;
828 			outvec_to += wbuf_retlen;
829 			c->wbuf_ofs = outvec_to;
830 			donelen += wbuf_retlen;
831 			v += wbuf_retlen;
832 		}
833 
834 		wbuf_retlen = jffs2_fill_wbuf(c, v, vlen);
835 		if (c->wbuf_len == c->wbuf_pagesize) {
836 			ret = __jffs2_flush_wbuf(c, NOPAD);
837 			if (ret)
838 				goto outerr;
839 		}
840 
841 		outvec_to += wbuf_retlen;
842 		donelen += wbuf_retlen;
843 	}
844 
845 	/*
846 	 * If there's a remainder in the wbuf and it's a non-GC write,
847 	 * remember that the wbuf affects this ino
848 	 */
849 	*retlen = donelen;
850 
851 	if (jffs2_sum_active()) {
852 		int res = jffs2_sum_add_kvec(c, invecs, count, (uint32_t) to);
853 		if (res)
854 			return res;
855 	}
856 
857 	if (c->wbuf_len && ino)
858 		jffs2_wbuf_dirties_inode(c, ino);
859 
860 	ret = 0;
861 	up_write(&c->wbuf_sem);
862 	return ret;
863 
864 outfile:
865 	/*
866 	 * At this point we have no problem, c->wbuf is empty. However
867 	 * refile nextblock to avoid writing again to same address.
868 	 */
869 
870 	spin_lock(&c->erase_completion_lock);
871 
872 	jeb = &c->blocks[outvec_to / c->sector_size];
873 	jffs2_block_refile(c, jeb, REFILE_ANYWAY);
874 
875 	spin_unlock(&c->erase_completion_lock);
876 
877 outerr:
878 	*retlen = 0;
879 	up_write(&c->wbuf_sem);
880 	return ret;
881 }
882 
883 /*
884  *	This is the entry for flash write.
885  *	Check, if we work on NAND FLASH, if so build an kvec and write it via vritev
886 */
887 int jffs2_flash_write(struct jffs2_sb_info *c, loff_t ofs, size_t len,
888 		      size_t *retlen, const u_char *buf)
889 {
890 	struct kvec vecs[1];
891 
892 	if (!jffs2_is_writebuffered(c))
893 		return jffs2_flash_direct_write(c, ofs, len, retlen, buf);
894 
895 	vecs[0].iov_base = (unsigned char *) buf;
896 	vecs[0].iov_len = len;
897 	return jffs2_flash_writev(c, vecs, 1, ofs, retlen, 0);
898 }
899 
900 /*
901 	Handle readback from writebuffer and ECC failure return
902 */
903 int jffs2_flash_read(struct jffs2_sb_info *c, loff_t ofs, size_t len, size_t *retlen, u_char *buf)
904 {
905 	loff_t	orbf = 0, owbf = 0, lwbf = 0;
906 	int	ret;
907 
908 	if (!jffs2_is_writebuffered(c))
909 		return c->mtd->read(c->mtd, ofs, len, retlen, buf);
910 
911 	/* Read flash */
912 	down_read(&c->wbuf_sem);
913 	ret = c->mtd->read(c->mtd, ofs, len, retlen, buf);
914 
915 	if ( (ret == -EBADMSG || ret == -EUCLEAN) && (*retlen == len) ) {
916 		if (ret == -EBADMSG)
917 			printk(KERN_WARNING "mtd->read(0x%zx bytes from 0x%llx)"
918 			       " returned ECC error\n", len, ofs);
919 		/*
920 		 * We have the raw data without ECC correction in the buffer,
921 		 * maybe we are lucky and all data or parts are correct. We
922 		 * check the node.  If data are corrupted node check will sort
923 		 * it out.  We keep this block, it will fail on write or erase
924 		 * and the we mark it bad. Or should we do that now? But we
925 		 * should give him a chance.  Maybe we had a system crash or
926 		 * power loss before the ecc write or a erase was completed.
927 		 * So we return success. :)
928 		 */
929 		ret = 0;
930 	}
931 
932 	/* if no writebuffer available or write buffer empty, return */
933 	if (!c->wbuf_pagesize || !c->wbuf_len)
934 		goto exit;
935 
936 	/* if we read in a different block, return */
937 	if (SECTOR_ADDR(ofs) != SECTOR_ADDR(c->wbuf_ofs))
938 		goto exit;
939 
940 	if (ofs >= c->wbuf_ofs) {
941 		owbf = (ofs - c->wbuf_ofs);	/* offset in write buffer */
942 		if (owbf > c->wbuf_len)		/* is read beyond write buffer ? */
943 			goto exit;
944 		lwbf = c->wbuf_len - owbf;	/* number of bytes to copy */
945 		if (lwbf > len)
946 			lwbf = len;
947 	} else {
948 		orbf = (c->wbuf_ofs - ofs);	/* offset in read buffer */
949 		if (orbf > len)			/* is write beyond write buffer ? */
950 			goto exit;
951 		lwbf = len - orbf;		/* number of bytes to copy */
952 		if (lwbf > c->wbuf_len)
953 			lwbf = c->wbuf_len;
954 	}
955 	if (lwbf > 0)
956 		memcpy(buf+orbf,c->wbuf+owbf,lwbf);
957 
958 exit:
959 	up_read(&c->wbuf_sem);
960 	return ret;
961 }
962 
963 #define NR_OOB_SCAN_PAGES 4
964 
965 /* For historical reasons we use only 12 bytes for OOB clean marker */
966 #define OOB_CM_SIZE 12
967 
968 static const struct jffs2_unknown_node oob_cleanmarker =
969 {
970 	.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK),
971 	.nodetype = cpu_to_je16(JFFS2_NODETYPE_CLEANMARKER),
972 	.totlen = cpu_to_je32(8)
973 };
974 
975 /*
976  * Check, if the out of band area is empty. This function knows about the clean
977  * marker and if it is present in OOB, treats the OOB as empty anyway.
978  */
979 int jffs2_check_oob_empty(struct jffs2_sb_info *c,
980 			  struct jffs2_eraseblock *jeb, int mode)
981 {
982 	int i, ret;
983 	int cmlen = min_t(int, c->oobavail, OOB_CM_SIZE);
984 	struct mtd_oob_ops ops;
985 
986 	ops.mode = MTD_OOB_AUTO;
987 	ops.ooblen = NR_OOB_SCAN_PAGES * c->oobavail;
988 	ops.oobbuf = c->oobbuf;
989 	ops.len = ops.ooboffs = ops.retlen = ops.oobretlen = 0;
990 	ops.datbuf = NULL;
991 
992 	ret = c->mtd->read_oob(c->mtd, jeb->offset, &ops);
993 	if (ret || ops.oobretlen != ops.ooblen) {
994 		printk(KERN_ERR "cannot read OOB for EB at %08x, requested %zd"
995 				" bytes, read %zd bytes, error %d\n",
996 				jeb->offset, ops.ooblen, ops.oobretlen, ret);
997 		if (!ret)
998 			ret = -EIO;
999 		return ret;
1000 	}
1001 
1002 	for(i = 0; i < ops.ooblen; i++) {
1003 		if (mode && i < cmlen)
1004 			/* Yeah, we know about the cleanmarker */
1005 			continue;
1006 
1007 		if (ops.oobbuf[i] != 0xFF) {
1008 			D2(printk(KERN_DEBUG "Found %02x at %x in OOB for "
1009 				  "%08x\n", ops.oobbuf[i], i, jeb->offset));
1010 			return 1;
1011 		}
1012 	}
1013 
1014 	return 0;
1015 }
1016 
1017 /*
1018  * Check for a valid cleanmarker.
1019  * Returns: 0 if a valid cleanmarker was found
1020  *          1 if no cleanmarker was found
1021  *          negative error code if an error occurred
1022  */
1023 int jffs2_check_nand_cleanmarker(struct jffs2_sb_info *c,
1024 				 struct jffs2_eraseblock *jeb)
1025 {
1026 	struct mtd_oob_ops ops;
1027 	int ret, cmlen = min_t(int, c->oobavail, OOB_CM_SIZE);
1028 
1029 	ops.mode = MTD_OOB_AUTO;
1030 	ops.ooblen = cmlen;
1031 	ops.oobbuf = c->oobbuf;
1032 	ops.len = ops.ooboffs = ops.retlen = ops.oobretlen = 0;
1033 	ops.datbuf = NULL;
1034 
1035 	ret = c->mtd->read_oob(c->mtd, jeb->offset, &ops);
1036 	if (ret || ops.oobretlen != ops.ooblen) {
1037 		printk(KERN_ERR "cannot read OOB for EB at %08x, requested %zd"
1038 				" bytes, read %zd bytes, error %d\n",
1039 				jeb->offset, ops.ooblen, ops.oobretlen, ret);
1040 		if (!ret)
1041 			ret = -EIO;
1042 		return ret;
1043 	}
1044 
1045 	return !!memcmp(&oob_cleanmarker, c->oobbuf, cmlen);
1046 }
1047 
1048 int jffs2_write_nand_cleanmarker(struct jffs2_sb_info *c,
1049 				 struct jffs2_eraseblock *jeb)
1050 {
1051 	int ret;
1052 	struct mtd_oob_ops ops;
1053 	int cmlen = min_t(int, c->oobavail, OOB_CM_SIZE);
1054 
1055 	ops.mode = MTD_OOB_AUTO;
1056 	ops.ooblen = cmlen;
1057 	ops.oobbuf = (uint8_t *)&oob_cleanmarker;
1058 	ops.len = ops.ooboffs = ops.retlen = ops.oobretlen = 0;
1059 	ops.datbuf = NULL;
1060 
1061 	ret = c->mtd->write_oob(c->mtd, jeb->offset, &ops);
1062 	if (ret || ops.oobretlen != ops.ooblen) {
1063 		printk(KERN_ERR "cannot write OOB for EB at %08x, requested %zd"
1064 				" bytes, read %zd bytes, error %d\n",
1065 				jeb->offset, ops.ooblen, ops.oobretlen, ret);
1066 		if (!ret)
1067 			ret = -EIO;
1068 		return ret;
1069 	}
1070 
1071 	return 0;
1072 }
1073 
1074 /*
1075  * On NAND we try to mark this block bad. If the block was erased more
1076  * than MAX_ERASE_FAILURES we mark it finaly bad.
1077  * Don't care about failures. This block remains on the erase-pending
1078  * or badblock list as long as nobody manipulates the flash with
1079  * a bootloader or something like that.
1080  */
1081 
1082 int jffs2_write_nand_badblock(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, uint32_t bad_offset)
1083 {
1084 	int 	ret;
1085 
1086 	/* if the count is < max, we try to write the counter to the 2nd page oob area */
1087 	if( ++jeb->bad_count < MAX_ERASE_FAILURES)
1088 		return 0;
1089 
1090 	if (!c->mtd->block_markbad)
1091 		return 1; // What else can we do?
1092 
1093 	printk(KERN_WARNING "JFFS2: marking eraseblock at %08x\n as bad", bad_offset);
1094 	ret = c->mtd->block_markbad(c->mtd, bad_offset);
1095 
1096 	if (ret) {
1097 		D1(printk(KERN_WARNING "jffs2_write_nand_badblock(): Write failed for block at %08x: error %d\n", jeb->offset, ret));
1098 		return ret;
1099 	}
1100 	return 1;
1101 }
1102 
1103 int jffs2_nand_flash_setup(struct jffs2_sb_info *c)
1104 {
1105 	struct nand_ecclayout *oinfo = c->mtd->ecclayout;
1106 
1107 	if (!c->mtd->oobsize)
1108 		return 0;
1109 
1110 	/* Cleanmarker is out-of-band, so inline size zero */
1111 	c->cleanmarker_size = 0;
1112 
1113 	if (!oinfo || oinfo->oobavail == 0) {
1114 		printk(KERN_ERR "inconsistent device description\n");
1115 		return -EINVAL;
1116 	}
1117 
1118 	D1(printk(KERN_DEBUG "JFFS2 using OOB on NAND\n"));
1119 
1120 	c->oobavail = oinfo->oobavail;
1121 
1122 	/* Initialise write buffer */
1123 	init_rwsem(&c->wbuf_sem);
1124 	c->wbuf_pagesize = c->mtd->writesize;
1125 	c->wbuf_ofs = 0xFFFFFFFF;
1126 
1127 	c->wbuf = kmalloc(c->wbuf_pagesize, GFP_KERNEL);
1128 	if (!c->wbuf)
1129 		return -ENOMEM;
1130 
1131 	c->oobbuf = kmalloc(NR_OOB_SCAN_PAGES * c->oobavail, GFP_KERNEL);
1132 	if (!c->oobbuf) {
1133 		kfree(c->wbuf);
1134 		return -ENOMEM;
1135 	}
1136 
1137 	return 0;
1138 }
1139 
1140 void jffs2_nand_flash_cleanup(struct jffs2_sb_info *c)
1141 {
1142 	kfree(c->wbuf);
1143 	kfree(c->oobbuf);
1144 }
1145 
1146 int jffs2_dataflash_setup(struct jffs2_sb_info *c) {
1147 	c->cleanmarker_size = 0;		/* No cleanmarkers needed */
1148 
1149 	/* Initialize write buffer */
1150 	init_rwsem(&c->wbuf_sem);
1151 
1152 
1153 	c->wbuf_pagesize =  c->mtd->erasesize;
1154 
1155 	/* Find a suitable c->sector_size
1156 	 * - Not too much sectors
1157 	 * - Sectors have to be at least 4 K + some bytes
1158 	 * - All known dataflashes have erase sizes of 528 or 1056
1159 	 * - we take at least 8 eraseblocks and want to have at least 8K size
1160 	 * - The concatenation should be a power of 2
1161 	*/
1162 
1163 	c->sector_size = 8 * c->mtd->erasesize;
1164 
1165 	while (c->sector_size < 8192) {
1166 		c->sector_size *= 2;
1167 	}
1168 
1169 	/* It may be necessary to adjust the flash size */
1170 	c->flash_size = c->mtd->size;
1171 
1172 	if ((c->flash_size % c->sector_size) != 0) {
1173 		c->flash_size = (c->flash_size / c->sector_size) * c->sector_size;
1174 		printk(KERN_WARNING "JFFS2 flash size adjusted to %dKiB\n", c->flash_size);
1175 	};
1176 
1177 	c->wbuf_ofs = 0xFFFFFFFF;
1178 	c->wbuf = kmalloc(c->wbuf_pagesize, GFP_KERNEL);
1179 	if (!c->wbuf)
1180 		return -ENOMEM;
1181 
1182 	printk(KERN_INFO "JFFS2 write-buffering enabled buffer (%d) erasesize (%d)\n", c->wbuf_pagesize, c->sector_size);
1183 
1184 	return 0;
1185 }
1186 
1187 void jffs2_dataflash_cleanup(struct jffs2_sb_info *c) {
1188 	kfree(c->wbuf);
1189 }
1190 
1191 int jffs2_nor_wbuf_flash_setup(struct jffs2_sb_info *c) {
1192 	/* Cleanmarker currently occupies whole programming regions,
1193 	 * either one or 2 for 8Byte STMicro flashes. */
1194 	c->cleanmarker_size = max(16u, c->mtd->writesize);
1195 
1196 	/* Initialize write buffer */
1197 	init_rwsem(&c->wbuf_sem);
1198 	c->wbuf_pagesize = c->mtd->writesize;
1199 	c->wbuf_ofs = 0xFFFFFFFF;
1200 
1201 	c->wbuf = kmalloc(c->wbuf_pagesize, GFP_KERNEL);
1202 	if (!c->wbuf)
1203 		return -ENOMEM;
1204 
1205 	return 0;
1206 }
1207 
1208 void jffs2_nor_wbuf_flash_cleanup(struct jffs2_sb_info *c) {
1209 	kfree(c->wbuf);
1210 }
1211