Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 45bac0f3 authored by Liu Bo's avatar Liu Bo Committed by David Sterba
Browse files

Btrfs: use wait_event instead of a single function



Since TASK_UNINTERRUPTIBLE has been used here, wait_event() can do the
same job.

Signed-off-by: default avatarLiu Bo <bo.li.liu@oracle.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 69cc7151
Loading
Loading
Loading
Loading
+3 −18
Original line number Diff line number Diff line
@@ -609,23 +609,6 @@ static noinline int create_subvol(struct inode *dir,
	return ret;
}

static void btrfs_wait_for_no_snapshotting_writes(struct btrfs_root *root)
{
	s64 writers;
	DEFINE_WAIT(wait);

	do {
		prepare_to_wait(&root->subv_writers->wait, &wait,
				TASK_UNINTERRUPTIBLE);

		writers = percpu_counter_sum(&root->subv_writers->counter);
		if (writers)
			schedule();

	} while (writers);
	finish_wait(&root->subv_writers->wait, &wait);
}

static int create_snapshot(struct btrfs_root *root, struct inode *dir,
			   struct dentry *dentry,
			   u64 *async_transid, bool readonly,
@@ -654,7 +637,9 @@ static int create_snapshot(struct btrfs_root *root, struct inode *dir,

	atomic_inc(&root->will_be_snapshotted);
	smp_mb__after_atomic();
	btrfs_wait_for_no_snapshotting_writes(root);
	/* 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, 0);
	if (ret)