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;
+ elseset_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>