• Harshad Shirwadkar's avatar
    ext4: fix rename whiteout with fast commit · 8210bb29
    Harshad Shirwadkar authored
    This patch adds rename whiteout support in fast commits. Note that the
    whiteout object that gets created is actually char device. Which
    imples, the function ext4_inode_journal_mode(struct inode *inode)
    would return "JOURNAL_DATA" for this inode. This has a consequence in
    fast commit code that it will make creation of the whiteout object a
    fast-commit ineligible behavior and thus will fall back to full
    commits. With this patch, this can be observed by running fast commits
    with rename whiteout and seeing the stats generated by ext4_fc_stats
    tracepoint as follows:
    
    ext4_fc_stats: dev 254:32 fc ineligible reasons:
    XATTR:0, CROSS_RENAME:0, JOURNAL_FLAG_CHANGE:0, NO_MEM:0, SWAP_BOOT:0,
    RESIZE:0, RENAME_DIR:0, FALLOC_RANGE:0, INODE_JOURNAL_DATA:16;
    num_commits:6, ineligible: 6, numblks: 3
    
    So in short, this patch guarantees that in case of rename whiteout, we
    fall back to full commits.
    
    Amir mentioned that instead of creating a new whiteout object for
    every rename, we can create a static whiteout object with irrelevant
    nlink. That will make fast commits to not fall back to full
    commit. But until this happens, this patch will ensure correctness by
    falling back to full commits.
    
    Fixes: 8016e29f ("ext4: fast commit recovery path")
    Cc: stable@kernel.org
    Signed-off-by: default avatarHarshad Shirwadkar <harshadshirwadkar@gmail.com>
    Link: https://lore.kernel.org/r/20210316221921.1124955-1-harshadshirwadkar@gmail.comSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    8210bb29
fast_commit.c 61.1 KB