• Artem Bityutskiy's avatar
    UBIFS: fix assertion warnings in comparison function · 1a9476a7
    Artem Bityutskiy authored
    When running the integrity test ('integck' from mtd-utils) on current
    UBIFS on 2.6.35, I see that assertions in UBIFS 'list_sort()' comparison
    functions trigger sometimes, e.g.:
    
    UBIFS assert failed in data_nodes_cmp at 132 (pid 28311)
    
    My investigation showed that this happens when 'list_sort()' calls the 'cmp()'
    function with equivalent arguments. In this case, the 'struct list_head'
    parameter, passed to 'cmp()' is bogus, and it does not belong to any element in
    the original list.
    
    And this issue seems to be introduced by commit:
    
    commit 835cc0c8
    Author: Don Mullis <don.mullis@gmail.com>
    Date:   Fri Mar 5 13:43:15 2010 -0800
    
    It is easy to work around the issue by doing:
    
    if (a == b)
    	return 0;
    
    in UBIFS. It works, but 'lib_sort()' should nevertheless be fixed. Although it
    is harmless to have this piece of code in UBIFS.
    
    This patch adds that code to both UBIFS 'cmp()' functions:
    'data_nodes_cmp()' and 'nondata_nodes_cmp()'.
    Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
    1a9476a7
gc.c 27.7 KB