Messages in this thread | | | Subject | Re: [RFC v4][PATCH 5/9] Memory managemnet (restore) | From | Dave Hansen <> | Date | Wed, 10 Sep 2008 12:31:23 -0700 |
| |
On Tue, 2008-09-09 at 03:42 -0400, Oren Laadan wrote: > +/** > + * cr_vma_read_pages_vaddrs - read addresses of pages to page-array chain > + * @ctx - restart context > + * @npages - number of pages > + */ > +static int cr_vma_read_pages_vaddrs(struct cr_ctx *ctx, int npages) > +{ > + struct cr_pgarr *pgarr; > + int nr, ret; > + > + while (npages) { > + pgarr = cr_pgarr_prep(ctx); > + if (!pgarr) > + return -ENOMEM; > + nr = min(npages, (int) pgarr->nr_free); > + ret = cr_kread(ctx, pgarr->vaddrs, nr * sizeof(unsigned long)); > + if (ret < 0) > + return ret; > + pgarr->nr_free -= nr; > + pgarr->nr_used += nr; > + npages -= nr; > + } > + return 0; > +}
cr_pgarr_prep() can return a partially full pgarr, right? Won't the cr_kread() always start at the beginning of the pgarr->vaddrs[] array? Seems to me like it will clobber things from the last call.
-- Dave
| |