In inode.c:btrfs_page_exists_in_range(), if we can't get the page
we need to retry. However we weren't retrying because we weren't
setting page to NULL, which makes the while loop exit immediately
and will make us call page_cache_release after exiting the loop
which is incorrect because our page get didn't succeed. This could
also make us return true when we shouldn't.
Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: Chris Mason <clm@fb.com>
break; /* TODO: Is this relevant for this use case? */
}
- if (!page_cache_get_speculative(page))
+ if (!page_cache_get_speculative(page)) {
+ page = NULL;
continue;
+ }
/*
* Has the page moved?