migration: check pre_save return in vmstate_save_state
Check the return value of pre_save state and fail vmstate_save_state if the pre_save failed. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Message-Id: <20170925112917.21340-3-dgilbert@redhat.com> Reviewed-by: Peter Xu <peterx@redhat.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
		
							parent
							
								
									44b1ff319c
								
							
						
					
					
						commit
						551dbd0846
					
				| @ -994,8 +994,8 @@ extern const VMStateInfo vmstate_info_qtailq; | ||||
| 
 | ||||
| int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd, | ||||
|                        void *opaque, int version_id); | ||||
| void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, | ||||
|                         void *opaque, QJSON *vmdesc); | ||||
| int vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, | ||||
|                        void *opaque, QJSON *vmdesc); | ||||
| 
 | ||||
| bool vmstate_save_needed(const VMStateDescription *vmsd, void *opaque); | ||||
| 
 | ||||
|  | ||||
| @ -40,6 +40,7 @@ savevm_state_iterate(void) "" | ||||
| savevm_state_cleanup(void) "" | ||||
| savevm_state_complete_precopy(void) "" | ||||
| vmstate_save(const char *idstr, const char *vmsd_name) "%s, %s" | ||||
| vmstate_save_state_pre_save_res(const char *name, int res) "%s/%d" | ||||
| vmstate_save_state_loop(const char *name, const char *field, int n_elems) "%s/%s[%d]" | ||||
| vmstate_save_state_top(const char *idstr) "%s" | ||||
| vmstate_subsection_save_loop(const char *name, const char *sub) "%s/%s" | ||||
|  | ||||
| @ -308,15 +308,21 @@ bool vmstate_save_needed(const VMStateDescription *vmsd, void *opaque) | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, | ||||
| int vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, | ||||
|                         void *opaque, QJSON *vmdesc) | ||||
| { | ||||
|     int ret = 0; | ||||
|     VMStateField *field = vmsd->fields; | ||||
| 
 | ||||
|     trace_vmstate_save_state_top(vmsd->name); | ||||
| 
 | ||||
|     if (vmsd->pre_save) { | ||||
|         vmsd->pre_save(opaque); | ||||
|         ret = vmsd->pre_save(opaque); | ||||
|         trace_vmstate_save_state_pre_save_res(vmsd->name, ret); | ||||
|         if (ret) { | ||||
|             error_report("pre-save failed: %s", vmsd->name); | ||||
|             return ret; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (vmdesc) { | ||||
| @ -381,6 +387,8 @@ void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd, | ||||
|     } | ||||
| 
 | ||||
|     vmstate_subsection_save(f, vmsd, opaque, vmdesc); | ||||
| 
 | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| static const VMStateDescription * | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dr. David Alan Gilbert
						Dr. David Alan Gilbert