• Miao Xie's avatar
    Btrfs: fix the snapshot that should not exist · 42874b3d
    Miao Xie authored
    The snapshot should be the image of the fs tree before it was created,
    so the metadata of the snapshot should not exist in the its tree. But now, we
    found the directory item and directory name index is in both the snapshot tree
    and the fs tree. It introduces some problems and makes the users feel strange:
    
     # mkfs.btrfs /dev/sda1
     # mount /dev/sda1 /mnt
     # mkdir /mnt/1
     # cd /mnt/1
     # btrfs subvolume snapshot /mnt snap0
     # ls -a /mnt/1/snap0/1
     .	..	[no other file/dir]
    
     # ll /mnt/1/snap0/
     total 0
     drwxr-xr-x 1 root root 10 Ju1 24 12:11 1
    			^^^
    			There is no file/dir in it, but it's size is 10
    
     # cd /mnt/1/snap0/1/snap0
     [Enter a unexisted directory successfully...]
    
    There is nothing in the directory 1 in snap0, but btrfs told the length of
    this directory is 10. Beside that, we can enter an unexisted directory, it is
    very strange to the users.
    
     # btrfs subvolume snapshot /mnt/1/snap0 /mnt/snap1
     # ll /mnt/1/snap0/1/
     total 0
     [None]
     # ll /mnt/snap1/1/
     total 0
     drwxr-xr-x 1 root root 0 Ju1 24 12:14 snap0
    
    And the source of snap1 did have any directory in Directory 1, but snap1 have
    a snap0, it is different between the source and the snapshot.
    
    So I think we should insert directory item and directory name index and update
    the parent inode as the last step of snapshot creation, and do not leave the
    useless metadata in the file tree.
    Signed-off-by: default avatarMiao Xie <miaox@cn.fujitsu.com>
    42874b3d
transaction.c 44.2 KB