summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFilipe Manana <fdmanana@suse.com>2015-03-02 20:53:52 +0000
committerChris Mason <clm@fb.com>2015-03-26 17:55:51 -0700
commit5cc2b17e80cf5770f2e585c2d90fd8af1b901258 (patch)
treedef22f523ee607c7c551a4c9ea39b90a5b62a641
parent4f764e5153616fccaed38e7524d6f5f89a49a060 (diff)
downloadop-kernel-dev-5cc2b17e80cf5770f2e585c2d90fd8af1b901258.zip
op-kernel-dev-5cc2b17e80cf5770f2e585c2d90fd8af1b901258.tar.gz
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>
-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 d6033f5..6ec28f1 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_)
clone_sources_to_rollback = i + 1;
spin_lock(&clone_root->root_item_lock);
clone_root->send_in_progress++;
- if (!btrfs_root_readonly(clone_root)) {
+ if (!btrfs_root_readonly(clone_root) ||
+ btrfs_root_dead(clone_root)) {
spin_unlock(&clone_root->root_item_lock);
srcu_read_unlock(&fs_info->subvol_srcu, index);
ret = -EPERM;
OpenPOWER on IntegriCloud