Messages in this thread | | | Date | Tue, 16 Dec 2008 11:04:40 -0800 | From | Mike Waychison <> | Subject | Re: [RFC v11][PATCH 03/13] General infrastructure for checkpoint restart |
| |
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; > +} > +
| |