Unverified Commit 0e435a2b authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!2214 [sync] PR-2210: jbd2: Fix potential data lost in recovering journal...

!2214 [sync] PR-2210:  jbd2: Fix potential data lost in recovering journal raced with synchronizing fs bdev

Merge Pull Request from: @openeuler-sync-bot 
 

Origin pull request: 
https://gitee.com/openeuler/kernel/pulls/2210 
 
PR sync from: Zhihao Cheng <chengzhihao1@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/KKEC5X5VRXDJ7OXKL35AMY2NOVUY6T3D/ 
 
https://gitee.com/openeuler/kernel/issues/I828EV 
 
Link:https://gitee.com/openeuler/kernel/pulls/2214

 

Reviewed-by: default avatarzhangyi (F) <yi.zhang@huawei.com>
Signed-off-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
parents 554a6d70 9287befc
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -291,6 +291,8 @@ int jbd2_journal_recover(journal_t *journal)
	journal_superblock_t *	sb;

	struct recovery_info	info;
	errseq_t		wb_err;
	struct address_space	*mapping;

	memset(&info, 0, sizeof(info));
	sb = journal->j_superblock;
@@ -308,6 +310,9 @@ int jbd2_journal_recover(journal_t *journal)
		return 0;
	}

	wb_err = 0;
	mapping = journal->j_fs_dev->bd_inode->i_mapping;
	errseq_check_and_advance(&mapping->wb_err, &wb_err);
	err = do_one_pass(journal, &info, PASS_SCAN);
	if (!err)
		err = do_one_pass(journal, &info, PASS_REVOKE);
@@ -326,6 +331,9 @@ int jbd2_journal_recover(journal_t *journal)

	jbd2_journal_clear_revoke(journal);
	err2 = sync_blockdev(journal->j_fs_dev);
	if (!err)
		err = err2;
	err2 = errseq_check_and_advance(&mapping->wb_err, &wb_err);
	if (!err)
		err = err2;
	/* Make sure all replayed data is on permanent storage */