On Fri, Oct 14, 2011 at 12:47 AM, <rshriram@xxxxxxxxx> wrote:
> diff -r 4b0907c6a08c -r 47fdd52af616 tools/libxc/xc_domain_save.c
> --- a/tools/libxc/xc_domain_save.c Tue Oct 11 12:02:58 2011 +0100
> +++ b/tools/libxc/xc_domain_save.c Thu Oct 13 15:36:53 2011 -0700
> @@ -218,6 +218,56 @@
> return noncached_write(xch, ob, fd, buf, len);
> }
>
> +static int write_compressed(xc_interface *xch, comp_ctx *compress_ctx,
> + int dobuf, struct outbuf* ob, int fd)
> +{
> + int rc = 0;
> + int header = sizeof(int) + sizeof(unsigned long);
> + int marker = XC_SAVE_ID_COMPRESSED_DATA;
> + unsigned long compbuf_len = 0;
> +
> + do
> + {
> + /* check for available space (atleast 8k) */
> + if ((ob->pos + header + XC_PAGE_SIZE * 2) > ob->size)
> + {
> + if (outbuf_flush(xch, ob, fd) < 0)
> + {
> + ERROR("Error when flushing outbuf intermediate");
> + return -1;
> + }
> + }
> +
> + rc = xc_compression_compress_pages(xch, compress_ctx,
> + ob->buf + ob->pos + header,
> + ob->size - ob->pos - header,
> + &compbuf_len);
> + if (!rc)
> + return 0;
> +
> + if (outbuf_hardwrite(xch, ob, fd, &marker, sizeof(marker)) < 0)
> + {
> + PERROR("Error when writing marker (errno %d)", errno);
> + return -1;
> + }
> +
> + if (outbuf_hardwrite(xch, ob, fd, &compbuf_len, sizeof(compbuf_len))
> < 0)
> + {
> + PERROR("Error when writing compbuf_len (errno %d)", errno);
> + return -1;
> + }
> +
> + ob->pos += (size_t) compbuf_len;
> + if (!dobuf && outbuf_flush(xch, ob, fd) < 0)
> + {
> + ERROR("Error when writing compressed chunk");
> + return -1;
> + }
> + } while (rc != 0);
> +
> + return 0;
> +}
> +
> struct time_stats {
> struct timeval wall;
> long long d0_cpu, d1_cpu;
> @@ -815,11 +865,19 @@
>
> unsigned long mfn;
>
> - struct outbuf ob;
> + struct outbuf ob_pagebuf, ob_tailbuf, *ob = NULL;
I think you need a comment here explaining what each of these are for.
Other than that, looks fine.
-George
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|