• R
    lib: list_sort_test(): simplify and harden cleanup · 69412303
    Rasmus Villemoes 提交于
    There is no reason to maintain the list structure while freeing the
    debug elements.  Aside from the redundant pointer manipulations, it is
    also inefficient from a locality-of-reference viewpoint, since they are
    visited in a random order (wrt.  the order they were allocated).
    Furthermore, if we jumped to exit: after detecting list corruption, it
    is actually dangerous.
    
    So just free the elements in the order they were allocated, using the
    backing array elts.  Allocate that using kcalloc(), so that if
    allocation of one of the debug element fails, we just end up calling
    kfree(NULL) for the trailing elements.
    
    Minor details: Use sizeof(*elts) instead of sizeof(void *), and return
    err immediately when allocation of elts fails, to avoid introducing
    another label just before the final return statement.
    Signed-off-by: NRasmus Villemoes <linux@rasmusvillemoes.dk>
    Cc: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
    Cc: Don Mullis <don.mullis@gmail.com>
    Cc: Dave Chinner <david@fromorbit.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    69412303
list_sort.c 7.1 KB