Showing error 1193

User: Jiri Slaby
Error type: Double Unlock
Error type description: Some lock is unlocked twice unintentionally in a sequence
File location: fs/jffs2/gc.c
Line in file: 425
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-04-30 10:52:00 UTC


Source:

 395           the only valid nodes in the block, followed by erasure,
 396           followed by freeing of the ic because the erased block(s)
 397           held _all_ the nodes of that inode.... never been seen but
 398           it's vaguely possible. */
 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                /* Eep. This really should never happen. GC is broken */
 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        /* If we've finished this block, start it erasing */
 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                /* We're GC'ing an empty block? */
 435                list_add_tail(&c->gcblock->list, &c->erase_pending_list);
Show full sources