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

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

Btrfs: pass locked_page into extent_clear_unlock_delalloc if theres an error



While doing my enospc work I got a transaction abortion that resulted in a
panic when we tried to unlock_page() an already unlocked page.  This is
because we aren't calling extent_clear_unlock_delalloc with the locked page
so it was unlocking all the pages in the range.  This is wrong since
__extent_writepage expects to have the page locked still unless we return
*page_started as 1.  This should keep us from panicing.  Thanks,

Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
parent 1e20932a
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -830,7 +830,7 @@ static noinline int cow_file_range(struct inode *inode,
	if (IS_ERR(trans)) {
		extent_clear_unlock_delalloc(inode,
			     &BTRFS_I(inode)->io_tree,
			     start, end, NULL,
			     start, end, locked_page,
			     EXTENT_CLEAR_UNLOCK_PAGE |
			     EXTENT_CLEAR_UNLOCK |
			     EXTENT_CLEAR_DELALLOC |
@@ -963,7 +963,7 @@ static noinline int cow_file_range(struct inode *inode,
out_unlock:
	extent_clear_unlock_delalloc(inode,
		     &BTRFS_I(inode)->io_tree,
		     start, end, NULL,
		     start, end, locked_page,
		     EXTENT_CLEAR_UNLOCK_PAGE |
		     EXTENT_CLEAR_UNLOCK |
		     EXTENT_CLEAR_DELALLOC |