lkml.org 
[lkml]   [2008]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC v11][PATCH 03/13] General infrastructure for checkpoint restart
    Oren Laadan wrote:
    > diff --git a/checkpoint/sys.c b/checkpoint/sys.c
    > index 375129c..bd14ef9 100644
    > --- a/checkpoint/sys.c
    > +++ b/checkpoint/sys.c

    > +/*
    > + * During checkpoint and restart the code writes outs/reads in data
    > + * to/from the checkpoint image from/to a temporary buffer (ctx->hbuf).
    > + * Because operations can be nested, use cr_hbuf_get() to reserve space
    > + * in the buffer, then cr_hbuf_put() when you no longer need that space.
    > + */

    This seems a bit over-kill for buffer management no? The only large
    header seems to be cr_hdr_head and the blowup comes from utsinfo string
    data (which could easily be moved out to be in it's own CR_HDR_STRING
    blocks).

    Wouldn't it be easier to use stack-local storage than balancing the
    cr_hbuf_get/put routines?

    > +
    > +/*
    > + * ctx->hbuf is used to hold headers and data of known (or bound),
    > + * static sizes. In some cases, multiple headers may be allocated in
    > + * a nested manner. The size should accommodate all headers, nested
    > + * or not, on all archs.
    > + */
    > +#define CR_HBUF_TOTAL (8 * 4096)
    > +
    > +/**
    > + * cr_hbuf_get - reserve space on the hbuf
    > + * @ctx: checkpoint context
    > + * @n: number of bytes to reserve
    > + *
    > + * Returns pointer to reserved space
    > + */
    > +void *cr_hbuf_get(struct cr_ctx *ctx, int n)
    > +{
    > + void *ptr;
    > +
    > + /*
    > + * Since requests depend on logic and static header sizes (not on
    > + * user data), space should always suffice, unless someone either
    > + * made a structure bigger or call path deeper than expected.
    > + */
    > + BUG_ON(ctx->hpos + n > CR_HBUF_TOTAL);
    > + ptr = ctx->hbuf + ctx->hpos;
    > + ctx->hpos += n;
    > + return ptr;
    > +}
    > +
    > +/**
    > + * cr_hbuf_put - unreserve space on the hbuf
    > + * @ctx: checkpoint context
    > + * @n: number of bytes to reserve
    > + */
    > +void cr_hbuf_put(struct cr_ctx *ctx, int n)
    > +{
    > + BUG_ON(ctx->hpos < n);
    > + ctx->hpos -= n;
    > +}
    > +


    \
     
     \ /
      Last update: 2008-12-16 22:59    [W:0.026 / U:34.100 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site