Hi Jianan,

On Mon, Oct 19, 2020 at 11:13:42AM +0800, [email protected] wrote:
> Hi, Gao Xiang锟斤拷
> ________________________________
> 
> 锟斤拷锟斤拷锟剿o拷 Gao Xiang<mailto:[email protected]>
> 锟斤拷锟斤拷时锟戒: 2020-10-17 13:16
> 锟秸硷拷锟剿o拷 linux-erofs<mailto:[email protected]>
> 锟斤拷锟酵o拷 Huang Jianan<mailto:[email protected]>; Li 
> Guifu<mailto:[email protected]>; Li 
> Guifu<mailto:[email protected]>; Chao Yu<mailto:[email protected]>; Guo 
> Weichao<mailto:[email protected]>; Zhang 
> Shiming<mailto:[email protected]>; Gao Xiang<mailto:[email protected]>
> 锟斤拷锟解: [WIP] [PATCH 04/12] erofs-utils: fuse: adjust larger extent handling
> so more easy to understand.
> 
> [ let's fold in to the original patch. ]
> Cc: Huang Jianan <[email protected]>
> Signed-off-by: Gao Xiang <[email protected]>
> ---
> fuse/read.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
> 
> diff --git a/fuse/read.c b/fuse/read.c
> index 0d0e3b0fa468..dd44adaa1c40 100644
> --- a/fuse/read.c
> +++ b/fuse/read.c
> @@ -112,12 +112,17 @@ size_t erofs_read_data_compression(struct erofs_vnode 
> *vnode, char *buffer,
> Z_EROFS_COMPRESSION_LZ4 :
> Z_EROFS_COMPRESSION_SHIFTED;
> - if (end >= map.m_la + map.m_llen) {
> - count = map.m_llen;
> - partial = !(map.m_flags & EROFS_MAP_FULL_MAPPED);
> - } else {
> + /*
> + * trim to the needed size if the returned extent is quite
> + * larger than requested, and set up partial flag as well.
> + */
> + if (end < map.m_la + map.m_llen) {
> count = end - map.m_la;
> partial = true;
> + } else {
> + ASSERT(end == map.m_la + map_m_llen);
> 
> I think you mean map.m_llen intesad of map_m_llen.
> Besides, I don't understand why add ASSERT here.
> I think this condition will be true if offset+size is exactly the end of a 
> compressed block?

Thanks for your question.
The idea is that we requested the extent with

        map.m_la = end - 1;

        ret = z_erofs_map_blocks_iter(vnode, &map);
        if (ret)
                return ret;

so the extent must include "end - 1", so
it's impossible that "end > map.m_la + map.m_llen"
(invalid return).

or the entire extent would be holed extent, anyway,
that is another extent rather than a data extent.

(BTW, the up-to-date commits is at
https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-utils.git/log/?h=wip/experimental_fuse
kindly check out them as well :) )

Thanks,
Gao Xiang


> 
> + count = map.m_llen;
> + partial = !(map.m_flags & EROFS_MAP_FULL_MAPPED);
> }
> if ((off_t)map.m_la < offset) {
> --
> 2.24.0
> 
> Thanks,
> Jianan

Reply via email to