mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
xend: Rename device backend value when xm save/migrate
The Xend has a problem that it often fails to restore/migrate a PV domain whose device backends are partly a driver domain. Because a checkpoint of the PV domain has device backend value as domain id, you can restore/migrate the PV domain only when a driver domain is the same id as device backend value in the checkpoint. I attached a patch to fix it by renaming device backend value in a checkpoint from domain id to domain name when xm save/migrate. This patch doesn't rename device backend value if the value is 0, which is Domain-0, so the checkpoint format is compatible if you use only Domain-0 as device backend. Signed-off-by: Rikiya Ayukawa <ayukawa.rikiya@jp.fujitsu.com>
This commit is contained in:
1 parent
b1b6362f10
commit
22d91502ea
1 file changed
+14
@@ -66,6 +66,8 @@ def insert_after(list, pred, value):
|
||||
|
||||
|
||||
def save(fd, dominfo, network, live, dst, checkpoint=False, node=-1):
|
||||
from xen.xend import XendDomain
|
||||
|
||||
try:
|
||||
if not os.path.isdir("/var/lib/xen"):
|
||||
os.makedirs("/var/lib/xen")
|
||||
@@ -80,6 +82,18 @@ def save(fd, dominfo, network, live, dst, checkpoint=False, node=-1):
|
||||
if node > -1:
|
||||
insert_after(sxprep,'vcpus',['node', str(node)])
|
||||
|
||||
for device_sxp in sxp.children(sxprep, 'device'):
|
||||
backend = sxp.child(device_sxp[1], 'backend')
|
||||
if backend == None:
|
||||
continue
|
||||
bkdominfo = XendDomain.instance().domain_lookup_nr(backend[1])
|
||||
if bkdominfo == None:
|
||||
raise XendError("Could not find backend: %s" % backend[1])
|
||||
if bkdominfo.getDomid() == XendDomain.DOM0_ID:
|
||||
# Skip for compatibility of checkpoint data format
|
||||
continue
|
||||
backend[1] = bkdominfo.getName()
|
||||
|
||||
config = sxp.to_string(sxprep)
|
||||
|
||||
domain_name = dominfo.getName()
|
||||
|
||||