Am 25.05.2012 17:33, schrieb Stefan Hajnoczi:
> On Fri, May 11, 2012 at 5:48 PM, Kevin Wolf <kw...@redhat.com> wrote:
>> @@ -1205,9 +1206,31 @@ int qcow2_check_refcounts(BlockDriverState *bs, 
>> BdrvCheckResult *res)
>>
>>         refcount2 = refcount_table[i];
>>         if (refcount1 != refcount2) {
>> +
>> +            /* Check if we're allowed to fix the mismatch */
>> +            int *num_fixed = NULL;
>> +            if (refcount1 > refcount2 && (fix & BDRV_FIX_LEAKS)) {
>> +                num_fixed = &res->leaks_fixed;
>> +            } else if (refcount1 < refcount2 && (fix & BDRV_FIX_ERRORS)) {
>> +                num_fixed = &res->corruptions_fixed;
>> +            }
>> +
>>             fprintf(stderr, "%s cluster %d refcount=%d reference=%d\n",
>> -                   refcount1 < refcount2 ? "ERROR" : "Leaked",
>> +                   num_fixed != NULL     ? "Repairing" :
>> +                   refcount1 < refcount2 ? "ERROR" :
>> +                                           "Leaked",
>>                    i, refcount1, refcount2);
>> +
>> +            if (num_fixed) {
>> +                ret = update_refcount(bs, i << s->cluster_bits, 1,
>> +                                      refcount2 - refcount1);
> 
> It would be nicer to use int64_t for i.  I haven't checked but it
> makes me nervous to shift ints here.

Thanks, good catch. Fixed in block-next.

Kevin

Reply via email to