Messages in this thread Patch in this message | | | Date | Fri, 18 Nov 2011 11:59:55 -0800 | From | Andrew Morton <> | Subject | Re: [PATCH 1/1] mm/vmalloc.c: eliminate extra loop in pcpu_get_vm_areas error path |
| |
On Fri, 18 Nov 2011 17:13:50 +0530 Kautuk Consul <consul.kautuk@gmail.com> wrote:
> If either of the vas or vms arrays are not properly kzalloced, > then the code jumps to the err_free label. > > The err_free label runs a loop to check and free each of the array > members of the vas and vms arrays which is not required for this > situation as none of the array members have been allocated till this > point. > > Eliminate the extra loop we have to go through by introducing a new > label err_free2 and then jumping to it. > > Signed-off-by: Kautuk Consul <consul.kautuk@gmail.com> > --- > mm/vmalloc.c | 3 ++- > 1 files changed, 2 insertions(+), 1 deletions(-) > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index b669aa6..1a0d4e2 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -2352,7 +2352,7 @@ struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, > vms = kzalloc(sizeof(vms[0]) * nr_vms, GFP_KERNEL); > vas = kzalloc(sizeof(vas[0]) * nr_vms, GFP_KERNEL); > if (!vas || !vms) > - goto err_free; > + goto err_free2; > > for (area = 0; area < nr_vms; area++) { > vas[area] = kzalloc(sizeof(struct vmap_area), GFP_KERNEL); > @@ -2455,6 +2455,7 @@ err_free: > if (vms) > kfree(vms[area]); > } > +err_free2: > kfree(vas); > kfree(vms); > return NULL;
Which means we can also do the below, yes? (please check my homework!)
--- a/mm/vmalloc.c~mm-vmallocc-eliminate-extra-loop-in-pcpu_get_vm_areas-error-path-fix +++ a/mm/vmalloc.c @@ -2449,10 +2449,8 @@ found: err_free: for (area = 0; area < nr_vms; area++) { - if (vas) - kfree(vas[area]); - if (vms) - kfree(vms[area]); + kfree(vas[area]); + kfree(vms[area]); } err_free2: kfree(vas); _
| |