mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-31 14:25:49 +00:00
bfd: Check images got flushed at the end
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
13
bfd.c
13
bfd.c
@@ -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
|
||||
|
Reference in New Issue
Block a user