mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
btrfs: defrag: also check PagePrivate for subpage cases in cluster_pages_for_defrag()
In function cluster_pages_for_defrag() we have a window where we unlock page, either start the ordered range or read the content from disk. When we re-lock the page, we need to make sure it still has the correct page->private for subpage. Thus add the extra PagePrivate check here to handle subpage cases properly. 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
1ccc2e8a86
commit
cae7968680
1 changed files with 3 additions and 2 deletions
|
@ -1278,7 +1278,8 @@ again:
|
|||
* we unlocked the page above, so we need check if
|
||||
* it was released or not.
|
||||
*/
|
||||
if (page->mapping != inode->i_mapping) {
|
||||
if (page->mapping != inode->i_mapping ||
|
||||
!PagePrivate(page)) {
|
||||
unlock_page(page);
|
||||
put_page(page);
|
||||
goto again;
|
||||
|
@ -1296,7 +1297,7 @@ again:
|
|||
}
|
||||
}
|
||||
|
||||
if (page->mapping != inode->i_mapping) {
|
||||
if (page->mapping != inode->i_mapping || !PagePrivate(page)) {
|
||||
unlock_page(page);
|
||||
put_page(page);
|
||||
goto again;
|
||||
|
|
Loading…
Add table
Reference in a new issue