Message ID | 1425329633-5059-1-git-send-email-fdmanana@suse.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On Mon, Mar 02, 2015 at 08:53:52PM +0000, Filipe Manana wrote: > 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> Good catch. -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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;
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> --- fs/btrfs/send.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)