qmp: dump-guest-memory: don't spin if non-blocking fd would block
fd_write_vmcore() will indefinitely spin for a non-blocking file-descriptor that would block. However, if the fd is non-blocking, how does it make sense to spin? Change this behavior to return an error instead. Note that this can only happen with an fd provided by a management application. The fd opened internally by dump-guest-memory is blocking. While there, also fix 'writen_size' variable name. Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
		
							parent
							
								
									d691180e41
								
							
						
					
					
						commit
						2f61652d66
					
				
							
								
								
									
										15
									
								
								dump.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								dump.c
									
									
									
									
									
								
							| @ -100,18 +100,11 @@ static void dump_error(DumpState *s, const char *reason) | ||||
| static int fd_write_vmcore(void *buf, size_t size, void *opaque) | ||||
| { | ||||
|     DumpState *s = opaque; | ||||
|     int fd = s->fd; | ||||
|     size_t writen_size; | ||||
|     size_t written_size; | ||||
| 
 | ||||
|     /* The fd may be passed from user, and it can be non-blocked */ | ||||
|     while (size) { | ||||
|         writen_size = qemu_write_full(fd, buf, size); | ||||
|         if (writen_size != size && errno != EAGAIN) { | ||||
|             return -1; | ||||
|         } | ||||
| 
 | ||||
|         buf += writen_size; | ||||
|         size -= writen_size; | ||||
|     written_size = qemu_write_full(s->fd, buf, size); | ||||
|     if (written_size != size) { | ||||
|         return -1; | ||||
|     } | ||||
| 
 | ||||
|     return 0; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Luiz Capitulino
						Luiz Capitulino