btrfs: set the lockdep class for log tree extent buffers
commit d3beaa253f
upstream.
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.
CC: stable@vger.kernel.org # 4.4+
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7e0ffb0d9d
commit
650275310f
|
@ -1339,6 +1339,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) >
|
||||
|
@ -1412,7 +1414,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);
|
||||
|
@ -1420,6 +1421,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
|
||||
|
|
Loading…
Reference in New Issue