Commit 1ef5ca82 authored by Pavel Emelyanov's avatar Pavel Emelyanov

bfd: Check images got flushed at the end

Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 7688fbc1
......@@ -97,6 +97,12 @@ int bfdopen(struct bfd *f)
}
static int bflush(struct bfd *bfd);
static bool flush_failed = false;
int bfd_flush_images(void)
{
return flush_failed ? -1 : 0;
}
void bclose(struct bfd *f)
{
......@@ -107,15 +113,18 @@ void bclose(struct bfd *f)
* becase we read _all_ data from them and the
* b->sz would be 0 by the time we close them.
*/
if (bflush(f) < 0)
if (bflush(f) < 0) {
/*
* FIXME -- propagate error up. It's
* This is to propagate error up. It's
* hardly possible by returning and
* checking it, but setting a static
* flag, failing further bfdopen-s and
* checking one at the end would work.
*/
flush_failed = true;
pr_perror("Error flushing image");
}
buf_put(&f->b);
}
close(f->fd);
......
......@@ -1766,6 +1766,9 @@ err:
if (disconnect_from_page_server())
ret = -1;
if (bfd_flush_images())
ret = -1;
if (ret)
pr_err("Pre-dumping FAILED.\n");
else {
......@@ -1891,6 +1894,9 @@ err:
close_cr_imgset(&glob_imgset);
if (bfd_flush_images())
ret = -1;
cr_plugin_fini(CR_PLUGIN_STAGE__DUMP, ret);
if (!ret) {
......
......@@ -33,4 +33,5 @@ int bwrite(struct bfd *f, const void *buf, int sz);
struct iovec;
int bwritev(struct bfd *f, const struct iovec *iov, int cnt);
int bread(struct bfd *f, void *buf, int sz);
int bfd_flush_images(void);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment