mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
tmem: Unify XEN_SYSCTL_TMEM_OP_[[SAVE_[BEGIN|END]|RESTORE_BEGIN]
return values. For success they used to be 1 ([SAVE,RESTORE]_BEGIN), 0 if guest did not have any tmem (but only for SAVE_BEGIN), and -1 for any type of failure. And SAVE_END (which you would think would mirror SAVE_BEGIN) had 0 for success and -1 if guest did not any tmem enabled for it. This is confusing. Now the code will return 0 if the operation was success. Various XEN_EXX values are returned if tmem is not enabled or the operation could not performed. The xc_tmem.c code only needs one place to check - where we use SAVE_BEGIN. The place where RESTORE_BEGIN is used will have errno with the proper error value and return will be -1, so will still fail properly. Acked-by: Andrew Cooper <andrew.cooper3@citrix.com> Acked-by: Wei Liu <wei.liu2@citrix.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
1 parent
c4a398701e
commit
4ca5e0103d
2 files changed
+20
-11
No files matched your search
+11
-3
@@ -214,15 +214,23 @@ int xc_tmem_save(xc_interface *xch,
|
|||||||
int dom, int io_fd, int live, int field_marker)
|
int dom, int io_fd, int live, int field_marker)
|
||||||
{
|
{
|
||||||
int marker = field_marker;
|
int marker = field_marker;
|
||||||
int i, j;
|
int i, j, rc;
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
uint32_t minusone = -1;
|
uint32_t minusone = -1;
|
||||||
uint32_t pool_id;
|
uint32_t pool_id;
|
||||||
struct tmem_handle *h;
|
struct tmem_handle *h;
|
||||||
xen_tmem_client_t info;
|
xen_tmem_client_t info;
|
||||||
|
|
||||||
if ( xc_tmem_control(xch,0,XEN_SYSCTL_TMEM_OP_SAVE_BEGIN,dom,live,0,NULL) <= 0 )
|
rc = xc_tmem_control(xch, 0, XEN_SYSCTL_TMEM_OP_SAVE_BEGIN,
|
||||||
return 0;
|
dom, live, 0, NULL);
|
||||||
|
if ( rc )
|
||||||
|
{
|
||||||
|
/* Nothing to save - no tmem enabled. */
|
||||||
|
if ( errno == ENOENT )
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
if ( write_exact(io_fd, &marker, sizeof(marker)) )
|
if ( write_exact(io_fd, &marker, sizeof(marker)) )
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
+9
-8
@@ -1656,30 +1656,31 @@ static int tmemc_save_subop(int cli_id, uint32_t pool_id,
|
|||||||
struct client *client = tmem_client_from_cli_id(cli_id);
|
struct client *client = tmem_client_from_cli_id(cli_id);
|
||||||
uint32_t p;
|
uint32_t p;
|
||||||
struct tmem_page_descriptor *pgp, *pgp2;
|
struct tmem_page_descriptor *pgp, *pgp2;
|
||||||
int rc = -1;
|
int rc = -ENOENT;
|
||||||
|
|
||||||
switch(subop)
|
switch(subop)
|
||||||
{
|
{
|
||||||
case XEN_SYSCTL_TMEM_OP_SAVE_BEGIN:
|
case XEN_SYSCTL_TMEM_OP_SAVE_BEGIN:
|
||||||
if ( client == NULL )
|
if ( client == NULL )
|
||||||
return 0;
|
break;
|
||||||
for (p = 0; p < MAX_POOLS_PER_DOMAIN; p++)
|
for (p = 0; p < MAX_POOLS_PER_DOMAIN; p++)
|
||||||
if ( client->pools[p] != NULL )
|
if ( client->pools[p] != NULL )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if ( p == MAX_POOLS_PER_DOMAIN )
|
if ( p == MAX_POOLS_PER_DOMAIN )
|
||||||
{
|
|
||||||
rc = 0;
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
client->was_frozen = client->info.flags.u.frozen;
|
client->was_frozen = client->info.flags.u.frozen;
|
||||||
client->info.flags.u.frozen = 1;
|
client->info.flags.u.frozen = 1;
|
||||||
if ( arg1 != 0 )
|
if ( arg1 != 0 )
|
||||||
client->info.flags.u.migrating = 1;
|
client->info.flags.u.migrating = 1;
|
||||||
rc = 1;
|
rc = 0;
|
||||||
break;
|
break;
|
||||||
case XEN_SYSCTL_TMEM_OP_RESTORE_BEGIN:
|
case XEN_SYSCTL_TMEM_OP_RESTORE_BEGIN:
|
||||||
if ( client == NULL && (client = client_create(cli_id)) != NULL )
|
if ( client == NULL )
|
||||||
return 1;
|
rc = client_create(cli_id) ? 0 : -ENOMEM;
|
||||||
|
else
|
||||||
|
rc = -EEXIST;
|
||||||
break;
|
break;
|
||||||
case XEN_SYSCTL_TMEM_OP_SAVE_END:
|
case XEN_SYSCTL_TMEM_OP_SAVE_END:
|
||||||
if ( client == NULL )
|
if ( client == NULL )
|
||||||
|
|||||||