Blame Btrfs-send-add-missing-check-for-dead-clone-root.patch
|
|
9202477 |
From: Filipe Manana <fdmanana@suse.com>
|
|
|
9202477 |
Date: Mon, 2 Mar 2015 20:53:52 +0000
|
|
|
9202477 |
Subject: [PATCH] Btrfs: send, add missing check for dead clone root
|
|
|
9202477 |
|
|
|
9202477 |
After we locked the root's root item, a concurrent snapshot deletion
|
|
|
9202477 |
call might have set the dead flag on it. So check if the dead flag
|
|
|
9202477 |
is set and abort if it is, just like we do for the parent root.
|
|
|
9202477 |
|
|
|
9202477 |
Signed-off-by: Filipe Manana <fdmanana@suse.com>
|
|
|
9202477 |
Reviewed-by: David Sterba <dsterba@suse.cz>
|
|
|
9202477 |
Signed-off-by: Chris Mason <clm@fb.com>
|
|
|
9202477 |
---
|
|
|
9202477 |
fs/btrfs/send.c | 3 ++-
|
|
|
9202477 |
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
|
9202477 |
|
|
|
9202477 |
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
|
|
|
9202477 |
index d6033f540cc7..6ec28f13659e 100644
|
|
|
9202477 |
--- a/fs/btrfs/send.c
|
|
|
9202477 |
+++ b/fs/btrfs/send.c
|
|
|
9202477 |
@@ -5855,7 +5855,8 @@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_)
|
|
|
9202477 |
clone_sources_to_rollback = i + 1;
|
|
|
9202477 |
spin_lock(&clone_root->root_item_lock);
|
|
|
9202477 |
clone_root->send_in_progress++;
|
|
|
9202477 |
- if (!btrfs_root_readonly(clone_root)) {
|
|
|
9202477 |
+ if (!btrfs_root_readonly(clone_root) ||
|
|
|
9202477 |
+ btrfs_root_dead(clone_root)) {
|
|
|
9202477 |
spin_unlock(&clone_root->root_item_lock);
|
|
|
9202477 |
srcu_read_unlock(&fs_info->subvol_srcu, index);
|
|
|
9202477 |
ret = -EPERM;
|