• Liu Bo's avatar
    Btrfs: fix a bug in checking whether a inode is already in log · 46d8bc34
    Liu Bo authored
    This is based on Josef's "Btrfs: turbo charge fsync".
    
    The current btrfs checks if an inode is in log by comparing
    root's last_log_commit to inode's last_sub_trans[2].
    
    But the problem is that this root->last_log_commit is shared among
    inodes.
    
    Say we have N inodes to be logged, after the first inode,
    root's last_log_commit is updated and the N-1 remained files will
    be skipped.
    
    This fixes the bug by keeping a local copy of root's last_log_commit
    inside each inode and this local copy will be maintained itself.
    
    [1]: we regard each log transaction as a subset of btrfs's transaction,
    i.e. sub_trans
    Signed-off-by: default avatarLiu Bo <bo.li.liu@oracle.com>
    46d8bc34
btrfs_inode.h 5.68 KB