Message ID | 1555581006-153458-1-git-send-email-wangzhou1@hisilicon.com |
---|---|
State | Superseded |
Headers | show |
Series | lib: scatterlist: Fix to support no mapped sg | expand |
Zhou Wang <wangzhou1@hisilicon.com> writes: > In function sg_split, the second sg_calculate_split will return -EINVAL > when in_mapped_nents is 0. > > Indeed there is no need to do second sg_calculate_split and sg_split_mapped > when in_mapped_nents is 0, as in_mapped_nents indicates no mapped entry in > original sgl. > > Signed-off-by: Zhou Wang <wangzhou1@hisilicon.com> That's right. May I know what is the usecase which led you to this fix ? Acked-by: Robert Jarzmik <robert.jarzmik@free.fr> -- Robert
On 2019/4/19 18:43, Robert Jarzmik wrote: > Zhou Wang <wangzhou1@hisilicon.com> writes: > >> In function sg_split, the second sg_calculate_split will return -EINVAL >> when in_mapped_nents is 0. >> >> Indeed there is no need to do second sg_calculate_split and sg_split_mapped >> when in_mapped_nents is 0, as in_mapped_nents indicates no mapped entry in >> original sgl. >> >> Signed-off-by: Zhou Wang <wangzhou1@hisilicon.com> > That's right. May I know what is the usecase which led you to this fix ? I posted a patchset to support HiSilicon compression engine: https://lkml.org/lkml/2019/1/23/358. As Herber Xu suggested, it should use new crypto acomp API which uses sgl as data input and output. However, our hardware can not handle compress head for input/output data, so I need split input/output sgl firstly which is not mapped sgl. New version of HiSilicon compression engine driver has not been posted to community yet. I will do this later. > > Acked-by: Robert Jarzmik <robert.jarzmik@free.fr> Many thanks for your review, Zhou > > -- > Robert > > . >
diff --git a/lib/sg_split.c b/lib/sg_split.c index b063410..d4181c8 100644 --- a/lib/sg_split.c +++ b/lib/sg_split.c @@ -178,11 +178,13 @@ int sg_split(struct scatterlist *in, const int in_mapped_nents, * The order of these 3 calls is important and should be kept. */ sg_split_phys(splitters, nb_splits); - ret = sg_calculate_split(in, in_mapped_nents, nb_splits, skip, - split_sizes, splitters, true); - if (ret < 0) - goto err; - sg_split_mapped(splitters, nb_splits); + if (in_mapped_nents) { + ret = sg_calculate_split(in, in_mapped_nents, nb_splits, skip, + split_sizes, splitters, true); + if (ret < 0) + goto err; + sg_split_mapped(splitters, nb_splits); + } for (i = 0; i < nb_splits; i++) { out[i] = splitters[i].out_sg;
In function sg_split, the second sg_calculate_split will return -EINVAL when in_mapped_nents is 0. Indeed there is no need to do second sg_calculate_split and sg_split_mapped when in_mapped_nents is 0, as in_mapped_nents indicates no mapped entry in original sgl. Signed-off-by: Zhou Wang <wangzhou1@hisilicon.com> --- lib/sg_split.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) -- 2.8.1