Am 19.01.2010 19:51, schrieb Christoph Hellwig:
> On Mon, Jan 18, 2010 at 01:11:33PM +0100, Kevin Wolf wrote:
>> If update_refcount fails, try to undo any changes made so far to avoid
>> inconsistencies in the image file.
>>
>> Signed-off-by: Kevin Wolf <kw...@redhat.com>
>> ---
>>  block/qcow2-refcount.c |   32 +++++++++++++++++++++++++-------
>>  1 files changed, 25 insertions(+), 7 deletions(-)
>>
> 
>> +    /*
>> +     * Try do undo any updates if an error is returned (This may succeed in
>> +     * some cases like ENOSPC for allocating a new refcount block)
>> +     */
>> +    if (ret < 0) {
>> +        int dummy;
>> +        dummy = update_refcount(bs, offset, cluster_offset - offset, 
>> -addend);
> 
> So we recursively call into update_refcount here.  What happens an error
> causes all updates to fail?

We're only reverting writes that have succeeded. If reverting fails,
there are no successful writes and update_refcount will be called with a
length of 0 (which never fails). In the worst case we're only reverting
one cluster less with each recursive call - however, I don't think
that's a realistic scenario.

Kevin


Reply via email to