• Rasmus Villemoes's avatar
    lib: list_sort_test(): simplify and harden cleanup · 69412303
    Rasmus Villemoes authored
    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: default avatarRasmus 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: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    69412303
list_sort.c 7.09 KB