• F
    Btrfs: fix empty symlink after creating symlink and fsync parent dir · 3f9749f6
    Filipe Manana 提交于
    If we create a symlink, fsync its parent directory, crash/power fail and
    mount the filesystem, we end up with an empty symlink, which not only is
    useless it's also not allowed in linux (the man page symlink(2) is well
    explicit about that).  So we just need to make sure to fully log an inode
    if it's a symlink, to ensure its inline extent gets logged, ensuring the
    same behaviour as ext3, ext4, xfs, reiserfs, f2fs, nilfs2, etc.
    
    Example reproducer:
    
      $ mkfs.btrfs -f /dev/sdb
      $ mount /dev/sdb /mnt
      $ mkdir /mnt/testdir
      $ sync
      $ ln -s /mnt/foo /mnt/testdir/bar
      $ xfs_io -c fsync /mnt/testdir
      <power fail>
      $ mount /dev/sdb /mnt
      $ readlink /mnt/testdir/bar
      <empty string>
    
    A test case for fstests follows soon.
    Signed-off-by: NFilipe Manana <fdmanana@suse.com>
    3f9749f6
tree-log.c 153.1 KB