lkml.org 
[lkml]   [2022]   [Mar]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [Linux-cachefs] [PATCH v6 14/22] erofs: add erofs_fscache_read_folios() helper
    On Fri, Mar 25, 2022 at 08:22:15PM +0800, Jeffle Xu wrote:
    > Add erofs_fscache_read_folios() helper reading from fscache. It supports
    > on-demand read semantics. That is, it will make the backend prepare for
    > the data when cache miss. Once data ready, it will reinitiate a read
    > from the cache.
    >
    > This helper can then be used to implement .readpage()/.readahead() of
    > on-demand read semantics.
    >
    > Besides also add erofs_fscache_read_folio() wrapper helper.
    >
    > Signed-off-by: Jeffle Xu <jefflexu@linux.alibaba.com>
    > ---
    > fs/erofs/fscache.c | 39 +++++++++++++++++++++++++++++++++++++++
    > 1 file changed, 39 insertions(+)
    >
    > diff --git a/fs/erofs/fscache.c b/fs/erofs/fscache.c
    > index 30383d9adb62..6a55f7b5f883 100644
    > --- a/fs/erofs/fscache.c
    > +++ b/fs/erofs/fscache.c
    > @@ -7,6 +7,45 @@
    >
    > static struct fscache_volume *volume;
    >
    > +/*
    > + * erofs_fscache_read_folios - Read data from fscache.
    > + *
    > + * Fill the read data into page cache described by @start/len, which shall be
    > + * both aligned with PAGE_SIZE. @pstart describes the corresponding physical
    > + * start address in the cache file.
    > + */
    > +static int erofs_fscache_read_folios(struct fscache_cookie *cookie,
    > + struct address_space *mapping,
    > + loff_t start, size_t len,
    > + loff_t pstart)
    > +{
    > + struct netfs_cache_resources cres;
    > + struct iov_iter iter;
    > + int ret;
    > +
    > + memset(&cres, 0, sizeof(cres));
    > +
    > + ret = fscache_begin_read_operation(&cres, cookie);
    > + if (ret)
    > + return ret;
    > +
    > + iov_iter_xarray(&iter, READ, &mapping->i_pages, start, len);
    > +
    > + ret = fscache_read(&cres, pstart, &iter,
    > + NETFS_READ_HOLE_ONDEMAND, NULL, NULL);
    > +
    > + fscache_end_operation(&cres);
    > + return ret;
    > +}
    > +
    > +static inline int erofs_fscache_read_folio(struct fscache_cookie *cookie,
    > + struct folio *folio, loff_t pstart)

    I've seen two users of this helper,

    1) erofs_fscache_readpage_noinline
    2) erofs_fscache_readpage_blob

    Actually, we could fold such logic in these users since this additional
    helper doesn't enhance the readability but increase the overhead when
    reading the code.

    It'd be better to get rid of it instead.

    Thanks,
    Gao Xiang

    > +{
    > + return erofs_fscache_read_folios(cookie, folio_file_mapping(folio),
    > + folio_pos(folio), folio_size(folio),
    > + pstart);
    > +}
    > +
    > static const struct address_space_operations erofs_fscache_blob_aops = {
    > };
    >
    > --
    > 2.27.0
    >
    > --
    > Linux-cachefs mailing list
    > Linux-cachefs@redhat.com
    > https://listman.redhat.com/mailman/listinfo/linux-cachefs

    \
     
     \ /
      Last update: 2022-03-28 04:50    [W:4.102 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site