Messages in this thread | | | Date | Fri, 4 Nov 2022 18:03:58 +0800 | From | Gao Xiang <> | Subject | Re: [PATCH 2/2] erofs: get correct count for unmapped range in fscache mode |
| |
On Fri, Nov 04, 2022 at 01:40:28PM +0800, Jingbo Xu wrote: > For unmapped range, the returned map.m_llen is zero, and thus the > calculated count is unexpected zero. > > Prior to the refactoring introduced by commit 1ae9470c3e14 ("erofs: > clean up .read_folio() and .readahead() in fscache mode"), only the > readahead routine suffers from this. With the refactoring of making > .read_folio() and .readahead() calling one common routine, both > read_folio and readahead have this issue now. > > Fix this by calculating count separately in unmapped condition. > > Fixes: c665b394b9e8 ("erofs: implement fscache-based data readahead") > Fixes: 1ae9470c3e14 ("erofs: clean up .read_folio() and .readahead() in fscache mode") > Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Thanks, Gao Xiang
> --- > fs/erofs/fscache.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/fs/erofs/fscache.c b/fs/erofs/fscache.c > index 83559008bfa8..260fa4737fc0 100644 > --- a/fs/erofs/fscache.c > +++ b/fs/erofs/fscache.c > @@ -296,15 +296,16 @@ static int erofs_fscache_data_read(struct address_space *mapping, > return PAGE_SIZE; > } > > - count = min_t(size_t, map.m_llen - (pos - map.m_la), len); > - DBG_BUGON(!count || count % PAGE_SIZE); > - > if (!(map.m_flags & EROFS_MAP_MAPPED)) { > + count = len; > iov_iter_xarray(&iter, READ, &mapping->i_pages, pos, count); > iov_iter_zero(count, &iter); > return count; > } > > + count = min_t(size_t, map.m_llen - (pos - map.m_la), len); > + DBG_BUGON(!count || count % PAGE_SIZE); > + > mdev = (struct erofs_map_dev) { > .m_deviceid = map.m_deviceid, > .m_pa = map.m_pa, > -- > 2.19.1.6.gb485710b
| |