qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 3/3] qcow2: Support for fixing refcount inconsis


From: Kevin Wolf
Subject: Re: [Qemu-devel] [PATCH 3/3] qcow2: Support for fixing refcount inconsistencies
Date: Fri, 25 May 2012 18:28:12 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20120430 Thunderbird/12.0.1

Am 25.05.2012 17:33, schrieb Stefan Hajnoczi:
> On Fri, May 11, 2012 at 5:48 PM, Kevin Wolf <address@hidden> 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

[Prev in Thread] Current Thread [Next in Thread]