savevm: teach qemu_fill_buffer to do partial refills
We will need on next patch to be able to lookahead on next patch v2: rename "used" to "pending" (Alex Williams) Signed-off-by: Juan Quintela<quintela@redhat.com> Reviewed-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									cfce6d8934
								
							
						
					
					
						commit
						0046c45bc1
					
				
							
								
								
									
										14
									
								
								savevm.c
								
								
								
								
							
							
						
						
									
										14
									
								
								savevm.c
								
								
								
								
							| 
						 | 
				
			
			@ -455,6 +455,7 @@ void qemu_fflush(QEMUFile *f)
 | 
			
		|||
static void qemu_fill_buffer(QEMUFile *f)
 | 
			
		||||
{
 | 
			
		||||
    int len;
 | 
			
		||||
    int pending;
 | 
			
		||||
 | 
			
		||||
    if (!f->get_buffer)
 | 
			
		||||
        return;
 | 
			
		||||
| 
						 | 
				
			
			@ -462,10 +463,17 @@ static void qemu_fill_buffer(QEMUFile *f)
 | 
			
		|||
    if (f->is_write)
 | 
			
		||||
        abort();
 | 
			
		||||
 | 
			
		||||
    len = f->get_buffer(f->opaque, f->buf, f->buf_offset, IO_BUF_SIZE);
 | 
			
		||||
    if (len > 0) {
 | 
			
		||||
    pending = f->buf_size - f->buf_index;
 | 
			
		||||
    if (pending > 0) {
 | 
			
		||||
        memmove(f->buf, f->buf + f->buf_index, pending);
 | 
			
		||||
    }
 | 
			
		||||
    f->buf_index = 0;
 | 
			
		||||
        f->buf_size = len;
 | 
			
		||||
    f->buf_size = pending;
 | 
			
		||||
 | 
			
		||||
    len = f->get_buffer(f->opaque, f->buf + pending, f->buf_offset,
 | 
			
		||||
                        IO_BUF_SIZE - pending);
 | 
			
		||||
    if (len > 0) {
 | 
			
		||||
        f->buf_size += len;
 | 
			
		||||
        f->buf_offset += len;
 | 
			
		||||
    } else if (len != -EAGAIN)
 | 
			
		||||
        f->has_error = 1;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue