From: Filipe Manana Date: Thu, 5 Jun 2014 12:22:24 +0000 (+0100) Subject: Btrfs: make sure we retry if we couldn't get the page X-Git-Tag: v4.9.8~6070^2~51 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=91405151eb7005949072bee751343390757f8417;p=platform%2Fkernel%2Flinux-rpi3.git Btrfs: make sure we retry if we couldn't get the page 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 Signed-off-by: Chris Mason --- diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 38d1e7b..cdbd20e 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -6777,8 +6777,10 @@ bool btrfs_page_exists_in_range(struct inode *inode, loff_t start, loff_t end) 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?