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

f2fs: fix error path of recovery



There are some places in where we missed to unlock page or unlock page
incorrectly, fix them.

Signed-off-by: default avatarChao Yu <yuchao0@huawei.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 793ab1c8
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -325,8 +325,10 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
			break;
		}

		if (!is_recoverable_dnode(page))
		if (!is_recoverable_dnode(page)) {
			f2fs_put_page(page, 1);
			break;
		}

		if (!is_fsync_dnode(page))
			goto next;
@@ -338,8 +340,10 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
			if (!check_only &&
					IS_INODE(page) && is_dent_dnode(page)) {
				err = f2fs_recover_inode_page(sbi, page);
				if (err)
				if (err) {
					f2fs_put_page(page, 1);
					break;
				}
				quota_inode = true;
			}

@@ -355,6 +359,7 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
					err = 0;
					goto next;
				}
				f2fs_put_page(page, 1);
				break;
			}
		}
@@ -370,6 +375,7 @@ next:
				"%s: detect looped node chain, "
				"blkaddr:%u, next:%u",
				__func__, blkaddr, next_blkaddr_of_node(page));
			f2fs_put_page(page, 1);
			err = -EINVAL;
			break;
		}
@@ -380,7 +386,6 @@ next:

		f2fs_ra_meta_pages_cond(sbi, blkaddr);
	}
	f2fs_put_page(page, 1);
	return err;
}

@@ -666,9 +671,11 @@ static int recover_data(struct f2fs_sb_info *sbi, struct list_head *inode_list,
		 */
		if (IS_INODE(page)) {
			err = recover_inode(entry->inode, page);
			if (err)
			if (err) {
				f2fs_put_page(page, 1);
				break;
			}
		}
		if (entry->last_dentry == blkaddr) {
			err = recover_dentry(entry->inode, page, dir_list);
			if (err) {