• David Woodhouse's avatar
    [JFFS2] Fix BUG() caused by failing to discard xattrs on deleted files. · 8ae5d312
    David Woodhouse authored
    When we cannot mark nodes as obsolete, such as on NAND flash, we end up 
    having to delete inodes with !nlink in jffs2_build_remove_unlinked_inode().
    However, jffs2_build_xattr_subsystem() runs later than this, and will
    attach an xref to the dead inode. Then later when the last nodes of that
    dead inode are erased we hit a BUG() in jffs2_del_ino_cache() 
    because we're not supposed to get there with an xattr still attached to 
    the inode which is being killed.
    
    The simple fix is to refrain from attaching xattrs to inodes with zero 
    nlink, in jffs2_build_xattr_subsystem(). It's it's OK to trust nlink 
    here because the file system isn't actually mounted yet, so there's no 
    chance that a zero-nlink file could actually be alive still because 
    it's open.
    Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
    8ae5d312
xattr.c 37.5 KB