Linux Audio

Check our new training course

Loading...
v3.1
   1/*
   2 * JFFS2 -- Journalling Flash File System, Version 2.
   3 *
   4 * Copyright © 2001-2007 Red Hat, Inc.
   5 * Copyright © 2004-2010 David Woodhouse <dwmw2@infradead.org>
   6 *
   7 * Created by David Woodhouse <dwmw2@infradead.org>
   8 *
   9 * For licensing information, see the file 'LICENCE' in this directory.
  10 *
  11 */
  12
 
 
  13#include <linux/kernel.h>
  14#include <linux/mtd/mtd.h>
  15#include <linux/slab.h>
  16#include <linux/pagemap.h>
  17#include <linux/crc32.h>
  18#include <linux/compiler.h>
  19#include <linux/stat.h>
  20#include "nodelist.h"
  21#include "compr.h"
  22
  23static int jffs2_garbage_collect_pristine(struct jffs2_sb_info *c,
  24					  struct jffs2_inode_cache *ic,
  25					  struct jffs2_raw_node_ref *raw);
  26static int jffs2_garbage_collect_metadata(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
  27					struct jffs2_inode_info *f, struct jffs2_full_dnode *fd);
  28static int jffs2_garbage_collect_dirent(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
  29					struct jffs2_inode_info *f, struct jffs2_full_dirent *fd);
  30static int jffs2_garbage_collect_deletion_dirent(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
  31					struct jffs2_inode_info *f, struct jffs2_full_dirent *fd);
  32static int jffs2_garbage_collect_hole(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
  33				      struct jffs2_inode_info *f, struct jffs2_full_dnode *fn,
  34				      uint32_t start, uint32_t end);
  35static int jffs2_garbage_collect_dnode(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
  36				       struct jffs2_inode_info *f, struct jffs2_full_dnode *fn,
  37				       uint32_t start, uint32_t end);
  38static int jffs2_garbage_collect_live(struct jffs2_sb_info *c,  struct jffs2_eraseblock *jeb,
  39			       struct jffs2_raw_node_ref *raw, struct jffs2_inode_info *f);
  40
  41/* Called with erase_completion_lock held */
  42static struct jffs2_eraseblock *jffs2_find_gc_block(struct jffs2_sb_info *c)
  43{
  44	struct jffs2_eraseblock *ret;
  45	struct list_head *nextlist = NULL;
  46	int n = jiffies % 128;
  47
  48	/* Pick an eraseblock to garbage collect next. This is where we'll
  49	   put the clever wear-levelling algorithms. Eventually.  */
  50	/* We possibly want to favour the dirtier blocks more when the
  51	   number of free blocks is low. */
  52again:
  53	if (!list_empty(&c->bad_used_list) && c->nr_free_blocks > c->resv_blocks_gcbad) {
  54		D1(printk(KERN_DEBUG "Picking block from bad_used_list to GC next\n"));
  55		nextlist = &c->bad_used_list;
  56	} else if (n < 50 && !list_empty(&c->erasable_list)) {
  57		/* Note that most of them will have gone directly to be erased.
  58		   So don't favour the erasable_list _too_ much. */
  59		D1(printk(KERN_DEBUG "Picking block from erasable_list to GC next\n"));
  60		nextlist = &c->erasable_list;
  61	} else if (n < 110 && !list_empty(&c->very_dirty_list)) {
  62		/* Most of the time, pick one off the very_dirty list */
  63		D1(printk(KERN_DEBUG "Picking block from very_dirty_list to GC next\n"));
  64		nextlist = &c->very_dirty_list;
  65	} else if (n < 126 && !list_empty(&c->dirty_list)) {
  66		D1(printk(KERN_DEBUG "Picking block from dirty_list to GC next\n"));
  67		nextlist = &c->dirty_list;
  68	} else if (!list_empty(&c->clean_list)) {
  69		D1(printk(KERN_DEBUG "Picking block from clean_list to GC next\n"));
  70		nextlist = &c->clean_list;
  71	} else if (!list_empty(&c->dirty_list)) {
  72		D1(printk(KERN_DEBUG "Picking block from dirty_list to GC next (clean_list was empty)\n"));
  73
  74		nextlist = &c->dirty_list;
  75	} else if (!list_empty(&c->very_dirty_list)) {
  76		D1(printk(KERN_DEBUG "Picking block from very_dirty_list to GC next (clean_list and dirty_list were empty)\n"));
  77		nextlist = &c->very_dirty_list;
  78	} else if (!list_empty(&c->erasable_list)) {
  79		D1(printk(KERN_DEBUG "Picking block from erasable_list to GC next (clean_list and {very_,}dirty_list were empty)\n"));
  80
  81		nextlist = &c->erasable_list;
  82	} else if (!list_empty(&c->erasable_pending_wbuf_list)) {
  83		/* There are blocks are wating for the wbuf sync */
  84		D1(printk(KERN_DEBUG "Synching wbuf in order to reuse erasable_pending_wbuf_list blocks\n"));
  85		spin_unlock(&c->erase_completion_lock);
  86		jffs2_flush_wbuf_pad(c);
  87		spin_lock(&c->erase_completion_lock);
  88		goto again;
  89	} else {
  90		/* Eep. All were empty */
  91		D1(printk(KERN_NOTICE "jffs2: No clean, dirty _or_ erasable blocks to GC from! Where are they all?\n"));
  92		return NULL;
  93	}
  94
  95	ret = list_entry(nextlist->next, struct jffs2_eraseblock, list);
  96	list_del(&ret->list);
  97	c->gcblock = ret;
  98	ret->gc_node = ret->first_node;
  99	if (!ret->gc_node) {
 100		printk(KERN_WARNING "Eep. ret->gc_node for block at 0x%08x is NULL\n", ret->offset);
 
 101		BUG();
 102	}
 103
 104	/* Have we accidentally picked a clean block with wasted space ? */
 105	if (ret->wasted_size) {
 106		D1(printk(KERN_DEBUG "Converting wasted_size %08x to dirty_size\n", ret->wasted_size));
 
 107		ret->dirty_size += ret->wasted_size;
 108		c->wasted_size -= ret->wasted_size;
 109		c->dirty_size += ret->wasted_size;
 110		ret->wasted_size = 0;
 111	}
 112
 113	return ret;
 114}
 115
 116/* jffs2_garbage_collect_pass
 117 * Make a single attempt to progress GC. Move one node, and possibly
 118 * start erasing one eraseblock.
 119 */
 120int jffs2_garbage_collect_pass(struct jffs2_sb_info *c)
 121{
 122	struct jffs2_inode_info *f;
 123	struct jffs2_inode_cache *ic;
 124	struct jffs2_eraseblock *jeb;
 125	struct jffs2_raw_node_ref *raw;
 126	uint32_t gcblock_dirty;
 127	int ret = 0, inum, nlink;
 128	int xattr = 0;
 129
 130	if (mutex_lock_interruptible(&c->alloc_sem))
 131		return -EINTR;
 132
 133	for (;;) {
 134		spin_lock(&c->erase_completion_lock);
 135		if (!c->unchecked_size)
 136			break;
 137
 138		/* We can't start doing GC yet. We haven't finished checking
 139		   the node CRCs etc. Do it now. */
 140
 141		/* checked_ino is protected by the alloc_sem */
 142		if (c->checked_ino > c->highest_ino && xattr) {
 143			printk(KERN_CRIT "Checked all inodes but still 0x%x bytes of unchecked space?\n",
 144			       c->unchecked_size);
 145			jffs2_dbg_dump_block_lists_nolock(c);
 146			spin_unlock(&c->erase_completion_lock);
 147			mutex_unlock(&c->alloc_sem);
 148			return -ENOSPC;
 149		}
 150
 151		spin_unlock(&c->erase_completion_lock);
 152
 153		if (!xattr)
 154			xattr = jffs2_verify_xattr(c);
 155
 156		spin_lock(&c->inocache_lock);
 157
 158		ic = jffs2_get_ino_cache(c, c->checked_ino++);
 159
 160		if (!ic) {
 161			spin_unlock(&c->inocache_lock);
 162			continue;
 163		}
 164
 165		if (!ic->pino_nlink) {
 166			D1(printk(KERN_DEBUG "Skipping check of ino #%d with nlink/pino zero\n",
 167				  ic->ino));
 168			spin_unlock(&c->inocache_lock);
 169			jffs2_xattr_delete_inode(c, ic);
 170			continue;
 171		}
 172		switch(ic->state) {
 173		case INO_STATE_CHECKEDABSENT:
 174		case INO_STATE_PRESENT:
 175			D1(printk(KERN_DEBUG "Skipping ino #%u already checked\n", ic->ino));
 
 176			spin_unlock(&c->inocache_lock);
 177			continue;
 178
 179		case INO_STATE_GC:
 180		case INO_STATE_CHECKING:
 181			printk(KERN_WARNING "Inode #%u is in state %d during CRC check phase!\n", ic->ino, ic->state);
 
 182			spin_unlock(&c->inocache_lock);
 183			BUG();
 184
 185		case INO_STATE_READING:
 186			/* We need to wait for it to finish, lest we move on
 187			   and trigger the BUG() above while we haven't yet
 188			   finished checking all its nodes */
 189			D1(printk(KERN_DEBUG "Waiting for ino #%u to finish reading\n", ic->ino));
 
 190			/* We need to come back again for the _same_ inode. We've
 191			 made no progress in this case, but that should be OK */
 192			c->checked_ino--;
 193
 194			mutex_unlock(&c->alloc_sem);
 195			sleep_on_spinunlock(&c->inocache_wq, &c->inocache_lock);
 196			return 0;
 197
 198		default:
 199			BUG();
 200
 201		case INO_STATE_UNCHECKED:
 202			;
 203		}
 204		ic->state = INO_STATE_CHECKING;
 205		spin_unlock(&c->inocache_lock);
 206
 207		D1(printk(KERN_DEBUG "jffs2_garbage_collect_pass() triggering inode scan of ino#%u\n", ic->ino));
 
 208
 209		ret = jffs2_do_crccheck_inode(c, ic);
 210		if (ret)
 211			printk(KERN_WARNING "Returned error for crccheck of ino #%u. Expect badness...\n", ic->ino);
 
 212
 213		jffs2_set_inocache_state(c, ic, INO_STATE_CHECKEDABSENT);
 214		mutex_unlock(&c->alloc_sem);
 215		return ret;
 216	}
 217
 218	/* If there are any blocks which need erasing, erase them now */
 219	if (!list_empty(&c->erase_complete_list) ||
 220	    !list_empty(&c->erase_pending_list)) {
 221		spin_unlock(&c->erase_completion_lock);
 222		mutex_unlock(&c->alloc_sem);
 223		D1(printk(KERN_DEBUG "jffs2_garbage_collect_pass() erasing pending blocks\n"));
 224		if (jffs2_erase_pending_blocks(c, 1))
 225			return 0;
 226
 227		D1(printk(KERN_DEBUG "No progress from erasing blocks; doing GC anyway\n"));
 228		spin_lock(&c->erase_completion_lock);
 229		mutex_lock(&c->alloc_sem);
 
 230	}
 231
 232	/* First, work out which block we're garbage-collecting */
 233	jeb = c->gcblock;
 234
 235	if (!jeb)
 236		jeb = jffs2_find_gc_block(c);
 237
 238	if (!jeb) {
 239		/* Couldn't find a free block. But maybe we can just erase one and make 'progress'? */
 240		if (c->nr_erasing_blocks) {
 241			spin_unlock(&c->erase_completion_lock);
 242			mutex_unlock(&c->alloc_sem);
 243			return -EAGAIN;
 244		}
 245		D1(printk(KERN_NOTICE "jffs2: Couldn't find erase block to garbage collect!\n"));
 246		spin_unlock(&c->erase_completion_lock);
 247		mutex_unlock(&c->alloc_sem);
 248		return -EIO;
 249	}
 250
 251	D1(printk(KERN_DEBUG "GC from block %08x, used_size %08x, dirty_size %08x, free_size %08x\n", jeb->offset, jeb->used_size, jeb->dirty_size, jeb->free_size));
 
 252	D1(if (c->nextblock)
 253	   printk(KERN_DEBUG "Nextblock at  %08x, used_size %08x, dirty_size %08x, wasted_size %08x, free_size %08x\n", c->nextblock->offset, c->nextblock->used_size, c->nextblock->dirty_size, c->nextblock->wasted_size, c->nextblock->free_size));
 254
 255	if (!jeb->used_size) {
 256		mutex_unlock(&c->alloc_sem);
 257		goto eraseit;
 258	}
 259
 260	raw = jeb->gc_node;
 261	gcblock_dirty = jeb->dirty_size;
 262
 263	while(ref_obsolete(raw)) {
 264		D1(printk(KERN_DEBUG "Node at 0x%08x is obsolete... skipping\n", ref_offset(raw)));
 
 265		raw = ref_next(raw);
 266		if (unlikely(!raw)) {
 267			printk(KERN_WARNING "eep. End of raw list while still supposedly nodes to GC\n");
 268			printk(KERN_WARNING "erase block at 0x%08x. free_size 0x%08x, dirty_size 0x%08x, used_size 0x%08x\n",
 269			       jeb->offset, jeb->free_size, jeb->dirty_size, jeb->used_size);
 
 270			jeb->gc_node = raw;
 271			spin_unlock(&c->erase_completion_lock);
 272			mutex_unlock(&c->alloc_sem);
 273			BUG();
 274		}
 275	}
 276	jeb->gc_node = raw;
 277
 278	D1(printk(KERN_DEBUG "Going to garbage collect node at 0x%08x\n", ref_offset(raw)));
 
 279
 280	if (!raw->next_in_ino) {
 281		/* Inode-less node. Clean marker, snapshot or something like that */
 282		spin_unlock(&c->erase_completion_lock);
 283		if (ref_flags(raw) == REF_PRISTINE) {
 284			/* It's an unknown node with JFFS2_FEATURE_RWCOMPAT_COPY */
 285			jffs2_garbage_collect_pristine(c, NULL, raw);
 286		} else {
 287			/* Just mark it obsolete */
 288			jffs2_mark_node_obsolete(c, raw);
 289		}
 290		mutex_unlock(&c->alloc_sem);
 291		goto eraseit_lock;
 292	}
 293
 294	ic = jffs2_raw_ref_to_ic(raw);
 295
 296#ifdef CONFIG_JFFS2_FS_XATTR
 297	/* When 'ic' refers xattr_datum/xattr_ref, this node is GCed as xattr.
 298	 * We can decide whether this node is inode or xattr by ic->class.     */
 299	if (ic->class == RAWNODE_CLASS_XATTR_DATUM
 300	    || ic->class == RAWNODE_CLASS_XATTR_REF) {
 301		spin_unlock(&c->erase_completion_lock);
 302
 303		if (ic->class == RAWNODE_CLASS_XATTR_DATUM) {
 304			ret = jffs2_garbage_collect_xattr_datum(c, (struct jffs2_xattr_datum *)ic, raw);
 305		} else {
 306			ret = jffs2_garbage_collect_xattr_ref(c, (struct jffs2_xattr_ref *)ic, raw);
 307		}
 308		goto test_gcnode;
 309	}
 310#endif
 311
 312	/* We need to hold the inocache. Either the erase_completion_lock or
 313	   the inocache_lock are sufficient; we trade down since the inocache_lock
 314	   causes less contention. */
 315	spin_lock(&c->inocache_lock);
 316
 317	spin_unlock(&c->erase_completion_lock);
 318
 319	D1(printk(KERN_DEBUG "jffs2_garbage_collect_pass collecting from block @0x%08x. Node @0x%08x(%d), ino #%u\n", jeb->offset, ref_offset(raw), ref_flags(raw), ic->ino));
 
 
 320
 321	/* Three possibilities:
 322	   1. Inode is already in-core. We must iget it and do proper
 323	      updating to its fragtree, etc.
 324	   2. Inode is not in-core, node is REF_PRISTINE. We lock the
 325	      inocache to prevent a read_inode(), copy the node intact.
 326	   3. Inode is not in-core, node is not pristine. We must iget()
 327	      and take the slow path.
 328	*/
 329
 330	switch(ic->state) {
 331	case INO_STATE_CHECKEDABSENT:
 332		/* It's been checked, but it's not currently in-core.
 333		   We can just copy any pristine nodes, but have
 334		   to prevent anyone else from doing read_inode() while
 335		   we're at it, so we set the state accordingly */
 336		if (ref_flags(raw) == REF_PRISTINE)
 337			ic->state = INO_STATE_GC;
 338		else {
 339			D1(printk(KERN_DEBUG "Ino #%u is absent but node not REF_PRISTINE. Reading.\n",
 340				  ic->ino));
 341		}
 342		break;
 343
 344	case INO_STATE_PRESENT:
 345		/* It's in-core. GC must iget() it. */
 346		break;
 347
 348	case INO_STATE_UNCHECKED:
 349	case INO_STATE_CHECKING:
 350	case INO_STATE_GC:
 351		/* Should never happen. We should have finished checking
 352		   by the time we actually start doing any GC, and since
 353		   we're holding the alloc_sem, no other garbage collection
 354		   can happen.
 355		*/
 356		printk(KERN_CRIT "Inode #%u already in state %d in jffs2_garbage_collect_pass()!\n",
 357		       ic->ino, ic->state);
 358		mutex_unlock(&c->alloc_sem);
 359		spin_unlock(&c->inocache_lock);
 360		BUG();
 361
 362	case INO_STATE_READING:
 363		/* Someone's currently trying to read it. We must wait for
 364		   them to finish and then go through the full iget() route
 365		   to do the GC. However, sometimes read_inode() needs to get
 366		   the alloc_sem() (for marking nodes invalid) so we must
 367		   drop the alloc_sem before sleeping. */
 368
 369		mutex_unlock(&c->alloc_sem);
 370		D1(printk(KERN_DEBUG "jffs2_garbage_collect_pass() waiting for ino #%u in state %d\n",
 371			  ic->ino, ic->state));
 372		sleep_on_spinunlock(&c->inocache_wq, &c->inocache_lock);
 373		/* And because we dropped the alloc_sem we must start again from the
 374		   beginning. Ponder chance of livelock here -- we're returning success
 375		   without actually making any progress.
 376
 377		   Q: What are the chances that the inode is back in INO_STATE_READING
 378		   again by the time we next enter this function? And that this happens
 379		   enough times to cause a real delay?
 380
 381		   A: Small enough that I don't care :)
 382		*/
 383		return 0;
 384	}
 385
 386	/* OK. Now if the inode is in state INO_STATE_GC, we are going to copy the
 387	   node intact, and we don't have to muck about with the fragtree etc.
 388	   because we know it's not in-core. If it _was_ in-core, we go through
 389	   all the iget() crap anyway */
 390
 391	if (ic->state == INO_STATE_GC) {
 392		spin_unlock(&c->inocache_lock);
 393
 394		ret = jffs2_garbage_collect_pristine(c, ic, raw);
 395
 396		spin_lock(&c->inocache_lock);
 397		ic->state = INO_STATE_CHECKEDABSENT;
 398		wake_up(&c->inocache_wq);
 399
 400		if (ret != -EBADFD) {
 401			spin_unlock(&c->inocache_lock);
 402			goto test_gcnode;
 403		}
 404
 405		/* Fall through if it wanted us to, with inocache_lock held */
 406	}
 407
 408	/* Prevent the fairly unlikely race where the gcblock is
 409	   entirely obsoleted by the final close of a file which had
 410	   the only valid nodes in the block, followed by erasure,
 411	   followed by freeing of the ic because the erased block(s)
 412	   held _all_ the nodes of that inode.... never been seen but
 413	   it's vaguely possible. */
 414
 415	inum = ic->ino;
 416	nlink = ic->pino_nlink;
 417	spin_unlock(&c->inocache_lock);
 418
 419	f = jffs2_gc_fetch_inode(c, inum, !nlink);
 420	if (IS_ERR(f)) {
 421		ret = PTR_ERR(f);
 422		goto release_sem;
 423	}
 424	if (!f) {
 425		ret = 0;
 426		goto release_sem;
 427	}
 428
 429	ret = jffs2_garbage_collect_live(c, jeb, raw, f);
 430
 431	jffs2_gc_release_inode(c, f);
 432
 433 test_gcnode:
 434	if (jeb->dirty_size == gcblock_dirty && !ref_obsolete(jeb->gc_node)) {
 435		/* Eep. This really should never happen. GC is broken */
 436		printk(KERN_ERR "Error garbage collecting node at %08x!\n", ref_offset(jeb->gc_node));
 
 437		ret = -ENOSPC;
 438	}
 439 release_sem:
 440	mutex_unlock(&c->alloc_sem);
 441
 442 eraseit_lock:
 443	/* If we've finished this block, start it erasing */
 444	spin_lock(&c->erase_completion_lock);
 445
 446 eraseit:
 447	if (c->gcblock && !c->gcblock->used_size) {
 448		D1(printk(KERN_DEBUG "Block at 0x%08x completely obsoleted by GC. Moving to erase_pending_list\n", c->gcblock->offset));
 
 449		/* We're GC'ing an empty block? */
 450		list_add_tail(&c->gcblock->list, &c->erase_pending_list);
 451		c->gcblock = NULL;
 452		c->nr_erasing_blocks++;
 453		jffs2_garbage_collect_trigger(c);
 454	}
 455	spin_unlock(&c->erase_completion_lock);
 456
 457	return ret;
 458}
 459
 460static int jffs2_garbage_collect_live(struct jffs2_sb_info *c,  struct jffs2_eraseblock *jeb,
 461				      struct jffs2_raw_node_ref *raw, struct jffs2_inode_info *f)
 462{
 463	struct jffs2_node_frag *frag;
 464	struct jffs2_full_dnode *fn = NULL;
 465	struct jffs2_full_dirent *fd;
 466	uint32_t start = 0, end = 0, nrfrags = 0;
 467	int ret = 0;
 468
 469	mutex_lock(&f->sem);
 470
 471	/* Now we have the lock for this inode. Check that it's still the one at the head
 472	   of the list. */
 473
 474	spin_lock(&c->erase_completion_lock);
 475
 476	if (c->gcblock != jeb) {
 477		spin_unlock(&c->erase_completion_lock);
 478		D1(printk(KERN_DEBUG "GC block is no longer gcblock. Restart\n"));
 479		goto upnout;
 480	}
 481	if (ref_obsolete(raw)) {
 482		spin_unlock(&c->erase_completion_lock);
 483		D1(printk(KERN_DEBUG "node to be GC'd was obsoleted in the meantime.\n"));
 484		/* They'll call again */
 485		goto upnout;
 486	}
 487	spin_unlock(&c->erase_completion_lock);
 488
 489	/* OK. Looks safe. And nobody can get us now because we have the semaphore. Move the block */
 490	if (f->metadata && f->metadata->raw == raw) {
 491		fn = f->metadata;
 492		ret = jffs2_garbage_collect_metadata(c, jeb, f, fn);
 493		goto upnout;
 494	}
 495
 496	/* FIXME. Read node and do lookup? */
 497	for (frag = frag_first(&f->fragtree); frag; frag = frag_next(frag)) {
 498		if (frag->node && frag->node->raw == raw) {
 499			fn = frag->node;
 500			end = frag->ofs + frag->size;
 501			if (!nrfrags++)
 502				start = frag->ofs;
 503			if (nrfrags == frag->node->frags)
 504				break; /* We've found them all */
 505		}
 506	}
 507	if (fn) {
 508		if (ref_flags(raw) == REF_PRISTINE) {
 509			ret = jffs2_garbage_collect_pristine(c, f->inocache, raw);
 510			if (!ret) {
 511				/* Urgh. Return it sensibly. */
 512				frag->node->raw = f->inocache->nodes;
 513			}
 514			if (ret != -EBADFD)
 515				goto upnout;
 516		}
 517		/* We found a datanode. Do the GC */
 518		if((start >> PAGE_CACHE_SHIFT) < ((end-1) >> PAGE_CACHE_SHIFT)) {
 519			/* It crosses a page boundary. Therefore, it must be a hole. */
 520			ret = jffs2_garbage_collect_hole(c, jeb, f, fn, start, end);
 521		} else {
 522			/* It could still be a hole. But we GC the page this way anyway */
 523			ret = jffs2_garbage_collect_dnode(c, jeb, f, fn, start, end);
 524		}
 525		goto upnout;
 526	}
 527
 528	/* Wasn't a dnode. Try dirent */
 529	for (fd = f->dents; fd; fd=fd->next) {
 530		if (fd->raw == raw)
 531			break;
 532	}
 533
 534	if (fd && fd->ino) {
 535		ret = jffs2_garbage_collect_dirent(c, jeb, f, fd);
 536	} else if (fd) {
 537		ret = jffs2_garbage_collect_deletion_dirent(c, jeb, f, fd);
 538	} else {
 539		printk(KERN_WARNING "Raw node at 0x%08x wasn't in node lists for ino #%u\n",
 540		       ref_offset(raw), f->inocache->ino);
 541		if (ref_obsolete(raw)) {
 542			printk(KERN_WARNING "But it's obsolete so we don't mind too much\n");
 543		} else {
 544			jffs2_dbg_dump_node(c, ref_offset(raw));
 545			BUG();
 546		}
 547	}
 548 upnout:
 549	mutex_unlock(&f->sem);
 550
 551	return ret;
 552}
 553
 554static int jffs2_garbage_collect_pristine(struct jffs2_sb_info *c,
 555					  struct jffs2_inode_cache *ic,
 556					  struct jffs2_raw_node_ref *raw)
 557{
 558	union jffs2_node_union *node;
 559	size_t retlen;
 560	int ret;
 561	uint32_t phys_ofs, alloclen;
 562	uint32_t crc, rawlen;
 563	int retried = 0;
 564
 565	D1(printk(KERN_DEBUG "Going to GC REF_PRISTINE node at 0x%08x\n", ref_offset(raw)));
 
 566
 567	alloclen = rawlen = ref_totlen(c, c->gcblock, raw);
 568
 569	/* Ask for a small amount of space (or the totlen if smaller) because we
 570	   don't want to force wastage of the end of a block if splitting would
 571	   work. */
 572	if (ic && alloclen > sizeof(struct jffs2_raw_inode) + JFFS2_MIN_DATA_LEN)
 573		alloclen = sizeof(struct jffs2_raw_inode) + JFFS2_MIN_DATA_LEN;
 574
 575	ret = jffs2_reserve_space_gc(c, alloclen, &alloclen, rawlen);
 576	/* 'rawlen' is not the exact summary size; it is only an upper estimation */
 577
 578	if (ret)
 579		return ret;
 580
 581	if (alloclen < rawlen) {
 582		/* Doesn't fit untouched. We'll go the old route and split it */
 583		return -EBADFD;
 584	}
 585
 586	node = kmalloc(rawlen, GFP_KERNEL);
 587	if (!node)
 588		return -ENOMEM;
 589
 590	ret = jffs2_flash_read(c, ref_offset(raw), rawlen, &retlen, (char *)node);
 591	if (!ret && retlen != rawlen)
 592		ret = -EIO;
 593	if (ret)
 594		goto out_node;
 595
 596	crc = crc32(0, node, sizeof(struct jffs2_unknown_node)-4);
 597	if (je32_to_cpu(node->u.hdr_crc) != crc) {
 598		printk(KERN_WARNING "Header CRC failed on REF_PRISTINE node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
 599		       ref_offset(raw), je32_to_cpu(node->u.hdr_crc), crc);
 600		goto bail;
 601	}
 602
 603	switch(je16_to_cpu(node->u.nodetype)) {
 604	case JFFS2_NODETYPE_INODE:
 605		crc = crc32(0, node, sizeof(node->i)-8);
 606		if (je32_to_cpu(node->i.node_crc) != crc) {
 607			printk(KERN_WARNING "Node CRC failed on REF_PRISTINE data node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
 608			       ref_offset(raw), je32_to_cpu(node->i.node_crc), crc);
 
 609			goto bail;
 610		}
 611
 612		if (je32_to_cpu(node->i.dsize)) {
 613			crc = crc32(0, node->i.data, je32_to_cpu(node->i.csize));
 614			if (je32_to_cpu(node->i.data_crc) != crc) {
 615				printk(KERN_WARNING "Data CRC failed on REF_PRISTINE data node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
 616				       ref_offset(raw), je32_to_cpu(node->i.data_crc), crc);
 
 617				goto bail;
 618			}
 619		}
 620		break;
 621
 622	case JFFS2_NODETYPE_DIRENT:
 623		crc = crc32(0, node, sizeof(node->d)-8);
 624		if (je32_to_cpu(node->d.node_crc) != crc) {
 625			printk(KERN_WARNING "Node CRC failed on REF_PRISTINE dirent node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
 626			       ref_offset(raw), je32_to_cpu(node->d.node_crc), crc);
 
 627			goto bail;
 628		}
 629
 630		if (strnlen(node->d.name, node->d.nsize) != node->d.nsize) {
 631			printk(KERN_WARNING "Name in dirent node at 0x%08x contains zeroes\n", ref_offset(raw));
 
 632			goto bail;
 633		}
 634
 635		if (node->d.nsize) {
 636			crc = crc32(0, node->d.name, node->d.nsize);
 637			if (je32_to_cpu(node->d.name_crc) != crc) {
 638				printk(KERN_WARNING "Name CRC failed on REF_PRISTINE dirent node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
 639				       ref_offset(raw), je32_to_cpu(node->d.name_crc), crc);
 
 640				goto bail;
 641			}
 642		}
 643		break;
 644	default:
 645		/* If it's inode-less, we don't _know_ what it is. Just copy it intact */
 646		if (ic) {
 647			printk(KERN_WARNING "Unknown node type for REF_PRISTINE node at 0x%08x: 0x%04x\n",
 648			       ref_offset(raw), je16_to_cpu(node->u.nodetype));
 649			goto bail;
 650		}
 651	}
 652
 653	/* OK, all the CRCs are good; this node can just be copied as-is. */
 654 retry:
 655	phys_ofs = write_ofs(c);
 656
 657	ret = jffs2_flash_write(c, phys_ofs, rawlen, &retlen, (char *)node);
 658
 659	if (ret || (retlen != rawlen)) {
 660		printk(KERN_NOTICE "Write of %d bytes at 0x%08x failed. returned %d, retlen %zd\n",
 661		       rawlen, phys_ofs, ret, retlen);
 662		if (retlen) {
 663			jffs2_add_physical_node_ref(c, phys_ofs | REF_OBSOLETE, rawlen, NULL);
 664		} else {
 665			printk(KERN_NOTICE "Not marking the space at 0x%08x as dirty because the flash driver returned retlen zero\n", phys_ofs);
 
 666		}
 667		if (!retried) {
 668			/* Try to reallocate space and retry */
 669			uint32_t dummy;
 670			struct jffs2_eraseblock *jeb = &c->blocks[phys_ofs / c->sector_size];
 671
 672			retried = 1;
 673
 674			D1(printk(KERN_DEBUG "Retrying failed write of REF_PRISTINE node.\n"));
 675
 676			jffs2_dbg_acct_sanity_check(c,jeb);
 677			jffs2_dbg_acct_paranoia_check(c, jeb);
 678
 679			ret = jffs2_reserve_space_gc(c, rawlen, &dummy, rawlen);
 680						/* this is not the exact summary size of it,
 681							it is only an upper estimation */
 682
 683			if (!ret) {
 684				D1(printk(KERN_DEBUG "Allocated space at 0x%08x to retry failed write.\n", phys_ofs));
 
 685
 686				jffs2_dbg_acct_sanity_check(c,jeb);
 687				jffs2_dbg_acct_paranoia_check(c, jeb);
 688
 689				goto retry;
 690			}
 691			D1(printk(KERN_DEBUG "Failed to allocate space to retry failed write: %d!\n", ret));
 
 692		}
 693
 694		if (!ret)
 695			ret = -EIO;
 696		goto out_node;
 697	}
 698	jffs2_add_physical_node_ref(c, phys_ofs | REF_PRISTINE, rawlen, ic);
 699
 700	jffs2_mark_node_obsolete(c, raw);
 701	D1(printk(KERN_DEBUG "WHEEE! GC REF_PRISTINE node at 0x%08x succeeded\n", ref_offset(raw)));
 
 702
 703 out_node:
 704	kfree(node);
 705	return ret;
 706 bail:
 707	ret = -EBADFD;
 708	goto out_node;
 709}
 710
 711static int jffs2_garbage_collect_metadata(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
 712					struct jffs2_inode_info *f, struct jffs2_full_dnode *fn)
 713{
 714	struct jffs2_full_dnode *new_fn;
 715	struct jffs2_raw_inode ri;
 716	struct jffs2_node_frag *last_frag;
 717	union jffs2_device_node dev;
 718	char *mdata = NULL;
 719	int mdatalen = 0;
 720	uint32_t alloclen, ilen;
 721	int ret;
 722
 723	if (S_ISBLK(JFFS2_F_I_MODE(f)) ||
 724	    S_ISCHR(JFFS2_F_I_MODE(f)) ) {
 725		/* For these, we don't actually need to read the old node */
 726		mdatalen = jffs2_encode_dev(&dev, JFFS2_F_I_RDEV(f));
 727		mdata = (char *)&dev;
 728		D1(printk(KERN_DEBUG "jffs2_garbage_collect_metadata(): Writing %d bytes of kdev_t\n", mdatalen));
 
 729	} else if (S_ISLNK(JFFS2_F_I_MODE(f))) {
 730		mdatalen = fn->size;
 731		mdata = kmalloc(fn->size, GFP_KERNEL);
 732		if (!mdata) {
 733			printk(KERN_WARNING "kmalloc of mdata failed in jffs2_garbage_collect_metadata()\n");
 734			return -ENOMEM;
 735		}
 736		ret = jffs2_read_dnode(c, f, fn, mdata, 0, mdatalen);
 737		if (ret) {
 738			printk(KERN_WARNING "read of old metadata failed in jffs2_garbage_collect_metadata(): %d\n", ret);
 
 739			kfree(mdata);
 740			return ret;
 741		}
 742		D1(printk(KERN_DEBUG "jffs2_garbage_collect_metadata(): Writing %d bites of symlink target\n", mdatalen));
 
 743
 744	}
 745
 746	ret = jffs2_reserve_space_gc(c, sizeof(ri) + mdatalen, &alloclen,
 747				JFFS2_SUMMARY_INODE_SIZE);
 748	if (ret) {
 749		printk(KERN_WARNING "jffs2_reserve_space_gc of %zd bytes for garbage_collect_metadata failed: %d\n",
 750		       sizeof(ri)+ mdatalen, ret);
 751		goto out;
 752	}
 753
 754	last_frag = frag_last(&f->fragtree);
 755	if (last_frag)
 756		/* Fetch the inode length from the fragtree rather then
 757		 * from i_size since i_size may have not been updated yet */
 758		ilen = last_frag->ofs + last_frag->size;
 759	else
 760		ilen = JFFS2_F_I_SIZE(f);
 761
 762	memset(&ri, 0, sizeof(ri));
 763	ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
 764	ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
 765	ri.totlen = cpu_to_je32(sizeof(ri) + mdatalen);
 766	ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4));
 767
 768	ri.ino = cpu_to_je32(f->inocache->ino);
 769	ri.version = cpu_to_je32(++f->highest_version);
 770	ri.mode = cpu_to_jemode(JFFS2_F_I_MODE(f));
 771	ri.uid = cpu_to_je16(JFFS2_F_I_UID(f));
 772	ri.gid = cpu_to_je16(JFFS2_F_I_GID(f));
 773	ri.isize = cpu_to_je32(ilen);
 774	ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f));
 775	ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f));
 776	ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f));
 777	ri.offset = cpu_to_je32(0);
 778	ri.csize = cpu_to_je32(mdatalen);
 779	ri.dsize = cpu_to_je32(mdatalen);
 780	ri.compr = JFFS2_COMPR_NONE;
 781	ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
 782	ri.data_crc = cpu_to_je32(crc32(0, mdata, mdatalen));
 783
 784	new_fn = jffs2_write_dnode(c, f, &ri, mdata, mdatalen, ALLOC_GC);
 785
 786	if (IS_ERR(new_fn)) {
 787		printk(KERN_WARNING "Error writing new dnode: %ld\n", PTR_ERR(new_fn));
 788		ret = PTR_ERR(new_fn);
 789		goto out;
 790	}
 791	jffs2_mark_node_obsolete(c, fn->raw);
 792	jffs2_free_full_dnode(fn);
 793	f->metadata = new_fn;
 794 out:
 795	if (S_ISLNK(JFFS2_F_I_MODE(f)))
 796		kfree(mdata);
 797	return ret;
 798}
 799
 800static int jffs2_garbage_collect_dirent(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
 801					struct jffs2_inode_info *f, struct jffs2_full_dirent *fd)
 802{
 803	struct jffs2_full_dirent *new_fd;
 804	struct jffs2_raw_dirent rd;
 805	uint32_t alloclen;
 806	int ret;
 807
 808	rd.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
 809	rd.nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
 810	rd.nsize = strlen(fd->name);
 811	rd.totlen = cpu_to_je32(sizeof(rd) + rd.nsize);
 812	rd.hdr_crc = cpu_to_je32(crc32(0, &rd, sizeof(struct jffs2_unknown_node)-4));
 813
 814	rd.pino = cpu_to_je32(f->inocache->ino);
 815	rd.version = cpu_to_je32(++f->highest_version);
 816	rd.ino = cpu_to_je32(fd->ino);
 817	/* If the times on this inode were set by explicit utime() they can be different,
 818	   so refrain from splatting them. */
 819	if (JFFS2_F_I_MTIME(f) == JFFS2_F_I_CTIME(f))
 820		rd.mctime = cpu_to_je32(JFFS2_F_I_MTIME(f));
 821	else
 822		rd.mctime = cpu_to_je32(0);
 823	rd.type = fd->type;
 824	rd.node_crc = cpu_to_je32(crc32(0, &rd, sizeof(rd)-8));
 825	rd.name_crc = cpu_to_je32(crc32(0, fd->name, rd.nsize));
 826
 827	ret = jffs2_reserve_space_gc(c, sizeof(rd)+rd.nsize, &alloclen,
 828				JFFS2_SUMMARY_DIRENT_SIZE(rd.nsize));
 829	if (ret) {
 830		printk(KERN_WARNING "jffs2_reserve_space_gc of %zd bytes for garbage_collect_dirent failed: %d\n",
 831		       sizeof(rd)+rd.nsize, ret);
 832		return ret;
 833	}
 834	new_fd = jffs2_write_dirent(c, f, &rd, fd->name, rd.nsize, ALLOC_GC);
 835
 836	if (IS_ERR(new_fd)) {
 837		printk(KERN_WARNING "jffs2_write_dirent in garbage_collect_dirent failed: %ld\n", PTR_ERR(new_fd));
 
 838		return PTR_ERR(new_fd);
 839	}
 840	jffs2_add_fd_to_list(c, new_fd, &f->dents);
 841	return 0;
 842}
 843
 844static int jffs2_garbage_collect_deletion_dirent(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
 845					struct jffs2_inode_info *f, struct jffs2_full_dirent *fd)
 846{
 847	struct jffs2_full_dirent **fdp = &f->dents;
 848	int found = 0;
 849
 850	/* On a medium where we can't actually mark nodes obsolete
 851	   pernamently, such as NAND flash, we need to work out
 852	   whether this deletion dirent is still needed to actively
 853	   delete a 'real' dirent with the same name that's still
 854	   somewhere else on the flash. */
 855	if (!jffs2_can_mark_obsolete(c)) {
 856		struct jffs2_raw_dirent *rd;
 857		struct jffs2_raw_node_ref *raw;
 858		int ret;
 859		size_t retlen;
 860		int name_len = strlen(fd->name);
 861		uint32_t name_crc = crc32(0, fd->name, name_len);
 862		uint32_t rawlen = ref_totlen(c, jeb, fd->raw);
 863
 864		rd = kmalloc(rawlen, GFP_KERNEL);
 865		if (!rd)
 866			return -ENOMEM;
 867
 868		/* Prevent the erase code from nicking the obsolete node refs while
 869		   we're looking at them. I really don't like this extra lock but
 870		   can't see any alternative. Suggestions on a postcard to... */
 871		mutex_lock(&c->erase_free_sem);
 872
 873		for (raw = f->inocache->nodes; raw != (void *)f->inocache; raw = raw->next_in_ino) {
 874
 875			cond_resched();
 876
 877			/* We only care about obsolete ones */
 878			if (!(ref_obsolete(raw)))
 879				continue;
 880
 881			/* Any dirent with the same name is going to have the same length... */
 882			if (ref_totlen(c, NULL, raw) != rawlen)
 883				continue;
 884
 885			/* Doesn't matter if there's one in the same erase block. We're going to
 886			   delete it too at the same time. */
 887			if (SECTOR_ADDR(raw->flash_offset) == SECTOR_ADDR(fd->raw->flash_offset))
 888				continue;
 889
 890			D1(printk(KERN_DEBUG "Check potential deletion dirent at %08x\n", ref_offset(raw)));
 
 891
 892			/* This is an obsolete node belonging to the same directory, and it's of the right
 893			   length. We need to take a closer look...*/
 894			ret = jffs2_flash_read(c, ref_offset(raw), rawlen, &retlen, (char *)rd);
 895			if (ret) {
 896				printk(KERN_WARNING "jffs2_g_c_deletion_dirent(): Read error (%d) reading obsolete node at %08x\n", ret, ref_offset(raw));
 
 897				/* If we can't read it, we don't need to continue to obsolete it. Continue */
 898				continue;
 899			}
 900			if (retlen != rawlen) {
 901				printk(KERN_WARNING "jffs2_g_c_deletion_dirent(): Short read (%zd not %u) reading header from obsolete node at %08x\n",
 902				       retlen, rawlen, ref_offset(raw));
 
 903				continue;
 904			}
 905
 906			if (je16_to_cpu(rd->nodetype) != JFFS2_NODETYPE_DIRENT)
 907				continue;
 908
 909			/* If the name CRC doesn't match, skip */
 910			if (je32_to_cpu(rd->name_crc) != name_crc)
 911				continue;
 912
 913			/* If the name length doesn't match, or it's another deletion dirent, skip */
 914			if (rd->nsize != name_len || !je32_to_cpu(rd->ino))
 915				continue;
 916
 917			/* OK, check the actual name now */
 918			if (memcmp(rd->name, fd->name, name_len))
 919				continue;
 920
 921			/* OK. The name really does match. There really is still an older node on
 922			   the flash which our deletion dirent obsoletes. So we have to write out
 923			   a new deletion dirent to replace it */
 924			mutex_unlock(&c->erase_free_sem);
 925
 926			D1(printk(KERN_DEBUG "Deletion dirent at %08x still obsoletes real dirent \"%s\" at %08x for ino #%u\n",
 927				  ref_offset(fd->raw), fd->name, ref_offset(raw), je32_to_cpu(rd->ino)));
 
 928			kfree(rd);
 929
 930			return jffs2_garbage_collect_dirent(c, jeb, f, fd);
 931		}
 932
 933		mutex_unlock(&c->erase_free_sem);
 934		kfree(rd);
 935	}
 936
 937	/* FIXME: If we're deleting a dirent which contains the current mtime and ctime,
 938	   we should update the metadata node with those times accordingly */
 939
 940	/* No need for it any more. Just mark it obsolete and remove it from the list */
 941	while (*fdp) {
 942		if ((*fdp) == fd) {
 943			found = 1;
 944			*fdp = fd->next;
 945			break;
 946		}
 947		fdp = &(*fdp)->next;
 948	}
 949	if (!found) {
 950		printk(KERN_WARNING "Deletion dirent \"%s\" not found in list for ino #%u\n", fd->name, f->inocache->ino);
 
 951	}
 952	jffs2_mark_node_obsolete(c, fd->raw);
 953	jffs2_free_full_dirent(fd);
 954	return 0;
 955}
 956
 957static int jffs2_garbage_collect_hole(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
 958				      struct jffs2_inode_info *f, struct jffs2_full_dnode *fn,
 959				      uint32_t start, uint32_t end)
 960{
 961	struct jffs2_raw_inode ri;
 962	struct jffs2_node_frag *frag;
 963	struct jffs2_full_dnode *new_fn;
 964	uint32_t alloclen, ilen;
 965	int ret;
 966
 967	D1(printk(KERN_DEBUG "Writing replacement hole node for ino #%u from offset 0x%x to 0x%x\n",
 968		  f->inocache->ino, start, end));
 969
 970	memset(&ri, 0, sizeof(ri));
 971
 972	if(fn->frags > 1) {
 973		size_t readlen;
 974		uint32_t crc;
 975		/* It's partially obsoleted by a later write. So we have to
 976		   write it out again with the _same_ version as before */
 977		ret = jffs2_flash_read(c, ref_offset(fn->raw), sizeof(ri), &readlen, (char *)&ri);
 978		if (readlen != sizeof(ri) || ret) {
 979			printk(KERN_WARNING "Node read failed in jffs2_garbage_collect_hole. Ret %d, retlen %zd. Data will be lost by writing new hole node\n", ret, readlen);
 
 980			goto fill;
 981		}
 982		if (je16_to_cpu(ri.nodetype) != JFFS2_NODETYPE_INODE) {
 983			printk(KERN_WARNING "jffs2_garbage_collect_hole: Node at 0x%08x had node type 0x%04x instead of JFFS2_NODETYPE_INODE(0x%04x)\n",
 984			       ref_offset(fn->raw),
 985			       je16_to_cpu(ri.nodetype), JFFS2_NODETYPE_INODE);
 986			return -EIO;
 987		}
 988		if (je32_to_cpu(ri.totlen) != sizeof(ri)) {
 989			printk(KERN_WARNING "jffs2_garbage_collect_hole: Node at 0x%08x had totlen 0x%x instead of expected 0x%zx\n",
 990			       ref_offset(fn->raw),
 991			       je32_to_cpu(ri.totlen), sizeof(ri));
 992			return -EIO;
 993		}
 994		crc = crc32(0, &ri, sizeof(ri)-8);
 995		if (crc != je32_to_cpu(ri.node_crc)) {
 996			printk(KERN_WARNING "jffs2_garbage_collect_hole: Node at 0x%08x had CRC 0x%08x which doesn't match calculated CRC 0x%08x\n",
 997			       ref_offset(fn->raw),
 998			       je32_to_cpu(ri.node_crc), crc);
 999			/* FIXME: We could possibly deal with this by writing new holes for each frag */
1000			printk(KERN_WARNING "Data in the range 0x%08x to 0x%08x of inode #%u will be lost\n",
1001			       start, end, f->inocache->ino);
1002			goto fill;
1003		}
1004		if (ri.compr != JFFS2_COMPR_ZERO) {
1005			printk(KERN_WARNING "jffs2_garbage_collect_hole: Node 0x%08x wasn't a hole node!\n", ref_offset(fn->raw));
1006			printk(KERN_WARNING "Data in the range 0x%08x to 0x%08x of inode #%u will be lost\n",
1007			       start, end, f->inocache->ino);
 
1008			goto fill;
1009		}
1010	} else {
1011	fill:
1012		ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
1013		ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
1014		ri.totlen = cpu_to_je32(sizeof(ri));
1015		ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4));
1016
1017		ri.ino = cpu_to_je32(f->inocache->ino);
1018		ri.version = cpu_to_je32(++f->highest_version);
1019		ri.offset = cpu_to_je32(start);
1020		ri.dsize = cpu_to_je32(end - start);
1021		ri.csize = cpu_to_je32(0);
1022		ri.compr = JFFS2_COMPR_ZERO;
1023	}
1024
1025	frag = frag_last(&f->fragtree);
1026	if (frag)
1027		/* Fetch the inode length from the fragtree rather then
1028		 * from i_size since i_size may have not been updated yet */
1029		ilen = frag->ofs + frag->size;
1030	else
1031		ilen = JFFS2_F_I_SIZE(f);
1032
1033	ri.mode = cpu_to_jemode(JFFS2_F_I_MODE(f));
1034	ri.uid = cpu_to_je16(JFFS2_F_I_UID(f));
1035	ri.gid = cpu_to_je16(JFFS2_F_I_GID(f));
1036	ri.isize = cpu_to_je32(ilen);
1037	ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f));
1038	ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f));
1039	ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f));
1040	ri.data_crc = cpu_to_je32(0);
1041	ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
1042
1043	ret = jffs2_reserve_space_gc(c, sizeof(ri), &alloclen,
1044				     JFFS2_SUMMARY_INODE_SIZE);
1045	if (ret) {
1046		printk(KERN_WARNING "jffs2_reserve_space_gc of %zd bytes for garbage_collect_hole failed: %d\n",
1047		       sizeof(ri), ret);
1048		return ret;
1049	}
1050	new_fn = jffs2_write_dnode(c, f, &ri, NULL, 0, ALLOC_GC);
1051
1052	if (IS_ERR(new_fn)) {
1053		printk(KERN_WARNING "Error writing new hole node: %ld\n", PTR_ERR(new_fn));
1054		return PTR_ERR(new_fn);
1055	}
1056	if (je32_to_cpu(ri.version) == f->highest_version) {
1057		jffs2_add_full_dnode_to_inode(c, f, new_fn);
1058		if (f->metadata) {
1059			jffs2_mark_node_obsolete(c, f->metadata->raw);
1060			jffs2_free_full_dnode(f->metadata);
1061			f->metadata = NULL;
1062		}
1063		return 0;
1064	}
1065
1066	/*
1067	 * We should only get here in the case where the node we are
1068	 * replacing had more than one frag, so we kept the same version
1069	 * number as before. (Except in case of error -- see 'goto fill;'
1070	 * above.)
1071	 */
1072	D1(if(unlikely(fn->frags <= 1)) {
1073		printk(KERN_WARNING "jffs2_garbage_collect_hole: Replacing fn with %d frag(s) but new ver %d != highest_version %d of ino #%d\n",
1074		       fn->frags, je32_to_cpu(ri.version), f->highest_version,
1075		       je32_to_cpu(ri.ino));
1076	});
1077
1078	/* This is a partially-overlapped hole node. Mark it REF_NORMAL not REF_PRISTINE */
1079	mark_ref_normal(new_fn->raw);
1080
1081	for (frag = jffs2_lookup_node_frag(&f->fragtree, fn->ofs);
1082	     frag; frag = frag_next(frag)) {
1083		if (frag->ofs > fn->size + fn->ofs)
1084			break;
1085		if (frag->node == fn) {
1086			frag->node = new_fn;
1087			new_fn->frags++;
1088			fn->frags--;
1089		}
1090	}
1091	if (fn->frags) {
1092		printk(KERN_WARNING "jffs2_garbage_collect_hole: Old node still has frags!\n");
1093		BUG();
1094	}
1095	if (!new_fn->frags) {
1096		printk(KERN_WARNING "jffs2_garbage_collect_hole: New node has no frags!\n");
1097		BUG();
1098	}
1099
1100	jffs2_mark_node_obsolete(c, fn->raw);
1101	jffs2_free_full_dnode(fn);
1102
1103	return 0;
1104}
1105
1106static int jffs2_garbage_collect_dnode(struct jffs2_sb_info *c, struct jffs2_eraseblock *orig_jeb,
1107				       struct jffs2_inode_info *f, struct jffs2_full_dnode *fn,
1108				       uint32_t start, uint32_t end)
1109{
1110	struct jffs2_full_dnode *new_fn;
1111	struct jffs2_raw_inode ri;
1112	uint32_t alloclen, offset, orig_end, orig_start;
1113	int ret = 0;
1114	unsigned char *comprbuf = NULL, *writebuf;
1115	unsigned long pg;
1116	unsigned char *pg_ptr;
1117
1118	memset(&ri, 0, sizeof(ri));
1119
1120	D1(printk(KERN_DEBUG "Writing replacement dnode for ino #%u from offset 0x%x to 0x%x\n",
1121		  f->inocache->ino, start, end));
1122
1123	orig_end = end;
1124	orig_start = start;
1125
1126	if (c->nr_free_blocks + c->nr_erasing_blocks > c->resv_blocks_gcmerge) {
1127		/* Attempt to do some merging. But only expand to cover logically
1128		   adjacent frags if the block containing them is already considered
1129		   to be dirty. Otherwise we end up with GC just going round in
1130		   circles dirtying the nodes it already wrote out, especially
1131		   on NAND where we have small eraseblocks and hence a much higher
1132		   chance of nodes having to be split to cross boundaries. */
1133
1134		struct jffs2_node_frag *frag;
1135		uint32_t min, max;
1136
1137		min = start & ~(PAGE_CACHE_SIZE-1);
1138		max = min + PAGE_CACHE_SIZE;
1139
1140		frag = jffs2_lookup_node_frag(&f->fragtree, start);
1141
1142		/* BUG_ON(!frag) but that'll happen anyway... */
1143
1144		BUG_ON(frag->ofs != start);
1145
1146		/* First grow down... */
1147		while((frag = frag_prev(frag)) && frag->ofs >= min) {
1148
1149			/* If the previous frag doesn't even reach the beginning, there's
1150			   excessive fragmentation. Just merge. */
1151			if (frag->ofs > min) {
1152				D1(printk(KERN_DEBUG "Expanding down to cover partial frag (0x%x-0x%x)\n",
1153					  frag->ofs, frag->ofs+frag->size));
1154				start = frag->ofs;
1155				continue;
1156			}
1157			/* OK. This frag holds the first byte of the page. */
1158			if (!frag->node || !frag->node->raw) {
1159				D1(printk(KERN_DEBUG "First frag in page is hole (0x%x-0x%x). Not expanding down.\n",
1160					  frag->ofs, frag->ofs+frag->size));
1161				break;
1162			} else {
1163
1164				/* OK, it's a frag which extends to the beginning of the page. Does it live
1165				   in a block which is still considered clean? If so, don't obsolete it.
1166				   If not, cover it anyway. */
1167
1168				struct jffs2_raw_node_ref *raw = frag->node->raw;
1169				struct jffs2_eraseblock *jeb;
1170
1171				jeb = &c->blocks[raw->flash_offset / c->sector_size];
1172
1173				if (jeb == c->gcblock) {
1174					D1(printk(KERN_DEBUG "Expanding down to cover frag (0x%x-0x%x) in gcblock at %08x\n",
1175						  frag->ofs, frag->ofs+frag->size, ref_offset(raw)));
 
 
1176					start = frag->ofs;
1177					break;
1178				}
1179				if (!ISDIRTY(jeb->dirty_size + jeb->wasted_size)) {
1180					D1(printk(KERN_DEBUG "Not expanding down to cover frag (0x%x-0x%x) in clean block %08x\n",
1181						  frag->ofs, frag->ofs+frag->size, jeb->offset));
 
 
1182					break;
1183				}
1184
1185				D1(printk(KERN_DEBUG "Expanding down to cover frag (0x%x-0x%x) in dirty block %08x\n",
1186						  frag->ofs, frag->ofs+frag->size, jeb->offset));
 
 
1187				start = frag->ofs;
1188				break;
1189			}
1190		}
1191
1192		/* ... then up */
1193
1194		/* Find last frag which is actually part of the node we're to GC. */
1195		frag = jffs2_lookup_node_frag(&f->fragtree, end-1);
1196
1197		while((frag = frag_next(frag)) && frag->ofs+frag->size <= max) {
1198
1199			/* If the previous frag doesn't even reach the beginning, there's lots
1200			   of fragmentation. Just merge. */
1201			if (frag->ofs+frag->size < max) {
1202				D1(printk(KERN_DEBUG "Expanding up to cover partial frag (0x%x-0x%x)\n",
1203					  frag->ofs, frag->ofs+frag->size));
1204				end = frag->ofs + frag->size;
1205				continue;
1206			}
1207
1208			if (!frag->node || !frag->node->raw) {
1209				D1(printk(KERN_DEBUG "Last frag in page is hole (0x%x-0x%x). Not expanding up.\n",
1210					  frag->ofs, frag->ofs+frag->size));
1211				break;
1212			} else {
1213
1214				/* OK, it's a frag which extends to the beginning of the page. Does it live
1215				   in a block which is still considered clean? If so, don't obsolete it.
1216				   If not, cover it anyway. */
1217
1218				struct jffs2_raw_node_ref *raw = frag->node->raw;
1219				struct jffs2_eraseblock *jeb;
1220
1221				jeb = &c->blocks[raw->flash_offset / c->sector_size];
1222
1223				if (jeb == c->gcblock) {
1224					D1(printk(KERN_DEBUG "Expanding up to cover frag (0x%x-0x%x) in gcblock at %08x\n",
1225						  frag->ofs, frag->ofs+frag->size, ref_offset(raw)));
 
 
1226					end = frag->ofs + frag->size;
1227					break;
1228				}
1229				if (!ISDIRTY(jeb->dirty_size + jeb->wasted_size)) {
1230					D1(printk(KERN_DEBUG "Not expanding up to cover frag (0x%x-0x%x) in clean block %08x\n",
1231						  frag->ofs, frag->ofs+frag->size, jeb->offset));
 
 
1232					break;
1233				}
1234
1235				D1(printk(KERN_DEBUG "Expanding up to cover frag (0x%x-0x%x) in dirty block %08x\n",
1236						  frag->ofs, frag->ofs+frag->size, jeb->offset));
 
 
1237				end = frag->ofs + frag->size;
1238				break;
1239			}
1240		}
1241		D1(printk(KERN_DEBUG "Expanded dnode to write from (0x%x-0x%x) to (0x%x-0x%x)\n",
1242			  orig_start, orig_end, start, end));
1243
1244		D1(BUG_ON(end > frag_last(&f->fragtree)->ofs + frag_last(&f->fragtree)->size));
1245		BUG_ON(end < orig_end);
1246		BUG_ON(start > orig_start);
1247	}
1248
1249	/* First, use readpage() to read the appropriate page into the page cache */
1250	/* Q: What happens if we actually try to GC the _same_ page for which commit_write()
1251	 *    triggered garbage collection in the first place?
1252	 * A: I _think_ it's OK. read_cache_page shouldn't deadlock, we'll write out the
1253	 *    page OK. We'll actually write it out again in commit_write, which is a little
1254	 *    suboptimal, but at least we're correct.
1255	 */
1256	pg_ptr = jffs2_gc_fetch_page(c, f, start, &pg);
1257
1258	if (IS_ERR(pg_ptr)) {
1259		printk(KERN_WARNING "read_cache_page() returned error: %ld\n", PTR_ERR(pg_ptr));
 
1260		return PTR_ERR(pg_ptr);
1261	}
1262
1263	offset = start;
1264	while(offset < orig_end) {
1265		uint32_t datalen;
1266		uint32_t cdatalen;
1267		uint16_t comprtype = JFFS2_COMPR_NONE;
1268
1269		ret = jffs2_reserve_space_gc(c, sizeof(ri) + JFFS2_MIN_DATA_LEN,
1270					&alloclen, JFFS2_SUMMARY_INODE_SIZE);
1271
1272		if (ret) {
1273			printk(KERN_WARNING "jffs2_reserve_space_gc of %zd bytes for garbage_collect_dnode failed: %d\n",
1274			       sizeof(ri)+ JFFS2_MIN_DATA_LEN, ret);
1275			break;
1276		}
1277		cdatalen = min_t(uint32_t, alloclen - sizeof(ri), end - offset);
1278		datalen = end - offset;
1279
1280		writebuf = pg_ptr + (offset & (PAGE_CACHE_SIZE -1));
1281
1282		comprtype = jffs2_compress(c, f, writebuf, &comprbuf, &datalen, &cdatalen);
1283
1284		ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
1285		ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
1286		ri.totlen = cpu_to_je32(sizeof(ri) + cdatalen);
1287		ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4));
1288
1289		ri.ino = cpu_to_je32(f->inocache->ino);
1290		ri.version = cpu_to_je32(++f->highest_version);
1291		ri.mode = cpu_to_jemode(JFFS2_F_I_MODE(f));
1292		ri.uid = cpu_to_je16(JFFS2_F_I_UID(f));
1293		ri.gid = cpu_to_je16(JFFS2_F_I_GID(f));
1294		ri.isize = cpu_to_je32(JFFS2_F_I_SIZE(f));
1295		ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f));
1296		ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f));
1297		ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f));
1298		ri.offset = cpu_to_je32(offset);
1299		ri.csize = cpu_to_je32(cdatalen);
1300		ri.dsize = cpu_to_je32(datalen);
1301		ri.compr = comprtype & 0xff;
1302		ri.usercompr = (comprtype >> 8) & 0xff;
1303		ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
1304		ri.data_crc = cpu_to_je32(crc32(0, comprbuf, cdatalen));
1305
1306		new_fn = jffs2_write_dnode(c, f, &ri, comprbuf, cdatalen, ALLOC_GC);
1307
1308		jffs2_free_comprbuf(comprbuf, writebuf);
1309
1310		if (IS_ERR(new_fn)) {
1311			printk(KERN_WARNING "Error writing new dnode: %ld\n", PTR_ERR(new_fn));
 
1312			ret = PTR_ERR(new_fn);
1313			break;
1314		}
1315		ret = jffs2_add_full_dnode_to_inode(c, f, new_fn);
1316		offset += datalen;
1317		if (f->metadata) {
1318			jffs2_mark_node_obsolete(c, f->metadata->raw);
1319			jffs2_free_full_dnode(f->metadata);
1320			f->metadata = NULL;
1321		}
1322	}
1323
1324	jffs2_gc_release_page(c, pg_ptr, &pg);
1325	return ret;
1326}
v3.5.6
   1/*
   2 * JFFS2 -- Journalling Flash File System, Version 2.
   3 *
   4 * Copyright © 2001-2007 Red Hat, Inc.
   5 * Copyright © 2004-2010 David Woodhouse <dwmw2@infradead.org>
   6 *
   7 * Created by David Woodhouse <dwmw2@infradead.org>
   8 *
   9 * For licensing information, see the file 'LICENCE' in this directory.
  10 *
  11 */
  12
  13#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  14
  15#include <linux/kernel.h>
  16#include <linux/mtd/mtd.h>
  17#include <linux/slab.h>
  18#include <linux/pagemap.h>
  19#include <linux/crc32.h>
  20#include <linux/compiler.h>
  21#include <linux/stat.h>
  22#include "nodelist.h"
  23#include "compr.h"
  24
  25static int jffs2_garbage_collect_pristine(struct jffs2_sb_info *c,
  26					  struct jffs2_inode_cache *ic,
  27					  struct jffs2_raw_node_ref *raw);
  28static int jffs2_garbage_collect_metadata(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
  29					struct jffs2_inode_info *f, struct jffs2_full_dnode *fd);
  30static int jffs2_garbage_collect_dirent(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
  31					struct jffs2_inode_info *f, struct jffs2_full_dirent *fd);
  32static int jffs2_garbage_collect_deletion_dirent(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
  33					struct jffs2_inode_info *f, struct jffs2_full_dirent *fd);
  34static int jffs2_garbage_collect_hole(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
  35				      struct jffs2_inode_info *f, struct jffs2_full_dnode *fn,
  36				      uint32_t start, uint32_t end);
  37static int jffs2_garbage_collect_dnode(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
  38				       struct jffs2_inode_info *f, struct jffs2_full_dnode *fn,
  39				       uint32_t start, uint32_t end);
  40static int jffs2_garbage_collect_live(struct jffs2_sb_info *c,  struct jffs2_eraseblock *jeb,
  41			       struct jffs2_raw_node_ref *raw, struct jffs2_inode_info *f);
  42
  43/* Called with erase_completion_lock held */
  44static struct jffs2_eraseblock *jffs2_find_gc_block(struct jffs2_sb_info *c)
  45{
  46	struct jffs2_eraseblock *ret;
  47	struct list_head *nextlist = NULL;
  48	int n = jiffies % 128;
  49
  50	/* Pick an eraseblock to garbage collect next. This is where we'll
  51	   put the clever wear-levelling algorithms. Eventually.  */
  52	/* We possibly want to favour the dirtier blocks more when the
  53	   number of free blocks is low. */
  54again:
  55	if (!list_empty(&c->bad_used_list) && c->nr_free_blocks > c->resv_blocks_gcbad) {
  56		jffs2_dbg(1, "Picking block from bad_used_list to GC next\n");
  57		nextlist = &c->bad_used_list;
  58	} else if (n < 50 && !list_empty(&c->erasable_list)) {
  59		/* Note that most of them will have gone directly to be erased.
  60		   So don't favour the erasable_list _too_ much. */
  61		jffs2_dbg(1, "Picking block from erasable_list to GC next\n");
  62		nextlist = &c->erasable_list;
  63	} else if (n < 110 && !list_empty(&c->very_dirty_list)) {
  64		/* Most of the time, pick one off the very_dirty list */
  65		jffs2_dbg(1, "Picking block from very_dirty_list to GC next\n");
  66		nextlist = &c->very_dirty_list;
  67	} else if (n < 126 && !list_empty(&c->dirty_list)) {
  68		jffs2_dbg(1, "Picking block from dirty_list to GC next\n");
  69		nextlist = &c->dirty_list;
  70	} else if (!list_empty(&c->clean_list)) {
  71		jffs2_dbg(1, "Picking block from clean_list to GC next\n");
  72		nextlist = &c->clean_list;
  73	} else if (!list_empty(&c->dirty_list)) {
  74		jffs2_dbg(1, "Picking block from dirty_list to GC next (clean_list was empty)\n");
  75
  76		nextlist = &c->dirty_list;
  77	} else if (!list_empty(&c->very_dirty_list)) {
  78		jffs2_dbg(1, "Picking block from very_dirty_list to GC next (clean_list and dirty_list were empty)\n");
  79		nextlist = &c->very_dirty_list;
  80	} else if (!list_empty(&c->erasable_list)) {
  81		jffs2_dbg(1, "Picking block from erasable_list to GC next (clean_list and {very_,}dirty_list were empty)\n");
  82
  83		nextlist = &c->erasable_list;
  84	} else if (!list_empty(&c->erasable_pending_wbuf_list)) {
  85		/* There are blocks are wating for the wbuf sync */
  86		jffs2_dbg(1, "Synching wbuf in order to reuse erasable_pending_wbuf_list blocks\n");
  87		spin_unlock(&c->erase_completion_lock);
  88		jffs2_flush_wbuf_pad(c);
  89		spin_lock(&c->erase_completion_lock);
  90		goto again;
  91	} else {
  92		/* Eep. All were empty */
  93		jffs2_dbg(1, "No clean, dirty _or_ erasable blocks to GC from! Where are they all?\n");
  94		return NULL;
  95	}
  96
  97	ret = list_entry(nextlist->next, struct jffs2_eraseblock, list);
  98	list_del(&ret->list);
  99	c->gcblock = ret;
 100	ret->gc_node = ret->first_node;
 101	if (!ret->gc_node) {
 102		pr_warn("Eep. ret->gc_node for block at 0x%08x is NULL\n",
 103			ret->offset);
 104		BUG();
 105	}
 106
 107	/* Have we accidentally picked a clean block with wasted space ? */
 108	if (ret->wasted_size) {
 109		jffs2_dbg(1, "Converting wasted_size %08x to dirty_size\n",
 110			  ret->wasted_size);
 111		ret->dirty_size += ret->wasted_size;
 112		c->wasted_size -= ret->wasted_size;
 113		c->dirty_size += ret->wasted_size;
 114		ret->wasted_size = 0;
 115	}
 116
 117	return ret;
 118}
 119
 120/* jffs2_garbage_collect_pass
 121 * Make a single attempt to progress GC. Move one node, and possibly
 122 * start erasing one eraseblock.
 123 */
 124int jffs2_garbage_collect_pass(struct jffs2_sb_info *c)
 125{
 126	struct jffs2_inode_info *f;
 127	struct jffs2_inode_cache *ic;
 128	struct jffs2_eraseblock *jeb;
 129	struct jffs2_raw_node_ref *raw;
 130	uint32_t gcblock_dirty;
 131	int ret = 0, inum, nlink;
 132	int xattr = 0;
 133
 134	if (mutex_lock_interruptible(&c->alloc_sem))
 135		return -EINTR;
 136
 137	for (;;) {
 138		spin_lock(&c->erase_completion_lock);
 139		if (!c->unchecked_size)
 140			break;
 141
 142		/* We can't start doing GC yet. We haven't finished checking
 143		   the node CRCs etc. Do it now. */
 144
 145		/* checked_ino is protected by the alloc_sem */
 146		if (c->checked_ino > c->highest_ino && xattr) {
 147			pr_crit("Checked all inodes but still 0x%x bytes of unchecked space?\n",
 148				c->unchecked_size);
 149			jffs2_dbg_dump_block_lists_nolock(c);
 150			spin_unlock(&c->erase_completion_lock);
 151			mutex_unlock(&c->alloc_sem);
 152			return -ENOSPC;
 153		}
 154
 155		spin_unlock(&c->erase_completion_lock);
 156
 157		if (!xattr)
 158			xattr = jffs2_verify_xattr(c);
 159
 160		spin_lock(&c->inocache_lock);
 161
 162		ic = jffs2_get_ino_cache(c, c->checked_ino++);
 163
 164		if (!ic) {
 165			spin_unlock(&c->inocache_lock);
 166			continue;
 167		}
 168
 169		if (!ic->pino_nlink) {
 170			jffs2_dbg(1, "Skipping check of ino #%d with nlink/pino zero\n",
 171				  ic->ino);
 172			spin_unlock(&c->inocache_lock);
 173			jffs2_xattr_delete_inode(c, ic);
 174			continue;
 175		}
 176		switch(ic->state) {
 177		case INO_STATE_CHECKEDABSENT:
 178		case INO_STATE_PRESENT:
 179			jffs2_dbg(1, "Skipping ino #%u already checked\n",
 180				  ic->ino);
 181			spin_unlock(&c->inocache_lock);
 182			continue;
 183
 184		case INO_STATE_GC:
 185		case INO_STATE_CHECKING:
 186			pr_warn("Inode #%u is in state %d during CRC check phase!\n",
 187				ic->ino, ic->state);
 188			spin_unlock(&c->inocache_lock);
 189			BUG();
 190
 191		case INO_STATE_READING:
 192			/* We need to wait for it to finish, lest we move on
 193			   and trigger the BUG() above while we haven't yet
 194			   finished checking all its nodes */
 195			jffs2_dbg(1, "Waiting for ino #%u to finish reading\n",
 196				  ic->ino);
 197			/* We need to come back again for the _same_ inode. We've
 198			 made no progress in this case, but that should be OK */
 199			c->checked_ino--;
 200
 201			mutex_unlock(&c->alloc_sem);
 202			sleep_on_spinunlock(&c->inocache_wq, &c->inocache_lock);
 203			return 0;
 204
 205		default:
 206			BUG();
 207
 208		case INO_STATE_UNCHECKED:
 209			;
 210		}
 211		ic->state = INO_STATE_CHECKING;
 212		spin_unlock(&c->inocache_lock);
 213
 214		jffs2_dbg(1, "%s(): triggering inode scan of ino#%u\n",
 215			  __func__, ic->ino);
 216
 217		ret = jffs2_do_crccheck_inode(c, ic);
 218		if (ret)
 219			pr_warn("Returned error for crccheck of ino #%u. Expect badness...\n",
 220				ic->ino);
 221
 222		jffs2_set_inocache_state(c, ic, INO_STATE_CHECKEDABSENT);
 223		mutex_unlock(&c->alloc_sem);
 224		return ret;
 225	}
 226
 227	/* If there are any blocks which need erasing, erase them now */
 228	if (!list_empty(&c->erase_complete_list) ||
 229	    !list_empty(&c->erase_pending_list)) {
 230		spin_unlock(&c->erase_completion_lock);
 231		mutex_unlock(&c->alloc_sem);
 232		jffs2_dbg(1, "%s(): erasing pending blocks\n", __func__);
 233		if (jffs2_erase_pending_blocks(c, 1))
 234			return 0;
 235
 236		jffs2_dbg(1, "No progress from erasing block; doing GC anyway\n");
 
 237		mutex_lock(&c->alloc_sem);
 238		spin_lock(&c->erase_completion_lock);
 239	}
 240
 241	/* First, work out which block we're garbage-collecting */
 242	jeb = c->gcblock;
 243
 244	if (!jeb)
 245		jeb = jffs2_find_gc_block(c);
 246
 247	if (!jeb) {
 248		/* Couldn't find a free block. But maybe we can just erase one and make 'progress'? */
 249		if (c->nr_erasing_blocks) {
 250			spin_unlock(&c->erase_completion_lock);
 251			mutex_unlock(&c->alloc_sem);
 252			return -EAGAIN;
 253		}
 254		jffs2_dbg(1, "Couldn't find erase block to garbage collect!\n");
 255		spin_unlock(&c->erase_completion_lock);
 256		mutex_unlock(&c->alloc_sem);
 257		return -EIO;
 258	}
 259
 260	jffs2_dbg(1, "GC from block %08x, used_size %08x, dirty_size %08x, free_size %08x\n",
 261		  jeb->offset, jeb->used_size, jeb->dirty_size, jeb->free_size);
 262	D1(if (c->nextblock)
 263	   printk(KERN_DEBUG "Nextblock at  %08x, used_size %08x, dirty_size %08x, wasted_size %08x, free_size %08x\n", c->nextblock->offset, c->nextblock->used_size, c->nextblock->dirty_size, c->nextblock->wasted_size, c->nextblock->free_size));
 264
 265	if (!jeb->used_size) {
 266		mutex_unlock(&c->alloc_sem);
 267		goto eraseit;
 268	}
 269
 270	raw = jeb->gc_node;
 271	gcblock_dirty = jeb->dirty_size;
 272
 273	while(ref_obsolete(raw)) {
 274		jffs2_dbg(1, "Node at 0x%08x is obsolete... skipping\n",
 275			  ref_offset(raw));
 276		raw = ref_next(raw);
 277		if (unlikely(!raw)) {
 278			pr_warn("eep. End of raw list while still supposedly nodes to GC\n");
 279			pr_warn("erase block at 0x%08x. free_size 0x%08x, dirty_size 0x%08x, used_size 0x%08x\n",
 280				jeb->offset, jeb->free_size,
 281				jeb->dirty_size, jeb->used_size);
 282			jeb->gc_node = raw;
 283			spin_unlock(&c->erase_completion_lock);
 284			mutex_unlock(&c->alloc_sem);
 285			BUG();
 286		}
 287	}
 288	jeb->gc_node = raw;
 289
 290	jffs2_dbg(1, "Going to garbage collect node at 0x%08x\n",
 291		  ref_offset(raw));
 292
 293	if (!raw->next_in_ino) {
 294		/* Inode-less node. Clean marker, snapshot or something like that */
 295		spin_unlock(&c->erase_completion_lock);
 296		if (ref_flags(raw) == REF_PRISTINE) {
 297			/* It's an unknown node with JFFS2_FEATURE_RWCOMPAT_COPY */
 298			jffs2_garbage_collect_pristine(c, NULL, raw);
 299		} else {
 300			/* Just mark it obsolete */
 301			jffs2_mark_node_obsolete(c, raw);
 302		}
 303		mutex_unlock(&c->alloc_sem);
 304		goto eraseit_lock;
 305	}
 306
 307	ic = jffs2_raw_ref_to_ic(raw);
 308
 309#ifdef CONFIG_JFFS2_FS_XATTR
 310	/* When 'ic' refers xattr_datum/xattr_ref, this node is GCed as xattr.
 311	 * We can decide whether this node is inode or xattr by ic->class.     */
 312	if (ic->class == RAWNODE_CLASS_XATTR_DATUM
 313	    || ic->class == RAWNODE_CLASS_XATTR_REF) {
 314		spin_unlock(&c->erase_completion_lock);
 315
 316		if (ic->class == RAWNODE_CLASS_XATTR_DATUM) {
 317			ret = jffs2_garbage_collect_xattr_datum(c, (struct jffs2_xattr_datum *)ic, raw);
 318		} else {
 319			ret = jffs2_garbage_collect_xattr_ref(c, (struct jffs2_xattr_ref *)ic, raw);
 320		}
 321		goto test_gcnode;
 322	}
 323#endif
 324
 325	/* We need to hold the inocache. Either the erase_completion_lock or
 326	   the inocache_lock are sufficient; we trade down since the inocache_lock
 327	   causes less contention. */
 328	spin_lock(&c->inocache_lock);
 329
 330	spin_unlock(&c->erase_completion_lock);
 331
 332	jffs2_dbg(1, "%s(): collecting from block @0x%08x. Node @0x%08x(%d), ino #%u\n",
 333		  __func__, jeb->offset, ref_offset(raw), ref_flags(raw),
 334		  ic->ino);
 335
 336	/* Three possibilities:
 337	   1. Inode is already in-core. We must iget it and do proper
 338	      updating to its fragtree, etc.
 339	   2. Inode is not in-core, node is REF_PRISTINE. We lock the
 340	      inocache to prevent a read_inode(), copy the node intact.
 341	   3. Inode is not in-core, node is not pristine. We must iget()
 342	      and take the slow path.
 343	*/
 344
 345	switch(ic->state) {
 346	case INO_STATE_CHECKEDABSENT:
 347		/* It's been checked, but it's not currently in-core.
 348		   We can just copy any pristine nodes, but have
 349		   to prevent anyone else from doing read_inode() while
 350		   we're at it, so we set the state accordingly */
 351		if (ref_flags(raw) == REF_PRISTINE)
 352			ic->state = INO_STATE_GC;
 353		else {
 354			jffs2_dbg(1, "Ino #%u is absent but node not REF_PRISTINE. Reading.\n",
 355				  ic->ino);
 356		}
 357		break;
 358
 359	case INO_STATE_PRESENT:
 360		/* It's in-core. GC must iget() it. */
 361		break;
 362
 363	case INO_STATE_UNCHECKED:
 364	case INO_STATE_CHECKING:
 365	case INO_STATE_GC:
 366		/* Should never happen. We should have finished checking
 367		   by the time we actually start doing any GC, and since
 368		   we're holding the alloc_sem, no other garbage collection
 369		   can happen.
 370		*/
 371		pr_crit("Inode #%u already in state %d in jffs2_garbage_collect_pass()!\n",
 372			ic->ino, ic->state);
 373		mutex_unlock(&c->alloc_sem);
 374		spin_unlock(&c->inocache_lock);
 375		BUG();
 376
 377	case INO_STATE_READING:
 378		/* Someone's currently trying to read it. We must wait for
 379		   them to finish and then go through the full iget() route
 380		   to do the GC. However, sometimes read_inode() needs to get
 381		   the alloc_sem() (for marking nodes invalid) so we must
 382		   drop the alloc_sem before sleeping. */
 383
 384		mutex_unlock(&c->alloc_sem);
 385		jffs2_dbg(1, "%s(): waiting for ino #%u in state %d\n",
 386			  __func__, ic->ino, ic->state);
 387		sleep_on_spinunlock(&c->inocache_wq, &c->inocache_lock);
 388		/* And because we dropped the alloc_sem we must start again from the
 389		   beginning. Ponder chance of livelock here -- we're returning success
 390		   without actually making any progress.
 391
 392		   Q: What are the chances that the inode is back in INO_STATE_READING
 393		   again by the time we next enter this function? And that this happens
 394		   enough times to cause a real delay?
 395
 396		   A: Small enough that I don't care :)
 397		*/
 398		return 0;
 399	}
 400
 401	/* OK. Now if the inode is in state INO_STATE_GC, we are going to copy the
 402	   node intact, and we don't have to muck about with the fragtree etc.
 403	   because we know it's not in-core. If it _was_ in-core, we go through
 404	   all the iget() crap anyway */
 405
 406	if (ic->state == INO_STATE_GC) {
 407		spin_unlock(&c->inocache_lock);
 408
 409		ret = jffs2_garbage_collect_pristine(c, ic, raw);
 410
 411		spin_lock(&c->inocache_lock);
 412		ic->state = INO_STATE_CHECKEDABSENT;
 413		wake_up(&c->inocache_wq);
 414
 415		if (ret != -EBADFD) {
 416			spin_unlock(&c->inocache_lock);
 417			goto test_gcnode;
 418		}
 419
 420		/* Fall through if it wanted us to, with inocache_lock held */
 421	}
 422
 423	/* Prevent the fairly unlikely race where the gcblock is
 424	   entirely obsoleted by the final close of a file which had
 425	   the only valid nodes in the block, followed by erasure,
 426	   followed by freeing of the ic because the erased block(s)
 427	   held _all_ the nodes of that inode.... never been seen but
 428	   it's vaguely possible. */
 429
 430	inum = ic->ino;
 431	nlink = ic->pino_nlink;
 432	spin_unlock(&c->inocache_lock);
 433
 434	f = jffs2_gc_fetch_inode(c, inum, !nlink);
 435	if (IS_ERR(f)) {
 436		ret = PTR_ERR(f);
 437		goto release_sem;
 438	}
 439	if (!f) {
 440		ret = 0;
 441		goto release_sem;
 442	}
 443
 444	ret = jffs2_garbage_collect_live(c, jeb, raw, f);
 445
 446	jffs2_gc_release_inode(c, f);
 447
 448 test_gcnode:
 449	if (jeb->dirty_size == gcblock_dirty && !ref_obsolete(jeb->gc_node)) {
 450		/* Eep. This really should never happen. GC is broken */
 451		pr_err("Error garbage collecting node at %08x!\n",
 452		       ref_offset(jeb->gc_node));
 453		ret = -ENOSPC;
 454	}
 455 release_sem:
 456	mutex_unlock(&c->alloc_sem);
 457
 458 eraseit_lock:
 459	/* If we've finished this block, start it erasing */
 460	spin_lock(&c->erase_completion_lock);
 461
 462 eraseit:
 463	if (c->gcblock && !c->gcblock->used_size) {
 464		jffs2_dbg(1, "Block at 0x%08x completely obsoleted by GC. Moving to erase_pending_list\n",
 465			  c->gcblock->offset);
 466		/* We're GC'ing an empty block? */
 467		list_add_tail(&c->gcblock->list, &c->erase_pending_list);
 468		c->gcblock = NULL;
 469		c->nr_erasing_blocks++;
 470		jffs2_garbage_collect_trigger(c);
 471	}
 472	spin_unlock(&c->erase_completion_lock);
 473
 474	return ret;
 475}
 476
 477static int jffs2_garbage_collect_live(struct jffs2_sb_info *c,  struct jffs2_eraseblock *jeb,
 478				      struct jffs2_raw_node_ref *raw, struct jffs2_inode_info *f)
 479{
 480	struct jffs2_node_frag *frag;
 481	struct jffs2_full_dnode *fn = NULL;
 482	struct jffs2_full_dirent *fd;
 483	uint32_t start = 0, end = 0, nrfrags = 0;
 484	int ret = 0;
 485
 486	mutex_lock(&f->sem);
 487
 488	/* Now we have the lock for this inode. Check that it's still the one at the head
 489	   of the list. */
 490
 491	spin_lock(&c->erase_completion_lock);
 492
 493	if (c->gcblock != jeb) {
 494		spin_unlock(&c->erase_completion_lock);
 495		jffs2_dbg(1, "GC block is no longer gcblock. Restart\n");
 496		goto upnout;
 497	}
 498	if (ref_obsolete(raw)) {
 499		spin_unlock(&c->erase_completion_lock);
 500		jffs2_dbg(1, "node to be GC'd was obsoleted in the meantime.\n");
 501		/* They'll call again */
 502		goto upnout;
 503	}
 504	spin_unlock(&c->erase_completion_lock);
 505
 506	/* OK. Looks safe. And nobody can get us now because we have the semaphore. Move the block */
 507	if (f->metadata && f->metadata->raw == raw) {
 508		fn = f->metadata;
 509		ret = jffs2_garbage_collect_metadata(c, jeb, f, fn);
 510		goto upnout;
 511	}
 512
 513	/* FIXME. Read node and do lookup? */
 514	for (frag = frag_first(&f->fragtree); frag; frag = frag_next(frag)) {
 515		if (frag->node && frag->node->raw == raw) {
 516			fn = frag->node;
 517			end = frag->ofs + frag->size;
 518			if (!nrfrags++)
 519				start = frag->ofs;
 520			if (nrfrags == frag->node->frags)
 521				break; /* We've found them all */
 522		}
 523	}
 524	if (fn) {
 525		if (ref_flags(raw) == REF_PRISTINE) {
 526			ret = jffs2_garbage_collect_pristine(c, f->inocache, raw);
 527			if (!ret) {
 528				/* Urgh. Return it sensibly. */
 529				frag->node->raw = f->inocache->nodes;
 530			}
 531			if (ret != -EBADFD)
 532				goto upnout;
 533		}
 534		/* We found a datanode. Do the GC */
 535		if((start >> PAGE_CACHE_SHIFT) < ((end-1) >> PAGE_CACHE_SHIFT)) {
 536			/* It crosses a page boundary. Therefore, it must be a hole. */
 537			ret = jffs2_garbage_collect_hole(c, jeb, f, fn, start, end);
 538		} else {
 539			/* It could still be a hole. But we GC the page this way anyway */
 540			ret = jffs2_garbage_collect_dnode(c, jeb, f, fn, start, end);
 541		}
 542		goto upnout;
 543	}
 544
 545	/* Wasn't a dnode. Try dirent */
 546	for (fd = f->dents; fd; fd=fd->next) {
 547		if (fd->raw == raw)
 548			break;
 549	}
 550
 551	if (fd && fd->ino) {
 552		ret = jffs2_garbage_collect_dirent(c, jeb, f, fd);
 553	} else if (fd) {
 554		ret = jffs2_garbage_collect_deletion_dirent(c, jeb, f, fd);
 555	} else {
 556		pr_warn("Raw node at 0x%08x wasn't in node lists for ino #%u\n",
 557			ref_offset(raw), f->inocache->ino);
 558		if (ref_obsolete(raw)) {
 559			pr_warn("But it's obsolete so we don't mind too much\n");
 560		} else {
 561			jffs2_dbg_dump_node(c, ref_offset(raw));
 562			BUG();
 563		}
 564	}
 565 upnout:
 566	mutex_unlock(&f->sem);
 567
 568	return ret;
 569}
 570
 571static int jffs2_garbage_collect_pristine(struct jffs2_sb_info *c,
 572					  struct jffs2_inode_cache *ic,
 573					  struct jffs2_raw_node_ref *raw)
 574{
 575	union jffs2_node_union *node;
 576	size_t retlen;
 577	int ret;
 578	uint32_t phys_ofs, alloclen;
 579	uint32_t crc, rawlen;
 580	int retried = 0;
 581
 582	jffs2_dbg(1, "Going to GC REF_PRISTINE node at 0x%08x\n",
 583		  ref_offset(raw));
 584
 585	alloclen = rawlen = ref_totlen(c, c->gcblock, raw);
 586
 587	/* Ask for a small amount of space (or the totlen if smaller) because we
 588	   don't want to force wastage of the end of a block if splitting would
 589	   work. */
 590	if (ic && alloclen > sizeof(struct jffs2_raw_inode) + JFFS2_MIN_DATA_LEN)
 591		alloclen = sizeof(struct jffs2_raw_inode) + JFFS2_MIN_DATA_LEN;
 592
 593	ret = jffs2_reserve_space_gc(c, alloclen, &alloclen, rawlen);
 594	/* 'rawlen' is not the exact summary size; it is only an upper estimation */
 595
 596	if (ret)
 597		return ret;
 598
 599	if (alloclen < rawlen) {
 600		/* Doesn't fit untouched. We'll go the old route and split it */
 601		return -EBADFD;
 602	}
 603
 604	node = kmalloc(rawlen, GFP_KERNEL);
 605	if (!node)
 606		return -ENOMEM;
 607
 608	ret = jffs2_flash_read(c, ref_offset(raw), rawlen, &retlen, (char *)node);
 609	if (!ret && retlen != rawlen)
 610		ret = -EIO;
 611	if (ret)
 612		goto out_node;
 613
 614	crc = crc32(0, node, sizeof(struct jffs2_unknown_node)-4);
 615	if (je32_to_cpu(node->u.hdr_crc) != crc) {
 616		pr_warn("Header CRC failed on REF_PRISTINE node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
 617			ref_offset(raw), je32_to_cpu(node->u.hdr_crc), crc);
 618		goto bail;
 619	}
 620
 621	switch(je16_to_cpu(node->u.nodetype)) {
 622	case JFFS2_NODETYPE_INODE:
 623		crc = crc32(0, node, sizeof(node->i)-8);
 624		if (je32_to_cpu(node->i.node_crc) != crc) {
 625			pr_warn("Node CRC failed on REF_PRISTINE data node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
 626				ref_offset(raw), je32_to_cpu(node->i.node_crc),
 627				crc);
 628			goto bail;
 629		}
 630
 631		if (je32_to_cpu(node->i.dsize)) {
 632			crc = crc32(0, node->i.data, je32_to_cpu(node->i.csize));
 633			if (je32_to_cpu(node->i.data_crc) != crc) {
 634				pr_warn("Data CRC failed on REF_PRISTINE data node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
 635					ref_offset(raw),
 636					je32_to_cpu(node->i.data_crc), crc);
 637				goto bail;
 638			}
 639		}
 640		break;
 641
 642	case JFFS2_NODETYPE_DIRENT:
 643		crc = crc32(0, node, sizeof(node->d)-8);
 644		if (je32_to_cpu(node->d.node_crc) != crc) {
 645			pr_warn("Node CRC failed on REF_PRISTINE dirent node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
 646				ref_offset(raw),
 647				je32_to_cpu(node->d.node_crc), crc);
 648			goto bail;
 649		}
 650
 651		if (strnlen(node->d.name, node->d.nsize) != node->d.nsize) {
 652			pr_warn("Name in dirent node at 0x%08x contains zeroes\n",
 653				ref_offset(raw));
 654			goto bail;
 655		}
 656
 657		if (node->d.nsize) {
 658			crc = crc32(0, node->d.name, node->d.nsize);
 659			if (je32_to_cpu(node->d.name_crc) != crc) {
 660				pr_warn("Name CRC failed on REF_PRISTINE dirent node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
 661					ref_offset(raw),
 662					je32_to_cpu(node->d.name_crc), crc);
 663				goto bail;
 664			}
 665		}
 666		break;
 667	default:
 668		/* If it's inode-less, we don't _know_ what it is. Just copy it intact */
 669		if (ic) {
 670			pr_warn("Unknown node type for REF_PRISTINE node at 0x%08x: 0x%04x\n",
 671				ref_offset(raw), je16_to_cpu(node->u.nodetype));
 672			goto bail;
 673		}
 674	}
 675
 676	/* OK, all the CRCs are good; this node can just be copied as-is. */
 677 retry:
 678	phys_ofs = write_ofs(c);
 679
 680	ret = jffs2_flash_write(c, phys_ofs, rawlen, &retlen, (char *)node);
 681
 682	if (ret || (retlen != rawlen)) {
 683		pr_notice("Write of %d bytes at 0x%08x failed. returned %d, retlen %zd\n",
 684			  rawlen, phys_ofs, ret, retlen);
 685		if (retlen) {
 686			jffs2_add_physical_node_ref(c, phys_ofs | REF_OBSOLETE, rawlen, NULL);
 687		} else {
 688			pr_notice("Not marking the space at 0x%08x as dirty because the flash driver returned retlen zero\n",
 689				  phys_ofs);
 690		}
 691		if (!retried) {
 692			/* Try to reallocate space and retry */
 693			uint32_t dummy;
 694			struct jffs2_eraseblock *jeb = &c->blocks[phys_ofs / c->sector_size];
 695
 696			retried = 1;
 697
 698			jffs2_dbg(1, "Retrying failed write of REF_PRISTINE node.\n");
 699
 700			jffs2_dbg_acct_sanity_check(c,jeb);
 701			jffs2_dbg_acct_paranoia_check(c, jeb);
 702
 703			ret = jffs2_reserve_space_gc(c, rawlen, &dummy, rawlen);
 704						/* this is not the exact summary size of it,
 705							it is only an upper estimation */
 706
 707			if (!ret) {
 708				jffs2_dbg(1, "Allocated space at 0x%08x to retry failed write.\n",
 709					  phys_ofs);
 710
 711				jffs2_dbg_acct_sanity_check(c,jeb);
 712				jffs2_dbg_acct_paranoia_check(c, jeb);
 713
 714				goto retry;
 715			}
 716			jffs2_dbg(1, "Failed to allocate space to retry failed write: %d!\n",
 717				  ret);
 718		}
 719
 720		if (!ret)
 721			ret = -EIO;
 722		goto out_node;
 723	}
 724	jffs2_add_physical_node_ref(c, phys_ofs | REF_PRISTINE, rawlen, ic);
 725
 726	jffs2_mark_node_obsolete(c, raw);
 727	jffs2_dbg(1, "WHEEE! GC REF_PRISTINE node at 0x%08x succeeded\n",
 728		  ref_offset(raw));
 729
 730 out_node:
 731	kfree(node);
 732	return ret;
 733 bail:
 734	ret = -EBADFD;
 735	goto out_node;
 736}
 737
 738static int jffs2_garbage_collect_metadata(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
 739					struct jffs2_inode_info *f, struct jffs2_full_dnode *fn)
 740{
 741	struct jffs2_full_dnode *new_fn;
 742	struct jffs2_raw_inode ri;
 743	struct jffs2_node_frag *last_frag;
 744	union jffs2_device_node dev;
 745	char *mdata = NULL;
 746	int mdatalen = 0;
 747	uint32_t alloclen, ilen;
 748	int ret;
 749
 750	if (S_ISBLK(JFFS2_F_I_MODE(f)) ||
 751	    S_ISCHR(JFFS2_F_I_MODE(f)) ) {
 752		/* For these, we don't actually need to read the old node */
 753		mdatalen = jffs2_encode_dev(&dev, JFFS2_F_I_RDEV(f));
 754		mdata = (char *)&dev;
 755		jffs2_dbg(1, "%s(): Writing %d bytes of kdev_t\n",
 756			  __func__, mdatalen);
 757	} else if (S_ISLNK(JFFS2_F_I_MODE(f))) {
 758		mdatalen = fn->size;
 759		mdata = kmalloc(fn->size, GFP_KERNEL);
 760		if (!mdata) {
 761			pr_warn("kmalloc of mdata failed in jffs2_garbage_collect_metadata()\n");
 762			return -ENOMEM;
 763		}
 764		ret = jffs2_read_dnode(c, f, fn, mdata, 0, mdatalen);
 765		if (ret) {
 766			pr_warn("read of old metadata failed in jffs2_garbage_collect_metadata(): %d\n",
 767				ret);
 768			kfree(mdata);
 769			return ret;
 770		}
 771		jffs2_dbg(1, "%s(): Writing %d bites of symlink target\n",
 772			  __func__, mdatalen);
 773
 774	}
 775
 776	ret = jffs2_reserve_space_gc(c, sizeof(ri) + mdatalen, &alloclen,
 777				JFFS2_SUMMARY_INODE_SIZE);
 778	if (ret) {
 779		pr_warn("jffs2_reserve_space_gc of %zd bytes for garbage_collect_metadata failed: %d\n",
 780			sizeof(ri) + mdatalen, ret);
 781		goto out;
 782	}
 783
 784	last_frag = frag_last(&f->fragtree);
 785	if (last_frag)
 786		/* Fetch the inode length from the fragtree rather then
 787		 * from i_size since i_size may have not been updated yet */
 788		ilen = last_frag->ofs + last_frag->size;
 789	else
 790		ilen = JFFS2_F_I_SIZE(f);
 791
 792	memset(&ri, 0, sizeof(ri));
 793	ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
 794	ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
 795	ri.totlen = cpu_to_je32(sizeof(ri) + mdatalen);
 796	ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4));
 797
 798	ri.ino = cpu_to_je32(f->inocache->ino);
 799	ri.version = cpu_to_je32(++f->highest_version);
 800	ri.mode = cpu_to_jemode(JFFS2_F_I_MODE(f));
 801	ri.uid = cpu_to_je16(JFFS2_F_I_UID(f));
 802	ri.gid = cpu_to_je16(JFFS2_F_I_GID(f));
 803	ri.isize = cpu_to_je32(ilen);
 804	ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f));
 805	ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f));
 806	ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f));
 807	ri.offset = cpu_to_je32(0);
 808	ri.csize = cpu_to_je32(mdatalen);
 809	ri.dsize = cpu_to_je32(mdatalen);
 810	ri.compr = JFFS2_COMPR_NONE;
 811	ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
 812	ri.data_crc = cpu_to_je32(crc32(0, mdata, mdatalen));
 813
 814	new_fn = jffs2_write_dnode(c, f, &ri, mdata, mdatalen, ALLOC_GC);
 815
 816	if (IS_ERR(new_fn)) {
 817		pr_warn("Error writing new dnode: %ld\n", PTR_ERR(new_fn));
 818		ret = PTR_ERR(new_fn);
 819		goto out;
 820	}
 821	jffs2_mark_node_obsolete(c, fn->raw);
 822	jffs2_free_full_dnode(fn);
 823	f->metadata = new_fn;
 824 out:
 825	if (S_ISLNK(JFFS2_F_I_MODE(f)))
 826		kfree(mdata);
 827	return ret;
 828}
 829
 830static int jffs2_garbage_collect_dirent(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
 831					struct jffs2_inode_info *f, struct jffs2_full_dirent *fd)
 832{
 833	struct jffs2_full_dirent *new_fd;
 834	struct jffs2_raw_dirent rd;
 835	uint32_t alloclen;
 836	int ret;
 837
 838	rd.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
 839	rd.nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
 840	rd.nsize = strlen(fd->name);
 841	rd.totlen = cpu_to_je32(sizeof(rd) + rd.nsize);
 842	rd.hdr_crc = cpu_to_je32(crc32(0, &rd, sizeof(struct jffs2_unknown_node)-4));
 843
 844	rd.pino = cpu_to_je32(f->inocache->ino);
 845	rd.version = cpu_to_je32(++f->highest_version);
 846	rd.ino = cpu_to_je32(fd->ino);
 847	/* If the times on this inode were set by explicit utime() they can be different,
 848	   so refrain from splatting them. */
 849	if (JFFS2_F_I_MTIME(f) == JFFS2_F_I_CTIME(f))
 850		rd.mctime = cpu_to_je32(JFFS2_F_I_MTIME(f));
 851	else
 852		rd.mctime = cpu_to_je32(0);
 853	rd.type = fd->type;
 854	rd.node_crc = cpu_to_je32(crc32(0, &rd, sizeof(rd)-8));
 855	rd.name_crc = cpu_to_je32(crc32(0, fd->name, rd.nsize));
 856
 857	ret = jffs2_reserve_space_gc(c, sizeof(rd)+rd.nsize, &alloclen,
 858				JFFS2_SUMMARY_DIRENT_SIZE(rd.nsize));
 859	if (ret) {
 860		pr_warn("jffs2_reserve_space_gc of %zd bytes for garbage_collect_dirent failed: %d\n",
 861			sizeof(rd)+rd.nsize, ret);
 862		return ret;
 863	}
 864	new_fd = jffs2_write_dirent(c, f, &rd, fd->name, rd.nsize, ALLOC_GC);
 865
 866	if (IS_ERR(new_fd)) {
 867		pr_warn("jffs2_write_dirent in garbage_collect_dirent failed: %ld\n",
 868			PTR_ERR(new_fd));
 869		return PTR_ERR(new_fd);
 870	}
 871	jffs2_add_fd_to_list(c, new_fd, &f->dents);
 872	return 0;
 873}
 874
 875static int jffs2_garbage_collect_deletion_dirent(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
 876					struct jffs2_inode_info *f, struct jffs2_full_dirent *fd)
 877{
 878	struct jffs2_full_dirent **fdp = &f->dents;
 879	int found = 0;
 880
 881	/* On a medium where we can't actually mark nodes obsolete
 882	   pernamently, such as NAND flash, we need to work out
 883	   whether this deletion dirent is still needed to actively
 884	   delete a 'real' dirent with the same name that's still
 885	   somewhere else on the flash. */
 886	if (!jffs2_can_mark_obsolete(c)) {
 887		struct jffs2_raw_dirent *rd;
 888		struct jffs2_raw_node_ref *raw;
 889		int ret;
 890		size_t retlen;
 891		int name_len = strlen(fd->name);
 892		uint32_t name_crc = crc32(0, fd->name, name_len);
 893		uint32_t rawlen = ref_totlen(c, jeb, fd->raw);
 894
 895		rd = kmalloc(rawlen, GFP_KERNEL);
 896		if (!rd)
 897			return -ENOMEM;
 898
 899		/* Prevent the erase code from nicking the obsolete node refs while
 900		   we're looking at them. I really don't like this extra lock but
 901		   can't see any alternative. Suggestions on a postcard to... */
 902		mutex_lock(&c->erase_free_sem);
 903
 904		for (raw = f->inocache->nodes; raw != (void *)f->inocache; raw = raw->next_in_ino) {
 905
 906			cond_resched();
 907
 908			/* We only care about obsolete ones */
 909			if (!(ref_obsolete(raw)))
 910				continue;
 911
 912			/* Any dirent with the same name is going to have the same length... */
 913			if (ref_totlen(c, NULL, raw) != rawlen)
 914				continue;
 915
 916			/* Doesn't matter if there's one in the same erase block. We're going to
 917			   delete it too at the same time. */
 918			if (SECTOR_ADDR(raw->flash_offset) == SECTOR_ADDR(fd->raw->flash_offset))
 919				continue;
 920
 921			jffs2_dbg(1, "Check potential deletion dirent at %08x\n",
 922				  ref_offset(raw));
 923
 924			/* This is an obsolete node belonging to the same directory, and it's of the right
 925			   length. We need to take a closer look...*/
 926			ret = jffs2_flash_read(c, ref_offset(raw), rawlen, &retlen, (char *)rd);
 927			if (ret) {
 928				pr_warn("%s(): Read error (%d) reading obsolete node at %08x\n",
 929					__func__, ret, ref_offset(raw));
 930				/* If we can't read it, we don't need to continue to obsolete it. Continue */
 931				continue;
 932			}
 933			if (retlen != rawlen) {
 934				pr_warn("%s(): Short read (%zd not %u) reading header from obsolete node at %08x\n",
 935					__func__, retlen, rawlen,
 936					ref_offset(raw));
 937				continue;
 938			}
 939
 940			if (je16_to_cpu(rd->nodetype) != JFFS2_NODETYPE_DIRENT)
 941				continue;
 942
 943			/* If the name CRC doesn't match, skip */
 944			if (je32_to_cpu(rd->name_crc) != name_crc)
 945				continue;
 946
 947			/* If the name length doesn't match, or it's another deletion dirent, skip */
 948			if (rd->nsize != name_len || !je32_to_cpu(rd->ino))
 949				continue;
 950
 951			/* OK, check the actual name now */
 952			if (memcmp(rd->name, fd->name, name_len))
 953				continue;
 954
 955			/* OK. The name really does match. There really is still an older node on
 956			   the flash which our deletion dirent obsoletes. So we have to write out
 957			   a new deletion dirent to replace it */
 958			mutex_unlock(&c->erase_free_sem);
 959
 960			jffs2_dbg(1, "Deletion dirent at %08x still obsoletes real dirent \"%s\" at %08x for ino #%u\n",
 961				  ref_offset(fd->raw), fd->name,
 962				  ref_offset(raw), je32_to_cpu(rd->ino));
 963			kfree(rd);
 964
 965			return jffs2_garbage_collect_dirent(c, jeb, f, fd);
 966		}
 967
 968		mutex_unlock(&c->erase_free_sem);
 969		kfree(rd);
 970	}
 971
 972	/* FIXME: If we're deleting a dirent which contains the current mtime and ctime,
 973	   we should update the metadata node with those times accordingly */
 974
 975	/* No need for it any more. Just mark it obsolete and remove it from the list */
 976	while (*fdp) {
 977		if ((*fdp) == fd) {
 978			found = 1;
 979			*fdp = fd->next;
 980			break;
 981		}
 982		fdp = &(*fdp)->next;
 983	}
 984	if (!found) {
 985		pr_warn("Deletion dirent \"%s\" not found in list for ino #%u\n",
 986			fd->name, f->inocache->ino);
 987	}
 988	jffs2_mark_node_obsolete(c, fd->raw);
 989	jffs2_free_full_dirent(fd);
 990	return 0;
 991}
 992
 993static int jffs2_garbage_collect_hole(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
 994				      struct jffs2_inode_info *f, struct jffs2_full_dnode *fn,
 995				      uint32_t start, uint32_t end)
 996{
 997	struct jffs2_raw_inode ri;
 998	struct jffs2_node_frag *frag;
 999	struct jffs2_full_dnode *new_fn;
1000	uint32_t alloclen, ilen;
1001	int ret;
1002
1003	jffs2_dbg(1, "Writing replacement hole node for ino #%u from offset 0x%x to 0x%x\n",
1004		  f->inocache->ino, start, end);
1005
1006	memset(&ri, 0, sizeof(ri));
1007
1008	if(fn->frags > 1) {
1009		size_t readlen;
1010		uint32_t crc;
1011		/* It's partially obsoleted by a later write. So we have to
1012		   write it out again with the _same_ version as before */
1013		ret = jffs2_flash_read(c, ref_offset(fn->raw), sizeof(ri), &readlen, (char *)&ri);
1014		if (readlen != sizeof(ri) || ret) {
1015			pr_warn("Node read failed in jffs2_garbage_collect_hole. Ret %d, retlen %zd. Data will be lost by writing new hole node\n",
1016				ret, readlen);
1017			goto fill;
1018		}
1019		if (je16_to_cpu(ri.nodetype) != JFFS2_NODETYPE_INODE) {
1020			pr_warn("%s(): Node at 0x%08x had node type 0x%04x instead of JFFS2_NODETYPE_INODE(0x%04x)\n",
1021				__func__, ref_offset(fn->raw),
1022				je16_to_cpu(ri.nodetype), JFFS2_NODETYPE_INODE);
1023			return -EIO;
1024		}
1025		if (je32_to_cpu(ri.totlen) != sizeof(ri)) {
1026			pr_warn("%s(): Node at 0x%08x had totlen 0x%x instead of expected 0x%zx\n",
1027				__func__, ref_offset(fn->raw),
1028				je32_to_cpu(ri.totlen), sizeof(ri));
1029			return -EIO;
1030		}
1031		crc = crc32(0, &ri, sizeof(ri)-8);
1032		if (crc != je32_to_cpu(ri.node_crc)) {
1033			pr_warn("%s: Node at 0x%08x had CRC 0x%08x which doesn't match calculated CRC 0x%08x\n",
1034				__func__, ref_offset(fn->raw),
1035				je32_to_cpu(ri.node_crc), crc);
1036			/* FIXME: We could possibly deal with this by writing new holes for each frag */
1037			pr_warn("Data in the range 0x%08x to 0x%08x of inode #%u will be lost\n",
1038				start, end, f->inocache->ino);
1039			goto fill;
1040		}
1041		if (ri.compr != JFFS2_COMPR_ZERO) {
1042			pr_warn("%s(): Node 0x%08x wasn't a hole node!\n",
1043				__func__, ref_offset(fn->raw));
1044			pr_warn("Data in the range 0x%08x to 0x%08x of inode #%u will be lost\n",
1045				start, end, f->inocache->ino);
1046			goto fill;
1047		}
1048	} else {
1049	fill:
1050		ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
1051		ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
1052		ri.totlen = cpu_to_je32(sizeof(ri));
1053		ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4));
1054
1055		ri.ino = cpu_to_je32(f->inocache->ino);
1056		ri.version = cpu_to_je32(++f->highest_version);
1057		ri.offset = cpu_to_je32(start);
1058		ri.dsize = cpu_to_je32(end - start);
1059		ri.csize = cpu_to_je32(0);
1060		ri.compr = JFFS2_COMPR_ZERO;
1061	}
1062
1063	frag = frag_last(&f->fragtree);
1064	if (frag)
1065		/* Fetch the inode length from the fragtree rather then
1066		 * from i_size since i_size may have not been updated yet */
1067		ilen = frag->ofs + frag->size;
1068	else
1069		ilen = JFFS2_F_I_SIZE(f);
1070
1071	ri.mode = cpu_to_jemode(JFFS2_F_I_MODE(f));
1072	ri.uid = cpu_to_je16(JFFS2_F_I_UID(f));
1073	ri.gid = cpu_to_je16(JFFS2_F_I_GID(f));
1074	ri.isize = cpu_to_je32(ilen);
1075	ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f));
1076	ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f));
1077	ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f));
1078	ri.data_crc = cpu_to_je32(0);
1079	ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
1080
1081	ret = jffs2_reserve_space_gc(c, sizeof(ri), &alloclen,
1082				     JFFS2_SUMMARY_INODE_SIZE);
1083	if (ret) {
1084		pr_warn("jffs2_reserve_space_gc of %zd bytes for garbage_collect_hole failed: %d\n",
1085			sizeof(ri), ret);
1086		return ret;
1087	}
1088	new_fn = jffs2_write_dnode(c, f, &ri, NULL, 0, ALLOC_GC);
1089
1090	if (IS_ERR(new_fn)) {
1091		pr_warn("Error writing new hole node: %ld\n", PTR_ERR(new_fn));
1092		return PTR_ERR(new_fn);
1093	}
1094	if (je32_to_cpu(ri.version) == f->highest_version) {
1095		jffs2_add_full_dnode_to_inode(c, f, new_fn);
1096		if (f->metadata) {
1097			jffs2_mark_node_obsolete(c, f->metadata->raw);
1098			jffs2_free_full_dnode(f->metadata);
1099			f->metadata = NULL;
1100		}
1101		return 0;
1102	}
1103
1104	/*
1105	 * We should only get here in the case where the node we are
1106	 * replacing had more than one frag, so we kept the same version
1107	 * number as before. (Except in case of error -- see 'goto fill;'
1108	 * above.)
1109	 */
1110	D1(if(unlikely(fn->frags <= 1)) {
1111			pr_warn("%s(): Replacing fn with %d frag(s) but new ver %d != highest_version %d of ino #%d\n",
1112				__func__, fn->frags, je32_to_cpu(ri.version),
1113				f->highest_version, je32_to_cpu(ri.ino));
1114	});
1115
1116	/* This is a partially-overlapped hole node. Mark it REF_NORMAL not REF_PRISTINE */
1117	mark_ref_normal(new_fn->raw);
1118
1119	for (frag = jffs2_lookup_node_frag(&f->fragtree, fn->ofs);
1120	     frag; frag = frag_next(frag)) {
1121		if (frag->ofs > fn->size + fn->ofs)
1122			break;
1123		if (frag->node == fn) {
1124			frag->node = new_fn;
1125			new_fn->frags++;
1126			fn->frags--;
1127		}
1128	}
1129	if (fn->frags) {
1130		pr_warn("%s(): Old node still has frags!\n", __func__);
1131		BUG();
1132	}
1133	if (!new_fn->frags) {
1134		pr_warn("%s(): New node has no frags!\n", __func__);
1135		BUG();
1136	}
1137
1138	jffs2_mark_node_obsolete(c, fn->raw);
1139	jffs2_free_full_dnode(fn);
1140
1141	return 0;
1142}
1143
1144static int jffs2_garbage_collect_dnode(struct jffs2_sb_info *c, struct jffs2_eraseblock *orig_jeb,
1145				       struct jffs2_inode_info *f, struct jffs2_full_dnode *fn,
1146				       uint32_t start, uint32_t end)
1147{
1148	struct jffs2_full_dnode *new_fn;
1149	struct jffs2_raw_inode ri;
1150	uint32_t alloclen, offset, orig_end, orig_start;
1151	int ret = 0;
1152	unsigned char *comprbuf = NULL, *writebuf;
1153	unsigned long pg;
1154	unsigned char *pg_ptr;
1155
1156	memset(&ri, 0, sizeof(ri));
1157
1158	jffs2_dbg(1, "Writing replacement dnode for ino #%u from offset 0x%x to 0x%x\n",
1159		  f->inocache->ino, start, end);
1160
1161	orig_end = end;
1162	orig_start = start;
1163
1164	if (c->nr_free_blocks + c->nr_erasing_blocks > c->resv_blocks_gcmerge) {
1165		/* Attempt to do some merging. But only expand to cover logically
1166		   adjacent frags if the block containing them is already considered
1167		   to be dirty. Otherwise we end up with GC just going round in
1168		   circles dirtying the nodes it already wrote out, especially
1169		   on NAND where we have small eraseblocks and hence a much higher
1170		   chance of nodes having to be split to cross boundaries. */
1171
1172		struct jffs2_node_frag *frag;
1173		uint32_t min, max;
1174
1175		min = start & ~(PAGE_CACHE_SIZE-1);
1176		max = min + PAGE_CACHE_SIZE;
1177
1178		frag = jffs2_lookup_node_frag(&f->fragtree, start);
1179
1180		/* BUG_ON(!frag) but that'll happen anyway... */
1181
1182		BUG_ON(frag->ofs != start);
1183
1184		/* First grow down... */
1185		while((frag = frag_prev(frag)) && frag->ofs >= min) {
1186
1187			/* If the previous frag doesn't even reach the beginning, there's
1188			   excessive fragmentation. Just merge. */
1189			if (frag->ofs > min) {
1190				jffs2_dbg(1, "Expanding down to cover partial frag (0x%x-0x%x)\n",
1191					  frag->ofs, frag->ofs+frag->size);
1192				start = frag->ofs;
1193				continue;
1194			}
1195			/* OK. This frag holds the first byte of the page. */
1196			if (!frag->node || !frag->node->raw) {
1197				jffs2_dbg(1, "First frag in page is hole (0x%x-0x%x). Not expanding down.\n",
1198					  frag->ofs, frag->ofs+frag->size);
1199				break;
1200			} else {
1201
1202				/* OK, it's a frag which extends to the beginning of the page. Does it live
1203				   in a block which is still considered clean? If so, don't obsolete it.
1204				   If not, cover it anyway. */
1205
1206				struct jffs2_raw_node_ref *raw = frag->node->raw;
1207				struct jffs2_eraseblock *jeb;
1208
1209				jeb = &c->blocks[raw->flash_offset / c->sector_size];
1210
1211				if (jeb == c->gcblock) {
1212					jffs2_dbg(1, "Expanding down to cover frag (0x%x-0x%x) in gcblock at %08x\n",
1213						  frag->ofs,
1214						  frag->ofs + frag->size,
1215						  ref_offset(raw));
1216					start = frag->ofs;
1217					break;
1218				}
1219				if (!ISDIRTY(jeb->dirty_size + jeb->wasted_size)) {
1220					jffs2_dbg(1, "Not expanding down to cover frag (0x%x-0x%x) in clean block %08x\n",
1221						  frag->ofs,
1222						  frag->ofs + frag->size,
1223						  jeb->offset);
1224					break;
1225				}
1226
1227				jffs2_dbg(1, "Expanding down to cover frag (0x%x-0x%x) in dirty block %08x\n",
1228					  frag->ofs,
1229					  frag->ofs + frag->size,
1230					  jeb->offset);
1231				start = frag->ofs;
1232				break;
1233			}
1234		}
1235
1236		/* ... then up */
1237
1238		/* Find last frag which is actually part of the node we're to GC. */
1239		frag = jffs2_lookup_node_frag(&f->fragtree, end-1);
1240
1241		while((frag = frag_next(frag)) && frag->ofs+frag->size <= max) {
1242
1243			/* If the previous frag doesn't even reach the beginning, there's lots
1244			   of fragmentation. Just merge. */
1245			if (frag->ofs+frag->size < max) {
1246				jffs2_dbg(1, "Expanding up to cover partial frag (0x%x-0x%x)\n",
1247					  frag->ofs, frag->ofs+frag->size);
1248				end = frag->ofs + frag->size;
1249				continue;
1250			}
1251
1252			if (!frag->node || !frag->node->raw) {
1253				jffs2_dbg(1, "Last frag in page is hole (0x%x-0x%x). Not expanding up.\n",
1254					  frag->ofs, frag->ofs+frag->size);
1255				break;
1256			} else {
1257
1258				/* OK, it's a frag which extends to the beginning of the page. Does it live
1259				   in a block which is still considered clean? If so, don't obsolete it.
1260				   If not, cover it anyway. */
1261
1262				struct jffs2_raw_node_ref *raw = frag->node->raw;
1263				struct jffs2_eraseblock *jeb;
1264
1265				jeb = &c->blocks[raw->flash_offset / c->sector_size];
1266
1267				if (jeb == c->gcblock) {
1268					jffs2_dbg(1, "Expanding up to cover frag (0x%x-0x%x) in gcblock at %08x\n",
1269						  frag->ofs,
1270						  frag->ofs + frag->size,
1271						  ref_offset(raw));
1272					end = frag->ofs + frag->size;
1273					break;
1274				}
1275				if (!ISDIRTY(jeb->dirty_size + jeb->wasted_size)) {
1276					jffs2_dbg(1, "Not expanding up to cover frag (0x%x-0x%x) in clean block %08x\n",
1277						  frag->ofs,
1278						  frag->ofs + frag->size,
1279						  jeb->offset);
1280					break;
1281				}
1282
1283				jffs2_dbg(1, "Expanding up to cover frag (0x%x-0x%x) in dirty block %08x\n",
1284					  frag->ofs,
1285					  frag->ofs + frag->size,
1286					  jeb->offset);
1287				end = frag->ofs + frag->size;
1288				break;
1289			}
1290		}
1291		jffs2_dbg(1, "Expanded dnode to write from (0x%x-0x%x) to (0x%x-0x%x)\n",
1292			  orig_start, orig_end, start, end);
1293
1294		D1(BUG_ON(end > frag_last(&f->fragtree)->ofs + frag_last(&f->fragtree)->size));
1295		BUG_ON(end < orig_end);
1296		BUG_ON(start > orig_start);
1297	}
1298
1299	/* First, use readpage() to read the appropriate page into the page cache */
1300	/* Q: What happens if we actually try to GC the _same_ page for which commit_write()
1301	 *    triggered garbage collection in the first place?
1302	 * A: I _think_ it's OK. read_cache_page shouldn't deadlock, we'll write out the
1303	 *    page OK. We'll actually write it out again in commit_write, which is a little
1304	 *    suboptimal, but at least we're correct.
1305	 */
1306	pg_ptr = jffs2_gc_fetch_page(c, f, start, &pg);
1307
1308	if (IS_ERR(pg_ptr)) {
1309		pr_warn("read_cache_page() returned error: %ld\n",
1310			PTR_ERR(pg_ptr));
1311		return PTR_ERR(pg_ptr);
1312	}
1313
1314	offset = start;
1315	while(offset < orig_end) {
1316		uint32_t datalen;
1317		uint32_t cdatalen;
1318		uint16_t comprtype = JFFS2_COMPR_NONE;
1319
1320		ret = jffs2_reserve_space_gc(c, sizeof(ri) + JFFS2_MIN_DATA_LEN,
1321					&alloclen, JFFS2_SUMMARY_INODE_SIZE);
1322
1323		if (ret) {
1324			pr_warn("jffs2_reserve_space_gc of %zd bytes for garbage_collect_dnode failed: %d\n",
1325				sizeof(ri) + JFFS2_MIN_DATA_LEN, ret);
1326			break;
1327		}
1328		cdatalen = min_t(uint32_t, alloclen - sizeof(ri), end - offset);
1329		datalen = end - offset;
1330
1331		writebuf = pg_ptr + (offset & (PAGE_CACHE_SIZE -1));
1332
1333		comprtype = jffs2_compress(c, f, writebuf, &comprbuf, &datalen, &cdatalen);
1334
1335		ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
1336		ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
1337		ri.totlen = cpu_to_je32(sizeof(ri) + cdatalen);
1338		ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4));
1339
1340		ri.ino = cpu_to_je32(f->inocache->ino);
1341		ri.version = cpu_to_je32(++f->highest_version);
1342		ri.mode = cpu_to_jemode(JFFS2_F_I_MODE(f));
1343		ri.uid = cpu_to_je16(JFFS2_F_I_UID(f));
1344		ri.gid = cpu_to_je16(JFFS2_F_I_GID(f));
1345		ri.isize = cpu_to_je32(JFFS2_F_I_SIZE(f));
1346		ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f));
1347		ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f));
1348		ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f));
1349		ri.offset = cpu_to_je32(offset);
1350		ri.csize = cpu_to_je32(cdatalen);
1351		ri.dsize = cpu_to_je32(datalen);
1352		ri.compr = comprtype & 0xff;
1353		ri.usercompr = (comprtype >> 8) & 0xff;
1354		ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
1355		ri.data_crc = cpu_to_je32(crc32(0, comprbuf, cdatalen));
1356
1357		new_fn = jffs2_write_dnode(c, f, &ri, comprbuf, cdatalen, ALLOC_GC);
1358
1359		jffs2_free_comprbuf(comprbuf, writebuf);
1360
1361		if (IS_ERR(new_fn)) {
1362			pr_warn("Error writing new dnode: %ld\n",
1363				PTR_ERR(new_fn));
1364			ret = PTR_ERR(new_fn);
1365			break;
1366		}
1367		ret = jffs2_add_full_dnode_to_inode(c, f, new_fn);
1368		offset += datalen;
1369		if (f->metadata) {
1370			jffs2_mark_node_obsolete(c, f->metadata->raw);
1371			jffs2_free_full_dnode(f->metadata);
1372			f->metadata = NULL;
1373		}
1374	}
1375
1376	jffs2_gc_release_page(c, pg_ptr, &pg);
1377	return ret;
1378}