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

Commit 31533fb2 authored by Chris Mason's avatar Chris Mason
Browse files

Btrfs: remove lockdep magic from btrfs_next_leaf



Before the reader/writer locks, btrfs_next_leaf needed to keep
the path blocking to avoid making lockdep upset.

Now that btrfs_next_leaf only takes read locks, this isn't required.

Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 85d4e461
Loading
Loading
Loading
Loading
+5 −31
Original line number Diff line number Diff line
@@ -4169,21 +4169,12 @@ int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path)
	u32 nritems;
	int ret;
	int old_spinning = path->leave_spinning;
	int force_blocking = 0;
	int next_rw_lock = 0;

	nritems = btrfs_header_nritems(path->nodes[0]);
	if (nritems == 0)
		return 1;

	/*
	 * we take the blocks in an order that upsets lockdep.  Using
	 * blocking mode is the only way around it.
	 */
#ifdef CONFIG_DEBUG_LOCK_ALLOC
	force_blocking = 1;
#endif

	btrfs_item_key_to_cpu(path->nodes[0], &key, nritems - 1);
again:
	level = 1;
@@ -4192,8 +4183,6 @@ int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path)
	btrfs_release_path(path);

	path->keep_locks = 1;

	if (!force_blocking)
	path->leave_spinning = 1;

	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
@@ -4255,19 +4244,11 @@ int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path)
			if (!ret) {
				btrfs_set_path_blocking(path);
				btrfs_tree_read_lock(next);
				if (!force_blocking) {
				btrfs_clear_path_blocking(path, next,
							  BTRFS_READ_LOCK);
			}
			}
			if (force_blocking) {
				btrfs_set_lock_blocking_rw(next,
							   BTRFS_READ_LOCK);
				next_rw_lock = BTRFS_READ_LOCK_BLOCKING;
			} else {
			next_rw_lock = BTRFS_READ_LOCK;
		}
		}
		break;
	}
	path->slots[level] = slot;
@@ -4300,19 +4281,12 @@ int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path)
			if (!ret) {
				btrfs_set_path_blocking(path);
				btrfs_tree_read_lock(next);
				if (!force_blocking)
				btrfs_clear_path_blocking(path, next,
							  BTRFS_READ_LOCK);
			}
			if (force_blocking) {
				btrfs_set_lock_blocking_rw(next,
						   BTRFS_READ_LOCK);
				next_rw_lock = BTRFS_READ_LOCK_BLOCKING;
			} else {
			next_rw_lock = BTRFS_READ_LOCK;
		}
	}
	}
	ret = 0;
done:
	unlock_up(path, 0, 1);