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
					
				
							
								
								
									
										13
									
								
								dump.c
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								dump.c
									
									
									
									
									
								
							@ -100,20 +100,13 @@ 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) {
 | 
			
		||||
    written_size = qemu_write_full(s->fd, buf, size);
 | 
			
		||||
    if (written_size != size) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        buf += writen_size;
 | 
			
		||||
        size -= writen_size;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user