• Konrad Rzeszutek Wilk's avatar
    xen/xenbus: Avoid synchronous wait on XenBus stalling shutdown/restart. · 027bd7e8
    Konrad Rzeszutek Wilk authored
    The 'read_reply' works with 'process_msg' to read of a reply in XenBus.
    'process_msg' is running from within the 'xenbus' thread. Whenever
    a message shows up in XenBus it is put on a xs_state.reply_list list
    and 'read_reply' picks it up.
    
    The problem is if the backend domain or the xenstored process is killed.
    In which case 'xenbus' is still awaiting - and 'read_reply' if called -
    stuck forever waiting for the reply_list to have some contents.
    
    This is normally not a problem - as the backend domain can come back
    or the xenstored process can be restarted. However if the domain
    is in process of being powered off/restarted/halted - there is no
    point of waiting on it coming back - as we are effectively being
    terminated and should not impede the progress.
    
    This patch solves this problem by checking whether the guest is the
    right domain. If it is an initial domain and hurtling towards death -
    there is no point of continuing the wait. All other type of guests
    continue with their behavior (as Xenstore is expected to still be
    running in another domain).
    
    Fixes-Bug: http://bugs.xenproject.org/xen/bug/8Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Reviewed-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
    Reviewed-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
    Signed-off-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
    027bd7e8
xenbus_xs.c 22 KB