395
396
397
398
399
400 inum = ic->ino;
401 nlink = ic->pino_nlink;
402 spin_unlock(&c->inocache_lock);
403
404 f = jffs2_gc_fetch_inode(c, inum, !nlink);
405 if (IS_ERR(f)) {
406 ret = PTR_ERR(f);
407 goto release_sem;
408 }
409 if (!f) {
410 ret = 0;
411 goto release_sem;
412 }
413
414 ret = jffs2_garbage_collect_live(c, jeb, raw, f);
415
416 jffs2_gc_release_inode(c, f);
417
418 test_gcnode:
419 if (jeb->dirty_size == gcblock_dirty && !ref_obsolete(jeb->gc_node)) {
420
421 printk(KERN_ERR "Error garbage collecting node at %08x!\n", ref_offset(jeb->gc_node));
422 ret = -ENOSPC;
423 }
424 release_sem:
425 mutex_unlock(&c->alloc_sem);
426
427 eraseit_lock:
428
429 spin_lock(&c->erase_completion_lock);
430
431 eraseit:
432 if (c->gcblock && !c->gcblock->used_size) {
433 D1(printk(KERN_DEBUG "Block at 0x%08x completely obsoleted by GC. Moving to erase_pending_list\n", c->gcblock->offset));
434
435 list_add_tail(&c->gcblock->list, &c->erase_pending_list);