• Artem Bityutskiy's avatar
    UBIFS: fix mounting problems after power cuts · a28ad42a
    Artem Bityutskiy authored
    This is a bugfix for a problem with the following symptoms:
    
    1. A power cut happens
    2. After reboot, we try to mount UBIFS
    3. Mount fails with "No space left on device" error message
    
    UBIFS complains like this:
    
    UBIFS error (pid 28225): grab_empty_leb: could not find an empty LEB
    
    The root cause of this problem is that when we mount, not all LEBs are
    categorized. Only those which were read are. However, the
    'ubifs_find_free_leb_for_idx()' function assumes that all LEBs were
    categorized and 'c->freeable_cnt' is valid, which is a false assumption.
    
    This patch fixes the problem by teaching 'ubifs_find_free_leb_for_idx()'
    to always fall back to LPT scanning if no freeable LEBs were found.
    
    This problem was reported by few people in the past, but Brent Taylor
    was able to reproduce it and send me a flash image which cannot be mounted,
    which made it easy to hunt the bug. Kudos to Brent.
    Reported-by: default avatarBrent Taylor <motobud@gmail.com>
    Signed-off-by: default avatarArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
    Cc: stable@vger.kernel.org
    a28ad42a
find.c 30.1 KB