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

Commit d6393786 authored by Josef Bacik's avatar Josef Bacik Committed by Chris Mason
Browse files

Btrfs: add path->really_keep_locks



You'd think path->keep_locks would keep all the locks wouldn't you?  You'd
be wrong.  It only keeps them if the slot is pointing to the last item in
the node.  This is for use with btrfs_next_leaf, which needs this sort of
thing.  But the horrible horrible things I'm going to do to the tree log
means I really need everything held from root to leaf so I can add and
delete items in the same search.  Thanks,

Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
Signed-off-by: default avatarChris Mason <chris.mason@fusionio.com>
parent b11e234d
Loading
Loading
Loading
Loading
+5 −2
Original line number Original line Diff line number Diff line
@@ -2212,6 +2212,9 @@ static noinline void unlock_up(struct btrfs_path *path, int level,
	int no_skips = 0;
	int no_skips = 0;
	struct extent_buffer *t;
	struct extent_buffer *t;


	if (path->really_keep_locks)
		return;

	for (i = level; i < BTRFS_MAX_LEVEL; i++) {
	for (i = level; i < BTRFS_MAX_LEVEL; i++) {
		if (!path->nodes[i])
		if (!path->nodes[i])
			break;
			break;
@@ -2259,7 +2262,7 @@ noinline void btrfs_unlock_up_safe(struct btrfs_path *path, int level)
{
{
	int i;
	int i;


	if (path->keep_locks)
	if (path->keep_locks || path->really_keep_locks)
		return;
		return;


	for (i = level; i < BTRFS_MAX_LEVEL; i++) {
	for (i = level; i < BTRFS_MAX_LEVEL; i++) {
@@ -2492,7 +2495,7 @@ int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root
	if (!cow)
	if (!cow)
		write_lock_level = -1;
		write_lock_level = -1;


	if (cow && (p->keep_locks || p->lowest_level))
	if (cow && (p->really_keep_locks || p->keep_locks || p->lowest_level))
		write_lock_level = BTRFS_MAX_LEVEL;
		write_lock_level = BTRFS_MAX_LEVEL;


	min_write_lock_level = write_lock_level;
	min_write_lock_level = write_lock_level;
+1 −0
Original line number Original line Diff line number Diff line
@@ -576,6 +576,7 @@ struct btrfs_path {
	unsigned int skip_locking:1;
	unsigned int skip_locking:1;
	unsigned int leave_spinning:1;
	unsigned int leave_spinning:1;
	unsigned int search_commit_root:1;
	unsigned int search_commit_root:1;
	unsigned int really_keep_locks:1;
};
};


/*
/*