|   | 
      | 
  
  
      | 
      | 
  
 
     | 
    | 
  
  
     | 
    | 
  
  
    |   | 
      | 
  
  
    | 
         
xen-api
[Xen-API] [PATCH] Prevent the ballooning daemon from setting a bad	initi
 
# HG changeset patch
# User David Scott <dave.scott@xxxxxxxxxxxxx>
# Date 1259589197 0
# Node ID 9e26e414cead7308a9d746f3028a69ae8cf5dc94
# Parent  87733f43712b5e3653d0651f10e34b9634f79c27
CA-35406: refrain from setting a domain's target unless we think it 
'can_balloon' ie it has exposed feature-balloon.
This fixes the problem generated by the following interleaving:
xapi                                squeezed
--------------------------------------------------------------------------
reserve required memory + overhead
create domain
invoke domain builder
                                    observes domain with no feature-balloon
                                    sets maxmem = requred memory + overhead
                                    sets target = maxmem [1]
unpauses domain
                                    observes feature-balloon
                                    sets memory-offset = -overhead (!)
                                    declares domain uncooperative
[1] 519:f509339c8f74 avoid setting target > maxmem
diff -r 87733f43712b -r 9e26e414cead ocaml/xenops/squeeze_xen.ml
--- a/ocaml/xenops/squeeze_xen.ml       Mon Nov 30 13:53:14 2009 +0000
+++ b/ocaml/xenops/squeeze_xen.ml       Mon Nov 30 13:53:17 2009 +0000
@@ -371,11 +371,18 @@
                then failwith "Proposed target is negative (domid %d): %Ld" 
domid target_kib;
                let cnx = (xc, xs) in
                let memory_max_kib = Domain.get_maxmem cnx domid in
+               (* We only set the target of a domain if it has exposed 
feature-balloon: otherwise
+                  we can screw up the memory-offset calculations for 
partially-built domains. *)
+               let can_balloon = Domain.get_feature_balloon cnx domid in
                if target_kib > memory_max_kib then begin
                  Domain.set_maxmem_noexn cnx domid target_kib;
-                 Domain.set_target_noexn cnx domid target_kib;
+                 if can_balloon
+                 then Domain.set_target_noexn cnx domid target_kib
+                 else debug "Not setting target for domid: %d since no 
feature-balloon. Setting maxmem to %Ld" domid target_kib;
                end else begin
-                 Domain.set_target_noexn cnx domid target_kib;
+                 if can_balloon
+                 then Domain.set_target_noexn cnx domid target_kib
+                 else debug "Not setting target for domid: %d since no 
feature-balloon. Setting maxmem to %Ld" domid target_kib;
                  Domain.set_maxmem_noexn cnx domid target_kib;
                end
        with e ->
1 file changed, 9 insertions(+), 2 deletions(-)
ocaml/xenops/squeeze_xen.ml |   11 +++++++++--
 
xen-api.hg.patch 
Description: Text Data 
_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api
 
 |   
 
| <Prev in Thread] | 
Current Thread | 
[Next in Thread>
 |  
- [Xen-API] [PATCH] Prevent the ballooning daemon from setting a bad	initial balloon target,
David Scott <=
 
 
 |  
  
 | 
    | 
  
  
    |   | 
    |