]> 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)
commit47d28db1b476d38feac70a5f8cf4cf58f24f7b87
treee203f19e76c97629173c097e051946e2aeb6ce4a
parentd0f505bbf36b8389be0aabf24cdf4d43bfc64160
btrfs: protect snapshots from deleting during send

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