Thread (37 messages) flat view 37 messages, 6 authors, 2008-12-18

Re: [RFC v11][PATCH 03/13] General infrastructure for checkpoint restart

From: Mike Waychison <hidden>
Date: 2008-12-16 19:12:30
Also in: linux-mm, lkml

Oren Laadan wrote:
+/*
+ * Helpers to write(read) from(to) kernel space to(from) the checkpoint
+ * image file descriptor (similar to how a core-dump is performed).
+ *
+ *   cr_kwrite() - write a kernel-space buffer to the checkpoint image
+ *   cr_kread() - read from the checkpoint image to a kernel-space buffer
+ */
+
+int cr_kwrite(struct cr_ctx *ctx, void *addr, int count)
+{
+	struct file *file = ctx->file;
+	mm_segment_t fs;
+	ssize_t nwrite;
+	int nleft;
+
+	fs = get_fs();
+	set_fs(KERNEL_DS);
+	for (nleft = count; nleft; nleft -= nwrite) {
+		nwrite = file->f_op->write(file, addr, nleft, &file->f_pos);
+		if (nwrite < 0) {
+			if (nwrite == -EAGAIN)
+				nwrite = 0;
+			else
set_fs(fs) here
+				return nwrite;
+		}
+		addr += nwrite;
+	}
+	set_fs(fs);
+	ctx->total += count;
+	return 0;
+}
+
+int cr_kread(struct cr_ctx *ctx, void *addr, int count)
+{
+	struct file *file = ctx->file;
+	mm_segment_t fs;
+	ssize_t nread;
+	int nleft;
+
+	fs = get_fs();
+	set_fs(KERNEL_DS);
+	for (nleft = count; nleft; nleft -= nread) {
+		nread = file->f_op->read(file, addr, nleft, &file->f_pos);
+		if (nread <= 0) {
+			if (nread == -EAGAIN) {
+				nread = 0;
+				continue;
+			} else if (nread == 0)
+				nread = -EPIPE;		/* unexecpted EOF */
set_fs(fs) here as well
+			return nread;
+		}
+		addr += nread;
+	}
+	set_fs(fs);
+	ctx->total += count;
+	return 0;
+}
+
--
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>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help