qed.c (9fb4dfc570ce3b013830321b8b91ae2ea991d768) qed.c (2b148f392b2bfeba76d3e6d9607c3bd072350e8c)
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>

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

1516 ret = bdrv_pwrite_sync(bs->file, 0, buffer, buffer_len);
1517 g_free(buffer);
1518 if (ret == 0) {
1519 memcpy(&s->header, &new_header, sizeof(new_header));
1520 }
1521 return ret;
1522}
1523
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>

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

1516 ret = bdrv_pwrite_sync(bs->file, 0, buffer, buffer_len);
1517 g_free(buffer);
1518 if (ret == 0) {
1519 memcpy(&s->header, &new_header, sizeof(new_header));
1520 }
1521 return ret;
1522}
1523
1524static void bdrv_qed_invalidate_cache(BlockDriverState *bs, Error **errp)
1524static void coroutine_fn bdrv_qed_co_invalidate_cache(BlockDriverState *bs,
1525 Error **errp)
1525{
1526 BDRVQEDState *s = bs->opaque;
1527 Error *local_err = NULL;
1528 int ret;
1529
1530 bdrv_qed_close(bs);
1531
1532 bdrv_qed_init_state(bs);
1526{
1527 BDRVQEDState *s = bs->opaque;
1528 Error *local_err = NULL;
1529 int ret;
1530
1531 bdrv_qed_close(bs);
1532
1533 bdrv_qed_init_state(bs);
1533 if (qemu_in_coroutine()) {
1534 qemu_co_mutex_lock(&s->table_lock);
1535 }
1534 qemu_co_mutex_lock(&s->table_lock);
1536 ret = bdrv_qed_do_open(bs, NULL, bs->open_flags, &local_err);
1535 ret = bdrv_qed_do_open(bs, NULL, bs->open_flags, &local_err);
1537 if (qemu_in_coroutine()) {
1538 qemu_co_mutex_unlock(&s->table_lock);
1539 }
1536 qemu_co_mutex_unlock(&s->table_lock);
1540 if (local_err) {
1541 error_propagate(errp, local_err);
1542 error_prepend(errp, "Could not reopen qed layer: ");
1543 return;
1544 } else if (ret < 0) {
1545 error_setg_errno(errp, -ret, "Could not reopen qed layer");
1546 return;
1547 }

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

1606 .bdrv_co_readv = bdrv_qed_co_readv,
1607 .bdrv_co_writev = bdrv_qed_co_writev,
1608 .bdrv_co_pwrite_zeroes = bdrv_qed_co_pwrite_zeroes,
1609 .bdrv_truncate = bdrv_qed_truncate,
1610 .bdrv_getlength = bdrv_qed_getlength,
1611 .bdrv_get_info = bdrv_qed_get_info,
1612 .bdrv_refresh_limits = bdrv_qed_refresh_limits,
1613 .bdrv_change_backing_file = bdrv_qed_change_backing_file,
1537 if (local_err) {
1538 error_propagate(errp, local_err);
1539 error_prepend(errp, "Could not reopen qed layer: ");
1540 return;
1541 } else if (ret < 0) {
1542 error_setg_errno(errp, -ret, "Could not reopen qed layer");
1543 return;
1544 }

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

1603 .bdrv_co_readv = bdrv_qed_co_readv,
1604 .bdrv_co_writev = bdrv_qed_co_writev,
1605 .bdrv_co_pwrite_zeroes = bdrv_qed_co_pwrite_zeroes,
1606 .bdrv_truncate = bdrv_qed_truncate,
1607 .bdrv_getlength = bdrv_qed_getlength,
1608 .bdrv_get_info = bdrv_qed_get_info,
1609 .bdrv_refresh_limits = bdrv_qed_refresh_limits,
1610 .bdrv_change_backing_file = bdrv_qed_change_backing_file,
1614 .bdrv_invalidate_cache = bdrv_qed_invalidate_cache,
1611 .bdrv_co_invalidate_cache = bdrv_qed_co_invalidate_cache,
1615 .bdrv_check = bdrv_qed_check,
1616 .bdrv_detach_aio_context = bdrv_qed_detach_aio_context,
1617 .bdrv_attach_aio_context = bdrv_qed_attach_aio_context,
1618 .bdrv_co_drain_begin = bdrv_qed_co_drain_begin,
1619};
1620
1621static void bdrv_qed_init(void)
1622{
1623 bdrv_register(&bdrv_qed);
1624}
1625
1626block_init(bdrv_qed_init);
1612 .bdrv_check = bdrv_qed_check,
1613 .bdrv_detach_aio_context = bdrv_qed_detach_aio_context,
1614 .bdrv_attach_aio_context = bdrv_qed_attach_aio_context,
1615 .bdrv_co_drain_begin = bdrv_qed_co_drain_begin,
1616};
1617
1618static void bdrv_qed_init(void)
1619{
1620 bdrv_register(&bdrv_qed);
1621}
1622
1623block_init(bdrv_qed_init);