cpus: Add return value for vm_stop()
If flushing the block devices fails, return an error. The VM is stopped anyway. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
		
							parent
							
								
									f0f0fdfeec
								
							
						
					
					
						commit
						5698346391
					
				
							
								
								
									
										20
									
								
								cpus.c
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								cpus.c
									
									
									
									
									
								
							| @ -434,17 +434,21 @@ bool cpu_is_stopped(CPUState *cpu) | ||||
|     return !runstate_is_running() || cpu->stopped; | ||||
| } | ||||
| 
 | ||||
| static void do_vm_stop(RunState state) | ||||
| static int do_vm_stop(RunState state) | ||||
| { | ||||
|     int ret = 0; | ||||
| 
 | ||||
|     if (runstate_is_running()) { | ||||
|         cpu_disable_ticks(); | ||||
|         pause_all_vcpus(); | ||||
|         runstate_set(state); | ||||
|         vm_state_notify(0, state); | ||||
|         bdrv_drain_all(); | ||||
|         bdrv_flush_all(); | ||||
|         ret = bdrv_flush_all(); | ||||
|         monitor_protocol_event(QEVENT_STOP, NULL); | ||||
|     } | ||||
| 
 | ||||
|     return ret; | ||||
| } | ||||
| 
 | ||||
| static bool cpu_can_run(CPUState *cpu) | ||||
| @ -1070,7 +1074,7 @@ void cpu_stop_current(void) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void vm_stop(RunState state) | ||||
| int vm_stop(RunState state) | ||||
| { | ||||
|     if (qemu_in_vcpu_thread()) { | ||||
|         qemu_system_vmstop_request(state); | ||||
| @ -1079,19 +1083,21 @@ void vm_stop(RunState state) | ||||
|          * vm_stop() has been requested. | ||||
|          */ | ||||
|         cpu_stop_current(); | ||||
|         return; | ||||
|         return 0; | ||||
|     } | ||||
|     do_vm_stop(state); | ||||
| 
 | ||||
|     return do_vm_stop(state); | ||||
| } | ||||
| 
 | ||||
| /* does a state transition even if the VM is already stopped,
 | ||||
|    current state is forgotten forever */ | ||||
| void vm_stop_force_state(RunState state) | ||||
| int vm_stop_force_state(RunState state) | ||||
| { | ||||
|     if (runstate_is_running()) { | ||||
|         vm_stop(state); | ||||
|         return vm_stop(state); | ||||
|     } else { | ||||
|         runstate_set(state); | ||||
|         return 0; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -35,8 +35,8 @@ void vm_state_notify(int running, RunState state); | ||||
| #define VMRESET_REPORT   true | ||||
| 
 | ||||
| void vm_start(void); | ||||
| void vm_stop(RunState state); | ||||
| void vm_stop_force_state(RunState state); | ||||
| int vm_stop(RunState state); | ||||
| int vm_stop_force_state(RunState state); | ||||
| 
 | ||||
| typedef enum WakeupReason { | ||||
|     QEMU_WAKEUP_REASON_OTHER = 0, | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| #include "qemu-common.h" | ||||
| #include "sysemu/sysemu.h" | ||||
| 
 | ||||
| void vm_stop(RunState state) | ||||
| int vm_stop(RunState state) | ||||
| { | ||||
|     abort(); | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Kevin Wolf
						Kevin Wolf