|  | From 5cc2b17e80cf5770f2e585c2d90fd8af1b901258 Mon Sep 17 00:00:00 2001 | 
|  | From: Filipe Manana <fdmanana@suse.com> | 
|  | Date: Mon, 2 Mar 2015 20:53:52 +0000 | 
|  | Subject: Btrfs: send, add missing check for dead clone root | 
|  |  | 
|  | From: Filipe Manana <fdmanana@suse.com> | 
|  |  | 
|  | commit 5cc2b17e80cf5770f2e585c2d90fd8af1b901258 upstream. | 
|  |  | 
|  | 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> | 
|  | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 
|  |  | 
|  | --- | 
|  | fs/btrfs/send.c |    3 ++- | 
|  | 1 file changed, 2 insertions(+), 1 deletion(-) | 
|  |  | 
|  | --- a/fs/btrfs/send.c | 
|  | +++ b/fs/btrfs/send.c | 
|  | @@ -5855,7 +5855,8 @@ long btrfs_ioctl_send(struct file *mnt_f | 
|  | 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; |