Commit d2d9bb3b authored by Jaegeuk Kim's avatar Jaegeuk Kim
Browse files

f2fs: get out of a repeat loop when getting a locked data page

https://bugzilla.kernel.org/show_bug.cgi?id=216050



Somehow we're getting a page which has a different mapping.
Let's avoid the infinite loop.

Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent a3ab5574
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -1389,18 +1389,14 @@ struct page *f2fs_get_lock_data_page(struct inode *inode, pgoff_t index,
{
	struct address_space *mapping = inode->i_mapping;
	struct page *page;
repeat:

	page = f2fs_get_read_data_page(inode, index, 0, for_write, NULL);
	if (IS_ERR(page))
		return page;

	/* wait for read completion */
	lock_page(page);
	if (unlikely(page->mapping != mapping)) {
		f2fs_put_page(page, 1);
		goto repeat;
	}
	if (unlikely(!PageUptodate(page))) {
	if (unlikely(page->mapping != mapping || !PageUptodate(page))) {
		f2fs_put_page(page, 1);
		return ERR_PTR(-EIO);
	}