No title Revision 616163313237 (Mon Jul 30 2018 at 12:21) - Diff Link to this snippet: https://friendpaste.com/2LY9eLAR9q0RoOtRK7VYmX Embed: manni perldoc borland colorful default murphy trac fruity autumn bw emacs pastie friendly Show line numbers Wrap lines 123456789101112131415161718192021222324252627282930diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.cindex b077544b5232..e742965e4bc3 100644--- a/fs/btrfs/ioctl.c+++ b/fs/btrfs/ioctl.c@@ -777,16 +777,21 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir, goto free_pending; } + /*+ * Flush dealloc writes before incrementing root->will_be_snapshotted to+ * avoid as many nocow writes as possible to fallback to COW mode (which+ * could run into ENOSPC).+ */+ ret = btrfs_start_delalloc_inodes(root);+ if (ret)+ goto dec_and_free;+ atomic_inc(&root->will_be_snapshotted); smp_mb__after_atomic(); /* wait for no snapshot writes */ wait_event(root->subv_writers->wait, percpu_counter_sum(&root->subv_writers->counter) == 0); - ret = btrfs_start_delalloc_inodes(root);- if (ret)- goto dec_and_free;- btrfs_wait_ordered_extents(root, U64_MAX, 0, (u64)-1); btrfs_init_block_rsv(&pending_snapshot->block_rsv,