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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.