lkml.org 
[lkml]   [2022]   [Aug]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 10/14] udf: replace ll_rw_block()
    On Wed 31-08-22 15:21:07, Zhang Yi wrote:
    > 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(). We also switch to
    > new bh_readahead_batch() helper for the buffer array readahead path.
    >
    > Signed-off-by: Zhang Yi <yi.zhang@huawei.com>

    Looks good to me. Feel free to add:

    Reviewed-by: Jan Kara <jack@suse.cz>

    Honza

    > ---
    > fs/udf/dir.c | 2 +-
    > fs/udf/directory.c | 2 +-
    > fs/udf/inode.c | 5 +----
    > 3 files changed, 3 insertions(+), 6 deletions(-)
    >
    > diff --git a/fs/udf/dir.c b/fs/udf/dir.c
    > index cad3772f9dbe..15a98aa33aa8 100644
    > --- a/fs/udf/dir.c
    > +++ b/fs/udf/dir.c
    > @@ -130,7 +130,7 @@ static int udf_readdir(struct file *file, struct dir_context *ctx)
    > brelse(tmp);
    > }
    > if (num) {
    > - ll_rw_block(REQ_OP_READ | REQ_RAHEAD, num, bha);
    > + bh_readahead_batch(bha, num, REQ_RAHEAD);
    > for (i = 0; i < num; i++)
    > brelse(bha[i]);
    > }
    > diff --git a/fs/udf/directory.c b/fs/udf/directory.c
    > index a2adf6293093..469bc22d6bff 100644
    > --- a/fs/udf/directory.c
    > +++ b/fs/udf/directory.c
    > @@ -89,7 +89,7 @@ struct fileIdentDesc *udf_fileident_read(struct inode *dir, loff_t *nf_pos,
    > brelse(tmp);
    > }
    > if (num) {
    > - ll_rw_block(REQ_OP_READ | REQ_RAHEAD, num, bha);
    > + bh_readahead_batch(bha, num, REQ_RAHEAD);
    > for (i = 0; i < num; i++)
    > brelse(bha[i]);
    > }
    > diff --git a/fs/udf/inode.c b/fs/udf/inode.c
    > index 8d06daed549f..0971f09d20fc 100644
    > --- a/fs/udf/inode.c
    > +++ b/fs/udf/inode.c
    > @@ -1214,10 +1214,7 @@ struct buffer_head *udf_bread(struct inode *inode, udf_pblk_t block,
    > if (buffer_uptodate(bh))
    > return bh;
    >
    > - ll_rw_block(REQ_OP_READ, 1, &bh);
    > -
    > - wait_on_buffer(bh);
    > - if (buffer_uptodate(bh))
    > + if (!bh_read(bh, 0))
    > return bh;
    >
    > brelse(bh);
    > --
    > 2.31.1
    >
    --
    Jan Kara <jack@suse.com>
    SUSE Labs, CR

    \
     
     \ /
      Last update: 2022-08-31 13:06    [W:4.147 / U:0.612 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site