Commit 67fcefb9 authored by Zhang Yi's avatar Zhang Yi Committed by Zheng Zengkai
Browse files

ufs: replace ll_rw_block()

mainline inclusion
from mainline-v6.1-rc1
commit 6799b698
category: bugfix
bugzilla: 187878,https://gitee.com/openeuler/kernel/issues/I5QJH9
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?h=v6.1-rc2&id=6799b6983170c6dfdb2fcea8c97058557ea7b5b6

--------------------------------

ll_rw_block() is not safe for the sync read path because it cannot
guarantee that submitting read IO if the buffer has been locked. We
could get false positive EIO after wait_on_buffer() if the buffer has
been locked by others. So stop using ll_rw_block() in ufs.

Link: https://lkml.kernel.org/r/20220901133505.2510834-12-yi.zhang@huawei.com


Signed-off-by: default avatarZhang Yi <yi.zhang@huawei.com>
Reviewed-by: default avatarJan Kara <jack@suse.cz>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>

Conflict:
  fs/ufs/balloc.c

Signed-off-by: default avatarLi Lingfeng <lilingfeng3@huawei.com>
Reviewed-by: default avatarZhang Yi <yi.zhang@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parent d691117f
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -295,15 +295,11 @@ static void ufs_change_blocknr(struct inode *inode, sector_t beg,

			if (!buffer_mapped(bh))
					map_bh(bh, inode->i_sb, oldb + pos);
			if (!buffer_uptodate(bh)) {
				ll_rw_block(REQ_OP_READ, 0, 1, &bh);
				wait_on_buffer(bh);
				if (!buffer_uptodate(bh)) {
			if (bh_read(bh, 0) < 0) {
				ufs_error(inode->i_sb, __func__,
					  "read of block failed\n");
				break;
			}
			}

			UFSD(" change from %llu to %llu, pos %u\n",
			     (unsigned long long)(pos + oldb),