mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-10 15:58:47 +00:00
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: Josef Bacik <josef@redhat.com>
This commit is contained in:
parent
1e20932a23
commit
beb42dd793
@ -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 @@ out:
|
||||
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 |
|
||||
|
Loading…
x
Reference in New Issue
Block a user