qed.c (004915a96a7a40e942ac85e6d22518cbcd283506) qed.c (e2dd273754eb9a47c33660b4e14074e8e96ada4d)
1/*
2 * QEMU Enhanced Disk Format
3 *
4 * Copyright IBM, Corp. 2010
5 *
6 * Authors:
7 * Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
8 * Anthony Liguori <aliguori@us.ibm.com>

--- 1484 unchanged lines hidden (view full) ---

1493 BDRVQEDState *s = bs->opaque;
1494
1495 memset(bdi, 0, sizeof(*bdi));
1496 bdi->cluster_size = s->header.cluster_size;
1497 bdi->is_dirty = s->header.features & QED_F_NEED_CHECK;
1498 return 0;
1499}
1500
1/*
2 * QEMU Enhanced Disk Format
3 *
4 * Copyright IBM, Corp. 2010
5 *
6 * Authors:
7 * Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
8 * Anthony Liguori <aliguori@us.ibm.com>

--- 1484 unchanged lines hidden (view full) ---

1493 BDRVQEDState *s = bs->opaque;
1494
1495 memset(bdi, 0, sizeof(*bdi));
1496 bdi->cluster_size = s->header.cluster_size;
1497 bdi->is_dirty = s->header.features & QED_F_NEED_CHECK;
1498 return 0;
1499}
1500
1501static int bdrv_qed_change_backing_file(BlockDriverState *bs,
1502 const char *backing_file,
1503 const char *backing_fmt)
1501static int coroutine_fn GRAPH_RDLOCK
1502bdrv_qed_co_change_backing_file(BlockDriverState *bs, const char *backing_file,
1503 const char *backing_fmt)
1504{
1505 BDRVQEDState *s = bs->opaque;
1506 QEDHeader new_header, le_header;
1507 void *buffer;
1508 size_t buffer_len, backing_file_len;
1509 int ret;
1510
1511 /* Refuse to set backing filename if unknown compat feature bits are

--- 45 unchanged lines hidden (view full) ---

1557 buffer_len = sizeof(le_header);
1558
1559 if (backing_file) {
1560 memcpy(buffer + buffer_len, backing_file, backing_file_len);
1561 buffer_len += backing_file_len;
1562 }
1563
1564 /* Write new header */
1504{
1505 BDRVQEDState *s = bs->opaque;
1506 QEDHeader new_header, le_header;
1507 void *buffer;
1508 size_t buffer_len, backing_file_len;
1509 int ret;
1510
1511 /* Refuse to set backing filename if unknown compat feature bits are

--- 45 unchanged lines hidden (view full) ---

1557 buffer_len = sizeof(le_header);
1558
1559 if (backing_file) {
1560 memcpy(buffer + buffer_len, backing_file, backing_file_len);
1561 buffer_len += backing_file_len;
1562 }
1563
1564 /* Write new header */
1565 ret = bdrv_pwrite_sync(bs->file, 0, buffer_len, buffer, 0);
1565 ret = bdrv_co_pwrite_sync(bs->file, 0, buffer_len, buffer, 0);
1566 g_free(buffer);
1567 if (ret == 0) {
1568 memcpy(&s->header, &new_header, sizeof(new_header));
1569 }
1570 return ret;
1571}
1572
1573static void coroutine_fn GRAPH_RDLOCK

--- 57 unchanged lines hidden (view full) ---

1631 .type = QEMU_OPT_SIZE,
1632 .help = "L1/L2 table size (in clusters)"
1633 },
1634 { /* end of list */ }
1635 }
1636};
1637
1638static BlockDriver bdrv_qed = {
1566 g_free(buffer);
1567 if (ret == 0) {
1568 memcpy(&s->header, &new_header, sizeof(new_header));
1569 }
1570 return ret;
1571}
1572
1573static void coroutine_fn GRAPH_RDLOCK

--- 57 unchanged lines hidden (view full) ---

