• Filipe Manana's avatar
    Btrfs: send, don't bug on inconsistent snapshots · 95155585
    Filipe Manana authored
    When doing an incremental send, if we find a new/modified/deleted extent,
    reference or xattr without having previously processed the corresponding
    inode item we end up exexuting a BUG_ON(). This is because whenever an
    extent, xattr or reference is added, modified or deleted, we always expect
    to have the corresponding inode item updated. However there are situations
    where this will not happen due to transient -ENOMEM or -ENOSPC errors when
    doing delayed inode updates.
    
    For example, when punching holes we can succeed in deleting and modifying
    (shrinking) extents but later fail to do the delayed inode update. So after
    such failure we close our transaction handle and right after a snapshot of
    the fs/subvol tree can be made and used later for a send operation. The
    same thing can happen during truncate, link, unlink, and xattr related
    operations.
    
    So instead of executing a BUG_ON, make send return an -EIO error and print
    an informative error message do dmesg/syslog.
    Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
    95155585
send.c 150 KB