• W
    Btrfs: fix protection between send and root deletion · 18f687d5
    Wang Shilong 提交于
    We should gurantee that parent and clone roots can not be destroyed
    during send, for this we have two ideas.
    
    1.by holding @subvol_sem, this might be a nightmare, because it will
    block all subvolumes deletion for a long time.
    
    2.Miao pointed out we can reuse @send_in_progress, that mean we will
    skip snapshot deletion if root sending is in progress.
    
    Here we adopt the second approach since it won't block other subvolumes
    deletion for a long time.
    
    Besides in btrfs_clean_one_deleted_snapshot(), we only check first root
    , if this root is involved in send, we return directly rather than
    continue to check.There are several reasons about it:
    
    1.this case happen seldomly.
    2.after sending,cleaner thread can continue to drop that root.
    3.make code simple
    
    Cc: David Sterba <dsterba@suse.cz>
    Signed-off-by: NWang Shilong <wangsl.fnst@cn.fujitsu.com>
    Reviewed-by: NMiao Xie <miaox@cn.fujitsu.com>
    Signed-off-by: NJosef Bacik <jbacik@fb.com>
    Signed-off-by: NChris Mason <clm@fb.com>
    18f687d5
send.c 113.4 KB