From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.linuxfoundation.org ([140.211.169.12]:51376 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755396AbbFSUca (ORCPT ); Fri, 19 Jun 2015 16:32:30 -0400 Subject: Patch "Btrfs: send, don't leave without decrementing clone root's send_progress" has been added to the 4.0-stable tree To: fdmanana@suse.com, clm@fb.com, dsterba@suse.cz, gregkh@linuxfoundation.org Cc: , From: Date: Fri, 19 Jun 2015 13:32:29 -0700 Message-ID: <14347459492285@kroah.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org List-ID: This is a note to let you know that I've just added the patch titled Btrfs: send, don't leave without decrementing clone root's send_progress to the 4.0-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: btrfs-send-don-t-leave-without-decrementing-clone-root-s-send_progress.patch and it can be found in the queue-4.0 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let know about it. >>From 2f1f465ae6da244099af55c066e5355abd8ff620 Mon Sep 17 00:00:00 2001 From: Filipe Manana Date: Mon, 2 Mar 2015 20:53:53 +0000 Subject: Btrfs: send, don't leave without decrementing clone root's send_progress From: Filipe Manana commit 2f1f465ae6da244099af55c066e5355abd8ff620 upstream. If the clone root was not readonly or the dead flag was set on it, we were leaving without decrementing the root's send_progress counter (and before we just incremented it). If a concurrent snapshot deletion was in progress and ended up being aborted, it would be impossible to later attempt to delete again the snapshot, since the root's send_in_progress counter could never go back to 0. We were also setting clone_sources_to_rollback to i + 1 too early - if we bailed out because the clone root we got is not readonly or flagged as dead we ended up later derreferencing a null pointer because we didn't assign the clone root to sctx->clone_roots[i].root: for (i = 0; sctx && i < clone_sources_to_rollback; i++) btrfs_root_dec_send_in_progress( sctx->clone_roots[i].root); So just don't increment the send_in_progress counter if the root is readonly or flagged as dead. Signed-off-by: Filipe Manana Reviewed-by: David Sterba Signed-off-by: Chris Mason Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/send.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -5852,9 +5852,7 @@ long btrfs_ioctl_send(struct file *mnt_f ret = PTR_ERR(clone_root); goto out; } - clone_sources_to_rollback = i + 1; spin_lock(&clone_root->root_item_lock); - clone_root->send_in_progress++; if (!btrfs_root_readonly(clone_root) || btrfs_root_dead(clone_root)) { spin_unlock(&clone_root->root_item_lock); @@ -5862,10 +5860,12 @@ long btrfs_ioctl_send(struct file *mnt_f ret = -EPERM; goto out; } + clone_root->send_in_progress++; spin_unlock(&clone_root->root_item_lock); srcu_read_unlock(&fs_info->subvol_srcu, index); sctx->clone_roots[i].root = clone_root; + clone_sources_to_rollback = i + 1; } vfree(clone_sources_tmp); clone_sources_tmp = NULL; Patches currently in stable-queue which might be from fdmanana@suse.com are queue-4.0/btrfs-send-add-missing-check-for-dead-clone-root.patch queue-4.0/btrfs-send-don-t-leave-without-decrementing-clone-root-s-send_progress.patch queue-4.0/btrfs-fix-range-cloning-when-same-inode-used-as-source-and-destination.patch -- To unsubscribe from this list: send the line "unsubscribe stable" in