Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=8ae5d31263c746f1680d005b33a82d167cdb9eb6
Commit:     8ae5d31263c746f1680d005b33a82d167cdb9eb6
Parent:     acaebfd8a7af0019b2edfcf4045c56c3e18375c5
Author:     David Woodhouse <[EMAIL PROTECTED]>
AuthorDate: Sat May 5 17:50:25 2007 +0100
Committer:  David Woodhouse <[EMAIL PROTECTED]>
CommitDate: Sun May 20 11:28:22 2007 -0400

    [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 <[EMAIL PROTECTED]>
---
 fs/jffs2/xattr.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/fs/jffs2/xattr.c b/fs/jffs2/xattr.c
index 78fc088..0734698 100644
--- a/fs/jffs2/xattr.c
+++ b/fs/jffs2/xattr.c
@@ -825,7 +825,7 @@ void jffs2_build_xattr_subsystem(struct jffs2_sb_info *c)
                           ref->xd and ref->ic are not valid yet. */
                        xd = jffs2_find_xattr_datum(c, ref->xid);
                        ic = jffs2_get_ino_cache(c, ref->ino);
-                       if (!xd || !ic) {
+                       if (!xd || !ic || !ic->nlink) {
                                dbg_xattr("xref(ino=%u, xid=%u, xseqno=%u) is 
orphan.\n",
                                          ref->ino, ref->xid, ref->xseqno);
                                ref->xseqno |= XREF_DELETE_MARKER;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to