lkml.org 
[lkml]   [2003]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: 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/

    \
     
     \ /
      Last update: 2005-03-22 13:36    [W:0.024 / U:1.408 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site