• Josef Bacik's avatar
    Btrfs: replay dir_index items before other items · dd8e7217
    Josef Bacik authored
    A user reported a bug where his log would not replay because he was getting
    -EEXIST back.  This was because he had a file moved into a directory that was
    logged.  What happens is the file had a lower inode number, and so it is
    processed first when replaying the log, and so we add the inode ref in for the
    directory it was moved to.  But then we process the directories DIR_INDEX item
    and try to add the inode ref for that inode and it fails because we already
    added it when we replayed the inode.  To solve this problem we need to just
    process any DIR_INDEX items we have in the log first so this all is taken care
    of, and then we can replay the rest of the items.  With this patch my reproducer
    can remount the file system properly instead of erroring out.  Thanks,
    Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
    Signed-off-by: default avatarChris Mason <chris.mason@fusionio.com>
    dd8e7217
tree-log.c 108 KB