Messages in this thread | | | Date | Sun, 8 Jun 2003 13:19:01 +0200 | From | Stephan von Krawczynski <> | Subject | Re: Undo aic7xxx changes (now rc7+aic20030603) |
| |
Hello all,
looking at code around my problem I discovered this:
static inline void * __kmem_cache_alloc (kmem_cache_t *cachep, int flags) { unsigned long save_flags; void* objp;
kmem_cache_alloc_head(cachep, flags); try_again: local_irq_save(save_flags); #ifdef CONFIG_SMP { cpucache_t *cc = cc_data(cachep);
if (cc) { if (cc->avail) { STATS_INC_ALLOCHIT(cachep); objp = cc_entry(cc)[--cc->avail]; } else { STATS_INC_ALLOCMISS(cachep); objp = kmem_cache_alloc_batch(cachep,cc,flags); if (!objp) goto alloc_new_slab_nolock; } } else { spin_lock(&cachep->spinlock); objp = kmem_cache_alloc_one(cachep); spin_unlock(&cachep->spinlock); } } #else objp = kmem_cache_alloc_one(cachep); #endif local_irq_restore(save_flags); return objp; alloc_new_slab: #ifdef CONFIG_SMP spin_unlock(&cachep->spinlock); alloc_new_slab_nolock: #endif local_irq_restore(save_flags); if (kmem_cache_grow(cachep, flags)) /* Someone may have stolen our objs. Doesn't matter, we'll * just come back here again. */ goto try_again; return NULL; }
I suggest it for most-absurd-goto-usage-award.
1) There seems to be no reference for symbol "alloc_new_slab" 2) "spin_unlock" (right below) is never reached 3) The not-ifdef'ed code below is only used if CONFIG_SMP 4) The code "alloc_new_slab_nolock" is referenced only once by a goto (why not simply pasted there?)
This does not look like a problem, it only is damn ugly. I have no idea what this code actually does, but it looks patched-to-the-limit. Has anybody reviewed slab regarding CONFIG_SMP?
Regards, Stephan - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |