gfs2: replace ll_rw_block()
authorZhang Yi <yi.zhang@huawei.com>
Thu, 1 Sep 2022 13:34:55 +0000 (21:34 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 12 Sep 2022 03:26:06 +0000 (20:26 -0700)
ll_rw_block() is not safe for the sync read path because it cannot
guarantee that always submitting read IO if the buffer has been locked,
so stop using it. We also switch to new bh_readahead() helper for the
readahead path.

Link: https://lkml.kernel.org/r/20220901133505.2510834-5-yi.zhang@huawei.com
Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Andreas Gruenbacher <agruenba@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/gfs2/meta_io.c
fs/gfs2/quota.c

index 7e70e0b..6ed728a 100644 (file)
@@ -525,8 +525,7 @@ struct buffer_head *gfs2_meta_ra(struct gfs2_glock *gl, u64 dblock, u32 extlen)
 
        if (buffer_uptodate(first_bh))
                goto out;
-       if (!buffer_locked(first_bh))
-               ll_rw_block(REQ_OP_READ | REQ_META | REQ_PRIO, 1, &first_bh);
+       bh_read_nowait(first_bh, REQ_META | REQ_PRIO);
 
        dblock++;
        extlen--;
@@ -534,9 +533,7 @@ struct buffer_head *gfs2_meta_ra(struct gfs2_glock *gl, u64 dblock, u32 extlen)
        while (extlen) {
                bh = gfs2_getbuf(gl, dblock, CREATE);
 
-               if (!buffer_uptodate(bh) && !buffer_locked(bh))
-                       ll_rw_block(REQ_OP_READ | REQ_RAHEAD | REQ_META |
-                                   REQ_PRIO, 1, &bh);
+               bh_readahead(bh, REQ_RAHEAD | REQ_META | REQ_PRIO);
                brelse(bh);
                dblock++;
                extlen--;
index f201eaf..1ed1722 100644 (file)
@@ -745,12 +745,8 @@ static int gfs2_write_buf_to_page(struct gfs2_inode *ip, unsigned long index,
                }
                if (PageUptodate(page))
                        set_buffer_uptodate(bh);
-               if (!buffer_uptodate(bh)) {
-                       ll_rw_block(REQ_OP_READ | REQ_META | REQ_PRIO, 1, &bh);
-                       wait_on_buffer(bh);
-                       if (!buffer_uptodate(bh))
-                               goto unlock_out;
-               }
+               if (bh_read(bh, REQ_META | REQ_PRIO) < 0)
+                       goto unlock_out;
                if (gfs2_is_jdata(ip))
                        gfs2_trans_add_data(ip->i_gl, bh);
                else