From: Chris Mason <clm@fb.com>
To: David Sterba <dsterba@suse.cz>, <linux-btrfs@vger.kernel.org>
Cc: Miao Xie <miaox@cn.fujitsu.com>,
Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Subject: Re: [PATCH 1/2] btrfs: protect snapshots from deleting during send
Date: Mon, 12 May 2014 09:52:28 -0400 [thread overview]
Message-ID: <5370D21C.6000009@fb.com> (raw)
In-Reply-To: <6c15e8cf5f832398461e8dbde0a02255c35fdd4b.1397572052.git.dsterba@suse.cz>
On 04/15/2014 10:41 AM, David Sterba wrote:
> The patch "Btrfs: fix protection between send and root deletion"
> (18f687d538449373c37c) does not actually prevent to delete the snapshot
> and just takes care during background cleaning, but this seems rather
> user unfriendly, this patch implements the idea presented in
>
> https://urldefense.proofpoint.com/v1/url?u=http://www.spinics.net/lists/linux-btrfs/msg30813.html&k=ZVNjlDMF0FElm4dQtryO4A%3D%3D%0A&r=6%2FL0lzzDhu0Y1hL9xm%2BQyA%3D%3D%0A&m=oPq3jsCvKlZXohAj%2B1Mz9EvxoJ1iqsxD4%2Fkm%2By17esY%3D%0A&s=b820d70b0984d1e875bf8e22adadef7d6c2a6e0c1cdb4c3e0913f8f1521fc966
>
> - add an internal root_item flag to denote a dead root
> - check if the send_in_progress is set and refuse to delete, otherwise
> set the flag and proceed
> - check the flag in send similar to the btrfs_root_readonly checks, for
> all involved roots
>
> The root lookup in send via btrfs_read_fs_root_no_name will check if the
> root is really dead or not. If it is, ENOENT, aborted send. If it's
> alive, it's protected by send_in_progress, send can continue.
>
> diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
> index 9dde9717c1b9..80ec4fdc0b40 100644
> --- a/fs/btrfs/send.c
> +++ b/fs/btrfs/send.c
> @@ -5263,7 +5263,7 @@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_)
>
> /*
> * The subvolume must remain read-only during send, protect against
> - * making it RW.
> + * making it RW. This also protects against deletion.
> */
> spin_lock(&send_root->root_item_lock);
> send_root->send_in_progress++;
> @@ -5284,6 +5284,15 @@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_)
> goto out;
> }
>
> + /*
> + * Unlikely but possible, if the subvolume is marked for deletion but
> + * is slow to remove the directory entry, send can still be started
> + */
> + if (btrfs_root_dead(sctx->parent_root)) {
> + ret = -EPERM;
> + goto out;
> + }
> +
This should be sctx->send_root and it should be lower right? At this
point the sctx hasn't been allocated yet.
I've changed it here and it'll go into integration shortly, but I can
rebase in something different if required.
-chris
next prev parent reply other threads:[~2014-05-12 13:50 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-15 14:41 [PATCH 0/2] Snapshot deletion vs send (for 3.15) David Sterba
2014-04-15 14:41 ` [PATCH 1/2] btrfs: protect snapshots from deleting during send David Sterba
2014-04-15 14:52 ` Chris Mason
2014-04-15 15:44 ` David Sterba
2014-04-15 16:00 ` Chris Mason
2014-04-15 16:27 ` David Sterba
2014-04-15 17:21 ` Chris Mason
2014-04-16 13:32 ` David Sterba
2014-04-16 13:40 ` Chris Mason
2014-04-16 14:59 ` Brendan Hide
2014-04-16 15:22 ` David Sterba
2014-04-26 12:16 ` Brendan Hide
2014-04-16 15:18 ` David Sterba
2014-05-12 13:52 ` Chris Mason [this message]
2014-04-15 14:42 ` [PATCH 2/2] btrfs: assert that send is not in progres before root deletion David Sterba
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5370D21C.6000009@fb.com \
--to=clm@fb.com \
--cc=dsterba@suse.cz \
--cc=linux-btrfs@vger.kernel.org \
--cc=miaox@cn.fujitsu.com \
--cc=wangsl.fnst@cn.fujitsu.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).