Re: [RFC v11][PATCH 03/13] General infrastructure for checkpoint restart
From: Mike Waychison <hidden>
Date: 2008-12-16 21:56:22
Also in:
linux-mm, lkml
Oren Laadan wrote:
quoted hunk ↗ jump to hunk
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;
+}
+-- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>