]> git.baikalelectronics.ru Git - kernel.git/commit
btrfs: protect snapshots from deleting during send
authorDavid Sterba <dsterba@suse.cz>
Tue, 15 Apr 2014 14:41:44 +0000 (16:41 +0200)
committerChris Mason <clm@fb.com>
Tue, 10 Jun 2014 00:20:31 +0000 (17:20 -0700)
commit6b1bcb5dd29934636d6d21311215da1ad2ca8482
treee203f19e76c97629173c097e051946e2aeb6ce4a
parentd0947a51f36748204dea1a81e774ef7d38dc8af6
btrfs: protect snapshots from deleting during send

The patch "Btrfs: fix protection between send and root deletion"
(70f987dbf8e4dd3a3415) 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

http://www.spinics.net/lists/linux-btrfs/msg30813.html

- 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.

CC: Miao Xie <miaox@cn.fujitsu.com>
CC: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/ctree.h
fs/btrfs/ioctl.c
fs/btrfs/send.c