~pmdj/ubuntu/trusty/qemu/2.9+applesmc+fadtv3

« back to all changes in this revision

Viewing changes to block/vhdx.c

  • Committer: Phil Dennis-Jordan
  • Date: 2017-07-21 08:03:43 UTC
  • mfrom: (1.1.1)
  • Revision ID: phil@philjordan.eu-20170721080343-2yr2vdj7713czahv
New upstream release 2.9.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
898
898
    uint64_t signature;
899
899
    Error *local_err = NULL;
900
900
 
 
901
    bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
 
902
                               false, errp);
 
903
    if (!bs->file) {
 
904
        return -EINVAL;
 
905
    }
 
906
 
901
907
    s->bat = NULL;
902
908
    s->first_visible_write = true;
903
909
 
991
997
        }
992
998
    }
993
999
 
994
 
    if (flags & BDRV_O_RDWR) {
995
 
        ret = vhdx_update_headers(bs, s, false, NULL);
996
 
        if (ret < 0) {
997
 
            goto fail;
998
 
        }
999
 
    }
1000
 
 
1001
 
    /* TODO: differencing files */
1002
 
 
1003
1000
    /* Disable migration when VHDX images are used */
1004
1001
    error_setg(&s->migration_blocker, "The vhdx format used by node '%s' "
1005
1002
               "does not support live migration",
1006
1003
               bdrv_get_device_or_node_name(bs));
1007
 
    migrate_add_blocker(s->migration_blocker);
 
1004
    ret = migrate_add_blocker(s->migration_blocker, &local_err);
 
1005
    if (local_err) {
 
1006
        error_propagate(errp, local_err);
 
1007
        error_free(s->migration_blocker);
 
1008
        goto fail;
 
1009
    }
 
1010
 
 
1011
    if (flags & BDRV_O_RDWR) {
 
1012
        ret = vhdx_update_headers(bs, s, false, NULL);
 
1013
        if (ret < 0) {
 
1014
            goto fail;
 
1015
        }
 
1016
    }
 
1017
 
 
1018
    /* TODO: differencing files */
1008
1019
 
1009
1020
    return 0;
1010
1021
fail:
1160
1171
    /* per the spec, the address for a block is in units of 1MB */
1161
1172
    *new_offset = ROUND_UP(*new_offset, 1024 * 1024);
1162
1173
 
1163
 
    return bdrv_truncate(bs->file->bs, *new_offset + s->block_size);
 
1174
    return bdrv_truncate(bs->file, *new_offset + s->block_size);
1164
1175
}
1165
1176
 
1166
1177
/*
1848
1859
    }
1849
1860
 
1850
1861
    blk = blk_new_open(filename, NULL, NULL,
1851
 
                       BDRV_O_RDWR | BDRV_O_PROTOCOL, &local_err);
 
1862
                       BDRV_O_RDWR | BDRV_O_RESIZE | BDRV_O_PROTOCOL,
 
1863
                       &local_err);
1852
1864
    if (blk == NULL) {
1853
1865
        error_propagate(errp, local_err);
1854
1866
        ret = -EIO;
1972
1984
    .bdrv_open              = vhdx_open,
1973
1985
    .bdrv_close             = vhdx_close,
1974
1986
    .bdrv_reopen_prepare    = vhdx_reopen_prepare,
 
1987
    .bdrv_child_perm        = bdrv_format_default_perms,
1975
1988
    .bdrv_co_readv          = vhdx_co_readv,
1976
1989
    .bdrv_co_writev         = vhdx_co_writev,
1977
1990
    .bdrv_create            = vhdx_create,