static void qed_write_header_cb(void *opaque, int ret) { QEDWriteHeaderCB *write_header_cb = opaque; qemu_vfree(write_header_cb->buf); gencb_complete(write_header_cb, ret); }
static void qed_write_table_cb(void *opaque, int ret) { QEDWriteTableCB *write_table_cb = opaque; trace_qed_write_table_cb(write_table_cb->s, write_table_cb->orig_table, write_table_cb->flush, ret); if (ret) { goto out; } if (write_table_cb->flush) { /* We still need to flush first */ write_table_cb->flush = false; bdrv_aio_flush(write_table_cb->s->bs, qed_write_table_cb, write_table_cb); return; } out: qemu_vfree(write_table_cb->table); gencb_complete(&write_table_cb->gencb, ret); return; }
static void qed_read_l2_table_cb(void *opaque, int ret) { QEDReadL2TableCB *read_l2_table_cb = opaque; QEDRequest *request = read_l2_table_cb->request; BDRVQEDState *s = read_l2_table_cb->s; CachedL2Table *l2_table = request->l2_table; uint64_t l2_offset = read_l2_table_cb->l2_offset; if (ret) { /* can't trust loaded L2 table anymore */ qed_unref_l2_cache_entry(l2_table); request->l2_table = NULL; } else { l2_table->offset = l2_offset; qed_commit_l2_cache_entry(&s->l2_cache, l2_table); /* This is guaranteed to succeed because we just committed the entry * to the cache. */ request->l2_table = qed_find_l2_cache_entry(&s->l2_cache, l2_offset); assert(request->l2_table != NULL); } gencb_complete(&read_l2_table_cb->gencb, ret); }
static void qed_read_table_cb(void *opaque, int ret) { QEDReadTableCB *read_table_cb = opaque; QEDTable *table = read_table_cb->table; int noffsets = read_table_cb->qiov.size / sizeof(uint64_t); int i; /* Handle I/O error */ if (ret) { goto out; } /* Byteswap offsets */ for (i = 0; i < noffsets; i++) { table->offsets[i] = le64_to_cpu(table->offsets[i]); } out: /* Completion */ trace_qed_read_table_cb(read_table_cb->s, read_table_cb->table, ret); gencb_complete(&read_table_cb->gencb, ret); }