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 7e70e0ba5a6c0a09d4b44f2e2c70483571e6411e..6ed728aae9a53957d9fc57a7a4bc156eb1e25e33 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 f201eaf59d0da55cb83190cd2cd41d3b2237d845..1ed17226d9ede985565357b514d32084da890972 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