Re: [PATCH 08/14] ocfs2: replace ll_rw_block()
flat view
From: Jan Kara <jack@suse.cz>
Date: 2022-08-31 11:31:39
Also in:
linux-fsdevel, lkml, ntfs3, ocfs2-devel
On Wed 31-08-22 15:21:05, Zhang Yi wrote:
quoted hunk ↗ jump to hunk
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 ocfs2. Signed-off-by: Zhang Yi <yi.zhang@huawei.com> --- fs/ocfs2/aops.c | 2 +- fs/ocfs2/super.c | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-)diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c index af4157f61927..1d65f6ef00ca 100644 --- a/fs/ocfs2/aops.c +++ b/fs/ocfs2/aops.c@@ -636,7 +636,7 @@ int ocfs2_map_page_blocks(struct page *page, u64 *p_blkno, !buffer_new(bh) && ocfs2_should_read_blk(inode, page, block_start) && (block_start < from || block_end > to)) { - ll_rw_block(REQ_OP_READ, 1, &bh); + bh_read_nowait(bh, 0); *wait_bh++=bh; }diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index e2cc9eec287c..4050f35bbd0c 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c@@ -1763,10 +1763,7 @@ static int ocfs2_get_sector(struct super_block *sb, lock_buffer(*bh); if (!buffer_dirty(*bh)) clear_buffer_uptodate(*bh); - unlock_buffer(*bh); - ll_rw_block(REQ_OP_READ, 1, bh); - wait_on_buffer(*bh); - if (!buffer_uptodate(*bh)) { + if (bh_read_locked(*bh, 0)) { mlog_errno(-EIO); brelse(*bh); *bh = NULL;
I would just use bh_read() here and drop bh_read_locked() altogether... Honza -- Jan Kara [off-list ref] SUSE Labs, CR