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); |