[JFFS2] Fix BUG() caused by failing to discard xattrs on deleted files.
authorDavid Woodhouse <dwmw2@infradead.org>
Sat, 5 May 2007 16:50:25 +0000 (17:50 +0100)
committerDavid Woodhouse <dwmw2@infradead.org>
Sun, 20 May 2007 15:28:22 +0000 (11:28 -0400)
commit8ae5d31263c746f1680d005b33a82d167cdb9eb6
treea407ee09563352b8e49d49e53dfc2cdb3c663346
parentacaebfd8a7af0019b2edfcf4045c56c3e18375c5
[JFFS2] Fix BUG() caused by failing to discard xattrs on deleted files.

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: David Woodhouse <dwmw2@infradead.org>
fs/jffs2/xattr.c