1631 .type = QEMU_OPT_SIZE,
1632 .help = "L1/L2 table size (in clusters)"
1633 },
1634 { /* end of list */ }
1635 }
1636};
1637
1638static BlockDriver bdrv_qed = {
1639 .format_name = "qed",
1640 .instance_size = sizeof(BDRVQEDState),
1641 .create_opts = &qed_create_opts,
1642 .is_format = true,
1643 .supports_backing = true,
1639 .format_name = "qed",
1640 .instance_size = sizeof(BDRVQEDState),
1641 .create_opts = &qed_create_opts,
1642 .is_format = true,
1643 .supports_backing = true,
1644
1644
1645 .bdrv_probe = bdrv_qed_probe,
1646 .bdrv_open = bdrv_qed_open,
1647 .bdrv_close = bdrv_qed_close,
1648 .bdrv_reopen_prepare = bdrv_qed_reopen_prepare,
1649 .bdrv_child_perm = bdrv_default_perms,
1650 .bdrv_co_create = bdrv_qed_co_create,
1651 .bdrv_co_create_opts = bdrv_qed_co_create_opts,
1652 .bdrv_has_zero_init = bdrv_has_zero_init_1,
1653 .bdrv_co_block_status = bdrv_qed_co_block_status,
1654 .bdrv_co_readv = bdrv_qed_co_readv,
1655 .bdrv_co_writev = bdrv_qed_co_writev,
1656 .bdrv_co_pwrite_zeroes = bdrv_qed_co_pwrite_zeroes,
1657 .bdrv_co_truncate = bdrv_qed_co_truncate,
1658 .bdrv_co_getlength = bdrv_qed_co_getlength,
1659 .bdrv_co_get_info = bdrv_qed_co_get_info,
1660 .bdrv_refresh_limits = bdrv_qed_refresh_limits,
1661 .bdrv_change_backing_file = bdrv_qed_change_backing_file,
1662 .bdrv_co_invalidate_cache = bdrv_qed_co_invalidate_cache,
1663 .bdrv_co_check = bdrv_qed_co_check,
1664 .bdrv_detach_aio_context = bdrv_qed_detach_aio_context,
1665 .bdrv_attach_aio_context = bdrv_qed_attach_aio_context,
1666 .bdrv_drain_begin = bdrv_qed_drain_begin,
1645 .bdrv_probe = bdrv_qed_probe,
1646 .bdrv_open = bdrv_qed_open,
1647 .bdrv_close = bdrv_qed_close,
1648 .bdrv_reopen_prepare = bdrv_qed_reopen_prepare,
1649 .bdrv_child_perm = bdrv_default_perms,
1650 .bdrv_co_create = bdrv_qed_co_create,
1651 .bdrv_co_create_opts = bdrv_qed_co_create_opts,
1652 .bdrv_has_zero_init = bdrv_has_zero_init_1,
1653 .bdrv_co_block_status = bdrv_qed_co_block_status,
1654 .bdrv_co_readv = bdrv_qed_co_readv,
1655 .bdrv_co_writev = bdrv_qed_co_writev,
1656 .bdrv_co_pwrite_zeroes = bdrv_qed_co_pwrite_zeroes,
1657 .bdrv_co_truncate = bdrv_qed_co_truncate,
1658 .bdrv_co_getlength = bdrv_qed_co_getlength,
1659 .bdrv_co_get_info = bdrv_qed_co_get_info,
1660 .bdrv_refresh_limits = bdrv_qed_refresh_limits,
1661 .bdrv_co_change_backing_file = bdrv_qed_co_change_backing_file,
1662 .bdrv_co_invalidate_cache = bdrv_qed_co_invalidate_cache,
1663 .bdrv_co_check = bdrv_qed_co_check,
1664 .bdrv_detach_aio_context = bdrv_qed_detach_aio_context,
1665 .bdrv_attach_aio_context = bdrv_qed_attach_aio_context,
1666 .bdrv_drain_begin = bdrv_qed_drain_begin,
1667};
1668
1669static void bdrv_qed_init(void)
1670{
1671 bdrv_register(&bdrv_qed);
1672}
1673
1674block_init(bdrv_qed_init);
1667};
1668
1669static void bdrv_qed_init(void)
1670{
1671 bdrv_register(&bdrv_qed);
1672}
1673
1674block_init(bdrv_qed_init);