• David Woodhouse's avatar
    [JFFS2] Fix race in post-mount node checking · d96fb997
    David Woodhouse authored
    For a while now, we've postponed CRC-checking of data nodes to be done
    by the GC thread, instead of being done while the user is waiting for
    mount to finish. The GC thread would iterate through all the inodes on
    the system and check each of their data nodes. It would skip over inodes
    which had already been used or were already being read in by
    read_inode(), because their data nodes would have been examined anyway.
    
    However, we could sometimes reach the end of the for-each-inode loop and
    still have some unchecked space left, if an inode we'd skipped was
    _still_ in the process of being read. This fixes that race by actually
    waiting for read_inode() to finish rather than just moving on.
    
    Thanks to Ladislav Michl for coming up with a reproducible test case and
    helping to track it down.
    Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
    d96fb997
gc.c 42.7 KB