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

_______________________________________________
Containers mailing list
contain...@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
Devel@openvz.org
https://openvz.org/mailman/listinfo/devel

Reply via email to