On Mon, Jan 06, 2014 at 05:25:37PM +0800, Wang Shilong wrote:
> We should gurantee that parent and clone root can not be destroyed
> during send, for this we have two ideas.
>
> 1.by holding @subvol_sem, this might be a nightmare, because it will
> block all subvolumes deletion for a long time.
>
> 2.Miao pointed out we can reuse @send_in_progress, that mean we will
> skip snapshot deletion if root sending is in progress.
>
> Here we adopt the second approach since it won't block other subvolumes
> deletion for a long time.
Agreed, good idea protecting against the deletion during send.
> static inline int btrfs_need_cleaner_sleep(struct btrfs_root *root)
> {
> + spin_lock(&root->root_item_lock);
> + if (root->send_in_progress) {
> + spin_unlock(&root->root_item_lock);
> + return 1;
> + }
> + spin_unlock(&root->root_item_lock);
Whi is this needed? btrfs_need_cleaner_sleep needs only fs_info.
* when called from cleaner_kthread it gets the tree_root
* when called from btrfs_drop_snapshot it's a reloc_root
neither of which is ever subject to send.
david
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html