• Ryusuke Konishi's avatar
    nilfs2: fix missing zero-fill initialization of btree node cache · 1f28fcd9
    Ryusuke Konishi authored
    This will fix file system corruption which infrequently happens after
    mount.  The problem was reported from users with the title "[NILFS
    users] Fail to mount NILFS." (Message-ID:
    <200908211918.34720.yuri@itinteg.net>), and so forth.  I've also
    experienced the corruption multiple times on kernel 2.6.30 and 2.6.31.
    
    The problem turned out to be caused due to discordance between
    mapping->nrpages of a btree node cache and the actual number of pages
    hung on the cache; if the mapping->nrpages becomes zero even as it has
    pages, truncate_inode_pages() returns without doing anything.  Usually
    this is harmless except it may cause page leak, but garbage collection
    fairly infrequently sees a stale page remained in the btree node cache
    of DAT (i.e. disk address translation file of nilfs), and induces the
    corruption.
    
    I identified a missing initialization in btree node caches was the
    root cause.  This corrects the bug.
    
    I've tested this for kernel 2.6.30 and 2.6.31.
    Reported-by: default avatarYuri Chislov <yuri@itinteg.net>
    Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
    Cc: stable <stable@kernel.org>
    1f28fcd9
btnode.c 8.31 KB