qed.c (61124f03ab7e71d269417aafddbc2501d0379bc6) qed.c (61c7887e0f3dcfa9c4ccdfe43374243a4a5c0e8d)
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>

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

358 * header is flushed.
359 */
360 if (s->need_check_timer && timer_pending(s->need_check_timer)) {
361 qed_cancel_need_check_timer(s);
362 qed_need_check_timer_entry(s);
363 }
364}
365
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>

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

358 * header is flushed.
359 */
360 if (s->need_check_timer && timer_pending(s->need_check_timer)) {
361 qed_cancel_need_check_timer(s);
362 qed_need_check_timer_entry(s);
363 }
364}
365
366static void bdrv_qed_init_state(BlockDriverState *bs)
367{
368 BDRVQEDState *s = bs->opaque;
369
370 memset(s, 0, sizeof(BDRVQEDState));
371 s->bs = bs;
372 qemu_co_queue_init(&s->allocating_write_reqs);
373}
374
366static int bdrv_qed_do_open(BlockDriverState *bs, QDict *options, int flags,
367 Error **errp)
368{
369 BDRVQEDState *s = bs->opaque;
370 QEDHeader le_header;
371 int64_t file_size;
372 int ret;
373
375static int bdrv_qed_do_open(BlockDriverState *bs, QDict *options, int flags,
376 Error **errp)
377{
378 BDRVQEDState *s = bs->opaque;
379 QEDHeader le_header;
380 int64_t file_size;
381 int ret;
382
374 s->bs = bs;
375 qemu_co_queue_init(&s->allocating_write_reqs);
376
377 ret = bdrv_pread(bs->file, 0, &le_header, sizeof(le_header));
378 if (ret < 0) {
379 return ret;
380 }
381 qed_header_le_to_cpu(&le_header, &s->header);
382
383 if (s->header.magic != QED_MAGIC) {
384 error_setg(errp, "Image not in QED format");

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

502 Error **errp)
503{
504 bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
505 false, errp);
506 if (!bs->file) {
507 return -EINVAL;
508 }
509
383 ret = bdrv_pread(bs->file, 0, &le_header, sizeof(le_header));
384 if (ret < 0) {
385 return ret;
386 }
387 qed_header_le_to_cpu(&le_header, &s->header);
388
389 if (s->header.magic != QED_MAGIC) {
390 error_setg(errp, "Image not in QED format");

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

508 Error **errp)
509{
510 bs->file = bdrv_open_child(NULL, options, "file", bs, &child_file,
511 false, errp);
512 if (!bs->file) {
513 return -EINVAL;
514 }
515
516 bdrv_qed_init_state(bs);
510 return bdrv_qed_do_open(bs, options, flags, errp);
511}
512
513static void bdrv_qed_refresh_limits(BlockDriverState *bs, Error **errp)
514{
515 BDRVQEDState *s = bs->opaque;
516
517 bs->bl.pwrite_zeroes_alignment = s->header.cluster_size;

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

1457 if (ret == 0) {
1458 memcpy(&s->header, &new_header, sizeof(new_header));
1459 }
1460 return ret;
1461}
1462
1463static void bdrv_qed_invalidate_cache(BlockDriverState *bs, Error **errp)
1464{
517 return bdrv_qed_do_open(bs, options, flags, errp);
518}
519
520static void bdrv_qed_refresh_limits(BlockDriverState *bs, Error **errp)
521{
522 BDRVQEDState *s = bs->opaque;
523
524 bs->bl.pwrite_zeroes_alignment = s->header.cluster_size;

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

1464 if (ret == 0) {
1465 memcpy(&s->header, &new_header, sizeof(new_header));
1466 }
1467 return ret;
1468}
1469
1470static void bdrv_qed_invalidate_cache(BlockDriverState *bs, Error **errp)
1471{
1465 BDRVQEDState *s = bs->opaque;
1466 Error *local_err = NULL;
1467 int ret;
1468
1469 bdrv_qed_close(bs);
1470
1472 Error *local_err = NULL;
1473 int ret;
1474
1475 bdrv_qed_close(bs);
1476
1471 memset(s, 0, sizeof(BDRVQEDState));
1477 bdrv_qed_init_state(bs);
1472 ret = bdrv_qed_do_open(bs, NULL, bs->open_flags, &local_err);
1473 if (local_err) {
1474 error_propagate(errp, local_err);
1475 error_prepend(errp, "Could not reopen qed layer: ");
1476 return;
1477 } else if (ret < 0) {
1478 error_setg_errno(errp, -ret, "Could not reopen qed layer");
1479 return;

--- 80 unchanged lines hidden ---
1478 ret = bdrv_qed_do_open(bs, NULL, bs->open_flags, &local_err);
1479 if (local_err) {
1480 error_propagate(errp, local_err);
1481 error_prepend(errp, "Could not reopen qed layer: ");
1482 return;
1483 } else if (ret < 0) {
1484 error_setg_errno(errp, -ret, "Could not reopen qed layer");
1485 return;

--- 80 unchanged lines hidden ---