diff options
Diffstat (limited to 'fs/btrfs/transaction.c')
| -rw-r--r-- | fs/btrfs/transaction.c | 8 | 
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index 6a0574e923b..81376d94cd3 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -785,6 +785,10 @@ static noinline int commit_fs_roots(struct btrfs_trans_handle *trans,  			btrfs_save_ino_cache(root, trans); +			/* see comments in should_cow_block() */ +			root->force_cow = 0; +			smp_wmb(); +  			if (root->commit_root != root->node) {  				mutex_lock(&root->fs_commit_mutex);  				switch_commit_root(root); @@ -947,6 +951,10 @@ static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,  	btrfs_tree_unlock(old);  	free_extent_buffer(old); +	/* see comments in should_cow_block() */ +	root->force_cow = 1; +	smp_wmb(); +  	btrfs_set_root_node(new_root_item, tmp);  	/* record when the snapshot was created in key.offset */  	key.offset = trans->transid;  |