• Zhihao Cheng's avatar
    ubifs: Don't add xattr inode into orphan area · 354c1796
    Zhihao Cheng authored
    Now, the entire inode with its' xattrs are removed while replaying
    orphan nodes. There is no need to add xattr inodes into orphan area,
    which is based on the fact that xattr entries won't be cleared from
    disk before deleting xattr inodes, in another words, current logic
    can make sure that xattr inode be deleted in any cases even UBIFS not
    record xattr inode into orphan area.
    Let's looking for possible paths that could clear xattr entries from
    disk but leave the xattr inode on TNC:
     1. unlink/tmpfile -> ubifs_jnl_update: inode(nlink=0) is written
        into bud LEB and added into orphan list, then:
        a. powercut: ubifs_tnc_remove_ino(xattr entry/inode can be found
           from TNC and being deleted) is invoked in replaying journal.
        b. commit + powercut: inode is written into orphan area, and
           ubifs_tnc_remove_ino is invoked in replaying orphan nodes.
        c. evicting + powercut: xattr inode(nlink=0) is written on disk,
           xattr is removed from TNC, gc could clear xattr entries from
           disk. ubifs_tnc_remove_ino will apply on inode and xattr inode
           in replaying journal, so lost xattr entries will make no
           influence.
        d. evicting + commit + powercut: xattr inode/entry are removed from
           index tree(on disk) by ubifs_jnl_write_inode, xattr inode is
           cleared from orphan area by ubifs_jnl_write_inode + commit.
        e. commit + evicting + powercut: inode is written into orphan area,
           then equivalent to c.
     2. remove xattr -> ubifs_jnl_delete_xattr: xattr entry(inum=0) and
        xattr inode(nlink=0) is written into bud LEB, xattr entry/inode are
        removed from TNC, then:
        a. powercut: gc could clear xattr entries from disk, which won't
           affect deleting xattr entry from TNC. ubifs_tnc_remove_ino will
           apply on xattr inode in replaying journal, ubifs_tnc_remove_nm
           will apply on xattr entry in replaying journal.
        b. commit + powercut: xattr entry/inode are removed from index tree
           (on disk).
    Tracking xattr inode in orphan list is imported by commit 988bec41
    ("ubifs: orphan: Handle xattrs like files"), it aims to fix the similar
    problem described in commit 7959cf3a ("ubifs: journal: Handle
    xattrs like files"). Actually, the problem only exist in journal case
    but not the orphan case. So, we can remove the orphan tracking for xattr
    inodes.
    Signed-off-by: default avatarZhihao Cheng <chengzhihao1@huawei.com>
    Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
    354c1796
orphan.c 24.8 KB