• Wang Shilong's avatar
    Revert "Btrfs: remove transaction from btrfs send" · dcfd5ad2
    Wang Shilong authored
    This reverts commit 41ce9970.
    Previously i was thinking we can use readonly root's commit root
    safely while it is not true, readonly root may be cowed with the
    following cases.
    
    1.snapshot send root will cow source root.
    2.balance,device operations will also cow readonly send root
    to relocate.
    
    So i have two ideas to make us safe to use commit root.
    
    -->approach 1:
    make it protected by transaction and end transaction properly and we research
    next item from root node(see btrfs_search_slot_for_read()).
    
    -->approach 2:
    add another counter to local root structure to sync snapshot with send.
    and add a global counter to sync send with exclusive device operations.
    
    So with approach 2, send can use commit root safely, because we make sure
    send root can not be cowed during send. Unfortunately, it make codes *ugly*
    and more complex to maintain.
    
    To make snapshot and send exclusively, device operations and send operation
    exclusively with each other is a little confusing for common users.
    
    So why not drop into previous way.
    
    Cc: Josef Bacik <jbacik@fb.com>
    Signed-off-by: default avatarWang Shilong <wangsl.fnst@cn.fujitsu.com>
    Signed-off-by: default avatarJosef Bacik <jbacik@fb.com>
    dcfd5ad2
send.c 126 KB