Re: [PATCH 06/17] btrfs: set the lockdep class for log tree extent buffers

Filipe Manana
2020-08-11T11:28:36Z

On Mon, Aug 10, 2020 at 4:44 PM Josef Bacik <josef@toxicpanda.com> wrote:
>
> These are special extent buffers that get rewound in order to lookup
> the state of the tree at a specific point in time. As such they do not
> go through the normal initialization paths that set their lockdep class,
> so handle them appropriately when they are created and before they are
> locked.
>
> Signed-off-by: Josef Bacik <josef@toxicpanda.com>

Reviewed-by: Filipe Manana <fdmanana@suse.com>

Looks good, thanks.

> ---
> fs/btrfs/ctree.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
> index 70e49d8d4f6c..cbacf700b68b 100644
> --- a/fs/btrfs/ctree.c
> +++ b/fs/btrfs/ctree.c
> @@ -1297,6 +1297,8 @@ tree_mod_log_rewind(struct btrfs_fs_info *fs_info, struct btrfs_path *path,
> btrfs_tree_read_unlock_blocking(eb);
> free_extent_buffer(eb);
>
> + btrfs_set_buffer_lockdep_class(btrfs_header_owner(eb_rewin),
> + eb_rewin, btrfs_header_level(eb_rewin));
> btrfs_tree_read_lock(eb_rewin);
> __tree_mod_log_rewind(fs_info, eb_rewin, time_seq, tm);
> WARN_ON(btrfs_header_nritems(eb_rewin) >
> @@ -1370,7 +1372,6 @@ get_old_root(struct btrfs_root *root, u64 time_seq)
>
> if (!eb)
> return NULL;
> - btrfs_tree_read_lock(eb);
> if (old_root) {
> btrfs_set_header_bytenr(eb, eb->start);
> btrfs_set_header_backref_rev(eb, BTRFS_MIXED_BACKREF_REV);
> @@ -1378,6 +1379,9 @@ get_old_root(struct btrfs_root *root, u64 time_seq)
> btrfs_set_header_level(eb, old_root->level);
> btrfs_set_header_generation(eb, old_generation);
> }
> + btrfs_set_buffer_lockdep_class(btrfs_header_owner(eb), eb,
> + btrfs_header_level(eb));
> + btrfs_tree_read_lock(eb);
> if (tm)
> __tree_mod_log_rewind(fs_info, eb, time_seq, tm);
> else
> --
> 2.24.1
>

--
Filipe David Manana,

“Whether you think you can, or you think you can't — you're right.”