Qcow2: Release refcount table clusters after growing the refcount table,
by Juergen Keil. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2586 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									cce1075c76
								
							
						
					
					
						commit
						23be50f1af
					
				| 
						 | 
				
			
			@ -1886,6 +1886,8 @@ static int grow_refcount_table(BlockDriverState *bs, int min_size)
 | 
			
		|||
    int64_t table_offset;
 | 
			
		||||
    uint64_t data64;
 | 
			
		||||
    uint32_t data32;
 | 
			
		||||
    int old_table_size;
 | 
			
		||||
    int64_t old_table_offset;
 | 
			
		||||
 | 
			
		||||
    if (min_size <= s->refcount_table_size)
 | 
			
		||||
        return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -1931,11 +1933,14 @@ static int grow_refcount_table(BlockDriverState *bs, int min_size)
 | 
			
		|||
                    &data32, sizeof(data32)) != sizeof(data32))
 | 
			
		||||
        goto fail;
 | 
			
		||||
    qemu_free(s->refcount_table);
 | 
			
		||||
    old_table_offset = s->refcount_table_offset;
 | 
			
		||||
    old_table_size = s->refcount_table_size;
 | 
			
		||||
    s->refcount_table = new_table;
 | 
			
		||||
    s->refcount_table_size = new_table_size;
 | 
			
		||||
    s->refcount_table_offset = table_offset;
 | 
			
		||||
 | 
			
		||||
    update_refcount(bs, table_offset, new_table_size2, 1);
 | 
			
		||||
    free_clusters(bs, old_table_offset, old_table_size * sizeof(uint64_t));
 | 
			
		||||
    return 0;
 | 
			
		||||
 fail:
 | 
			
		||||
    free_clusters(bs, table_offset, new_table_size2);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue