[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 08/24] qed: add qed_find_cluster_sync()
From: |
Devin Nakamura |
Subject: |
[Qemu-devel] [RFC 08/24] qed: add qed_find_cluster_sync() |
Date: |
Fri, 29 Jul 2011 00:49:38 -0400 |
Signed-off-by: Devin Nakamura <address@hidden>
---
block/qed-cluster.c | 35 +++++++++++++++++++++++++++++++++++
block/qed.h | 4 ++++
2 files changed, 39 insertions(+), 0 deletions(-)
diff --git a/block/qed-cluster.c b/block/qed-cluster.c
index 3e19ad1..063b965 100644
--- a/block/qed-cluster.c
+++ b/block/qed-cluster.c
@@ -163,3 +163,38 @@ void qed_find_cluster(BDRVQEDState *s, QEDRequest
*request, uint64_t pos,
qed_read_l2_table(s, request, l2_offset,
qed_find_cluster_cb, find_cluster_cb);
}
+
+typedef struct {
+ int ret;
+ uint64_t *offset;
+ size_t *len;
+} QEDFindClusterSyncCB;
+
+static void qed_find_cluster_sync_cb(void *opaque, int ret, uint64_t offset,
+ size_t len)
+{
+ QEDFindClusterSyncCB *find_cluster_sync_cb = opaque;
+ *find_cluster_sync_cb->offset = offset;
+ *find_cluster_sync_cb->len = len;
+ find_cluster_sync_cb->ret = ret;
+}
+
+int qed_find_cluster_sync(BDRVQEDState *s, QEDRequest *request, uint64_t pos,
+ size_t len, uint64_t *offset,
+ size_t *contiguous_bytes)
+{
+ QEDFindClusterSyncCB find_cluster_cb;
+ find_cluster_cb.ret = -EINPROGRESS;
+ find_cluster_cb.offset = offset;
+ find_cluster_cb.len = contiguous_bytes;
+
+ async_context_push();
+ qed_find_cluster(s, request, pos, len, &qed_find_cluster_sync_cb,
+ &find_cluster_cb);
+ while (find_cluster_cb.ret == -EINPROGRESS) {
+ qemu_aio_wait();
+ }
+ async_context_pop();
+
+ return find_cluster_cb.ret;
+}
diff --git a/block/qed.h b/block/qed.h
index 388fdb3..c899c15 100644
--- a/block/qed.h
+++ b/block/qed.h
@@ -239,6 +239,10 @@ int qed_write_l2_table_sync(BDRVQEDState *s, QEDRequest
*request,
void qed_find_cluster(BDRVQEDState *s, QEDRequest *request, uint64_t pos,
size_t len, QEDFindClusterFunc *cb, void *opaque);
+int qed_find_cluster_sync(BDRVQEDState *s, QEDRequest *request, uint64_t pos,
+ size_t len, uint64_t *offset,
+ size_t *contiguous_bytes);
+
/**
* Consistency check
*/
--
1.7.6.rc1
- [Qemu-devel] [RFC 00/24] inplace image conversion, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 02/24] block: add bdrv_get_conversion_options(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 01/24] block: add block conversion api, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 03/24] block: add bdrv_open_conversion_target(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 04/24] block: add bdrv_get_mapping(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 05/24] block: add bdrv_map(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 06/24] block: add bdrv_copy_header(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 07/24] qed: make qed_alloc_clusters round up offset to nearest cluster, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 08/24] qed: add qed_find_cluster_sync(),
Devin Nakamura <=
- [Qemu-devel] [RFC 10/24] qed: add qed_bdrv_map(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 11/24] qed: add open_conversion_target(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 09/24] qed: add qed_bdrv_get_mapping(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 13/24] qed: add bdrv_qed_get_conversion_options(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 12/24] qed: add bdrv_qed_copy_header(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 15/24] qcow2: split up the creation of new refcount table from the act of checking it, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 14/24] qcow2: fix typo in documentation for qcow2_get_cluster_offset(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 16/24] qcow2: add qcow2_drop_leaked_clusters(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 17/24] qcow2: add qcow2_get_mapping, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 18/24] qcow2: add qcow2_map, Devin Nakamura, 2011/07/29