Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d54c795b authored by Chao Yu's avatar Chao Yu Committed by Jaegeuk Kim
Browse files

f2fs: fix error path when fail to read inline data



We should unlock page in ->readpage() path and also should unlock & release page
in error path of ->write_begin() to avoid deadlock or memory leak.
So let's add release code to fix the problem when we fail to read inline data.

Signed-off-by: default avatarChao Yu <chao2.yu@samsung.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
parent 2d7b822a
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -942,13 +942,19 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
	if (dn.data_blkaddr == NEW_ADDR) {
		zero_user_segment(page, 0, PAGE_CACHE_SIZE);
	} else {
		if (f2fs_has_inline_data(inode))
		if (f2fs_has_inline_data(inode)) {
			err = f2fs_read_inline_data(inode, page);
		else
			if (err) {
				page_cache_release(page);
				return err;
			}
		} else {
			err = f2fs_submit_page_bio(sbi, page, dn.data_blkaddr,
							READ_SYNC);
			if (err)
				return err;
		}

		lock_page(page);
		if (unlikely(!PageUptodate(page))) {
			f2fs_put_page(page, 1);
+3 −1
Original line number Diff line number Diff line
@@ -45,8 +45,10 @@ int f2fs_read_inline_data(struct inode *inode, struct page *page)
	}

	ipage = get_node_page(sbi, inode->i_ino);
	if (IS_ERR(ipage))
	if (IS_ERR(ipage)) {
		unlock_page(page);
		return PTR_ERR(ipage);
	}

	zero_user_segment(page, MAX_INLINE_DATA, PAGE_CACHE_SIZE);