/* retry flushing wbuf in case jffs2_wbuf_recover left some data in the wbuf */ if (ret) { ret = __jffs2_flush_wbuf(c, PAD_ACCOUNTING); } 
int jffs2_flush_wbuf_gc(struct jffs2_sb_info *c, uint32_t ino){	uint32_t old_wbuf_ofs;	uint32_t old_wbuf_len;	int ret = 0;	D1(printk(KERN_DEBUG "jffs2_flush_wbuf_gc() called for ino #%u...\n", ino));	down(&c->alloc_sem);	if (!jffs2_wbuf_pending_for_ino(c, ino)) {		D1(printk(KERN_DEBUG "Ino #%d not pending in wbuf. Returning\n", ino));		up(&c->alloc_sem);		return 0;	}	old_wbuf_ofs = c->wbuf_ofs;	old_wbuf_len = c->wbuf_len;	if (c->unchecked_size) {		/* GC won't make any progress for a while */		D1(printk(KERN_DEBUG "jffs2_flush_wbuf_gc() padding. Not finished checking\n"));		down_write(&c->wbuf_sem);		ret = __jffs2_flush_wbuf(c, PAD_ACCOUNTING);		up_write(&c->wbuf_sem);	} else while (old_wbuf_len &&		      old_wbuf_ofs == c->wbuf_ofs) {		up(&c->alloc_sem);		D1(printk(KERN_DEBUG "jffs2_flush_wbuf_gc() calls gc pass\n"));		ret = jffs2_garbage_collect_pass(c);		if (ret) {			/* GC failed. Flush it with padding instead */			down(&c->alloc_sem);			down_write(&c->wbuf_sem);			ret = __jffs2_flush_wbuf(c, PAD_ACCOUNTING);			up_write(&c->wbuf_sem);			break;		}		down(&c->alloc_sem);	}	D1(printk(KERN_DEBUG "jffs2_flush_wbuf_gc() ends...\n"));	up(&c->alloc_sem);	return ret;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/7f716cf3f9cc9dd420b9c75071559017812df6d2/wbuf.c/buggy/fs/jffs2/wbuf.c