mirror of
https://github.com/xen-project/xen.git
synced 2026-10-30 03:00:05 +01:00
libxl: Reset toolstack_save file position in libxl
toolstack_save data is written to a temporary file in libxl and read back in libxl-save-helper. The file position must be reset prior to reading the file, which is done in libxl-save-helper with lseek. lseek is unsupported for pipes and sockets, so a wrapper passing such an fd to libxl-save-helper fails the lseek. Moving the lseek to libxl avoids the error, allowing the save to continue. Signed-off-by: Jason Andryuk <andryuk@aero.org> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
This commit is contained in:
1 parent
119d8a42d3
commit
b327a3f421
2 files changed
+6
-3
No files matched your search
@@ -105,6 +105,10 @@ void libxl__xc_domain_save(libxl__egc *egc, libxl__domain_suspend_state *dss,
|
||||
toolstack_data_buf, toolstack_data_len,
|
||||
"toolstack data tmpfile", 0);
|
||||
if (r) { rc = ERROR_FAIL; goto out; }
|
||||
|
||||
/* file position must be reset before passing to libxl-save-helper. */
|
||||
r = lseek(toolstack_data_fd, 0, SEEK_SET);
|
||||
if (r) { rc = ERROR_FAIL; goto out; }
|
||||
}
|
||||
|
||||
const unsigned long argnums[] = {
|
||||
|
||||
@@ -163,10 +163,9 @@ static uint32_t toolstack_save_len;
|
||||
static int toolstack_save_cb(uint32_t domid, uint8_t **buf,
|
||||
uint32_t *len, void *data)
|
||||
{
|
||||
assert(toolstack_save_fd > 0);
|
||||
int r;
|
||||
|
||||
int r = lseek(toolstack_save_fd, 0, SEEK_SET);
|
||||
if (r) fail(errno,"rewind toolstack data tmpfile");
|
||||
assert(toolstack_save_fd > 0);
|
||||
|
||||
*buf = xmalloc(toolstack_save_len);
|
||||
r = read_exactly(toolstack_save_fd, *buf, toolstack_save_len);
|
||||
|
||||