256 spin_unlock(&c->erase_completion_lock);
257 mutex_unlock(&c->alloc_sem);
258 BUG();
259 }
260 }
261 jeb->gc_node = raw;
262
263 D1(printk(KERN_DEBUG "Going to garbage collect node at 0x%08x\n", ref_offset(raw)));
264
265 if (!raw->next_in_ino) {
266
267 spin_unlock(&c->erase_completion_lock);
268 if (ref_flags(raw) == REF_PRISTINE) {
269
270 jffs2_garbage_collect_pristine(c, NULL, raw);
271 } else {
272
273 jffs2_mark_node_obsolete(c, raw);
274 }
275 mutex_unlock(&c->alloc_sem);
276 goto eraseit_lock;
277 }
278
279 ic = jffs2_raw_ref_to_ic(raw);
280
281#ifdef CONFIG_JFFS2_FS_XATTR
282
283
284 if (ic->class == RAWNODE_CLASS_XATTR_DATUM
285 || ic->class == RAWNODE_CLASS_XATTR_REF) {
286 spin_unlock(&c->erase_completion_lock);
287
288 if (ic->class == RAWNODE_CLASS_XATTR_DATUM) {
289 ret = jffs2_garbage_collect_xattr_datum(c, (struct jffs2_xattr_datum *)ic, raw);
290 } else {
291 ret = jffs2_garbage_collect_xattr_ref(c, (struct jffs2_xattr_ref *)ic, raw);
292 }
293 goto test_gcnode;
294 }
295#endif
296