aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/send.c
diff options
context:
space:
mode:
authorFilipe Manana <fdmanana@suse.com>2015-03-02 15:53:52 -0500
committerChris Mason <clm@fb.com>2015-03-26 20:55:51 -0400
commit5cc2b17e80cf5770f2e585c2d90fd8af1b901258 (patch)
treedef22f523ee607c7c551a4c9ea39b90a5b62a641 /fs/btrfs/send.c
parent4f764e5153616fccaed38e7524d6f5f89a49a060 (diff)
Btrfs: send, add missing check for dead clone root
After we locked the root's root item, a concurrent snapshot deletion call might have set the dead flag on it. So check if the dead flag is set and abort if it is, just like we do for the parent root. Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.cz> Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'fs/btrfs/send.c')
-rw-r--r--fs/btrfs/send.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
index d6033f540cc7..6ec28f13659e 100644
--- a/fs/btrfs/send.c
+++ b/fs/btrfs/send.c
@@ -5855,7 +5855,8 @@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_)
5855 clone_sources_to_rollback = i + 1; 5855 clone_sources_to_rollback = i + 1;
5856 spin_lock(&clone_root->root_item_lock); 5856 spin_lock(&clone_root->root_item_lock);
5857 clone_root->send_in_progress++; 5857 clone_root->send_in_progress++;
5858 if (!btrfs_root_readonly(clone_root)) { 5858 if (!btrfs_root_readonly(clone_root) ||
5859 btrfs_root_dead(clone_root)) {
5859 spin_unlock(&clone_root->root_item_lock); 5860 spin_unlock(&clone_root->root_item_lock);
5860 srcu_read_unlock(&fs_info->subvol_srcu, index); 5861 srcu_read_unlock(&fs_info->subvol_srcu, index);
5861 ret = -EPERM; 5862 ret = -EPERM;