Revision 0b919fae block/qcow2-cluster.c

b/block/qcow2-cluster.c
1377 1377

  
1378 1378
    nb_clusters = size_to_clusters(s, end_offset - offset);
1379 1379

  
1380
    s->cache_discards = true;
1381

  
1380 1382
    /* Each L2 table is handled by its own loop iteration */
1381 1383
    while (nb_clusters > 0) {
1382 1384
        ret = discard_single_l2(bs, offset, nb_clusters);
1383 1385
        if (ret < 0) {
1384
            return ret;
1386
            goto fail;
1385 1387
        }
1386 1388

  
1387 1389
        nb_clusters -= ret;
1388 1390
        offset += (ret * s->cluster_size);
1389 1391
    }
1390 1392

  
1391
    return 0;
1393
    ret = 0;
1394
fail:
1395
    s->cache_discards = false;
1396
    qcow2_process_discards(bs, ret);
1397

  
1398
    return ret;
1392 1399
}
1393 1400

  
1394 1401
/*
......
1450 1457
    /* Each L2 table is handled by its own loop iteration */
1451 1458
    nb_clusters = size_to_clusters(s, nb_sectors << BDRV_SECTOR_BITS);
1452 1459

  
1460
    s->cache_discards = true;
1461

  
1453 1462
    while (nb_clusters > 0) {
1454 1463
        ret = zero_single_l2(bs, offset, nb_clusters);
1455 1464
        if (ret < 0) {
1456
            return ret;
1465
            goto fail;
1457 1466
        }
1458 1467

  
1459 1468
        nb_clusters -= ret;
1460 1469
        offset += (ret * s->cluster_size);
1461 1470
    }
1462 1471

  
1463
    return 0;
1472
    ret = 0;
1473
fail:
1474
    s->cache_discards = false;
1475
    qcow2_process_discards(bs, ret);
1476

  
1477
    return ret;
1464 1478
}

Also available in: Unified diff