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

Commit 9fceaf81 authored by Chao Yu's avatar Chao Yu Committed by Greg Kroah-Hartman
Browse files

f2fs: fix to check return value of f2fs_reserve_new_block()



[ Upstream commit 956fa1ddc132e028f3b7d4cf17e6bfc8cb36c7fd ]

Let's check return value of f2fs_reserve_new_block() in do_recover_data()
rather than letting it fails silently.

Also refactoring check condition on return value of f2fs_reserve_new_block()
as below:
- trigger f2fs_bug_on() only for ENOSPC case;
- use do-while statement to avoid redundant codes;

Signed-off-by: default avatarChao Yu <chao@kernel.org>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 52240224
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -611,7 +611,16 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
		 */
		if (dest == NEW_ADDR) {
			f2fs_truncate_data_blocks_range(&dn, 1);
			f2fs_reserve_new_block(&dn);
			do {
				err = f2fs_reserve_new_block(&dn);
				if (err == -ENOSPC) {
					f2fs_bug_on(sbi, 1);
					break;
				}
			} while (err &&
				IS_ENABLED(CONFIG_F2FS_FAULT_INJECTION));
			if (err)
				goto err;
			continue;
		}

@@ -619,12 +628,14 @@ static int do_recover_data(struct f2fs_sb_info *sbi, struct inode *inode,
		if (f2fs_is_valid_blkaddr(sbi, dest, META_POR)) {

			if (src == NULL_ADDR) {
				do {
					err = f2fs_reserve_new_block(&dn);
				while (err &&
				       IS_ENABLED(CONFIG_F2FS_FAULT_INJECTION))
					err = f2fs_reserve_new_block(&dn);
				/* We should not get -ENOSPC */
				f2fs_bug_on(sbi, err);
					if (err == -ENOSPC) {
						f2fs_bug_on(sbi, 1);
						break;
					}
				} while (err &&
					IS_ENABLED(CONFIG_F2FS_FAULT_INJECTION));
				if (err)
					goto err;
			}