mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 15:54:15 +08:00
btrfs: assert page mapping lock in attach_extent_buffer_page
When calling attach_extent_buffer_page(), either we're attaching anonymous pages, called from btrfs_clone_extent_buffer(), or we're attaching btree inode pages, called from alloc_extent_buffer(). For the latter case, we should hold page->mapping->private_lock to avoid parallel changes to page->private. Reviewed-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
bbb86a3717
commit
0d01e247a0
@ -3102,6 +3102,15 @@ static int submit_extent_page(unsigned int opf,
|
||||
static void attach_extent_buffer_page(struct extent_buffer *eb,
|
||||
struct page *page)
|
||||
{
|
||||
/*
|
||||
* If the page is mapped to btree inode, we should hold the private
|
||||
* lock to prevent race.
|
||||
* For cloned or dummy extent buffers, their pages are not mapped and
|
||||
* will not race with any other ebs.
|
||||
*/
|
||||
if (page->mapping)
|
||||
lockdep_assert_held(&page->mapping->private_lock);
|
||||
|
||||
if (!PagePrivate(page))
|
||||
attach_page_private(page, eb);
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user