[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/13] qed: extract qed_start_allocating_write()
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PATCH 04/13] qed: extract qed_start_allocating_write() |
Date: |
Tue, 14 Jun 2011 19:18:22 +0100 |
Copy-on-read requests are a form of allocating write and will need to be
queued like other allocating writes. This patch extracts the request
queuing code for allocating writes so that it can be reused for
copy-on-read in a later patch.
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
block/qed.c | 32 ++++++++++++++++++++++++++------
1 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/block/qed.c b/block/qed.c
index 565bbc1..cc193ad 100644
--- a/block/qed.c
+++ b/block/qed.c
@@ -1097,14 +1097,15 @@ static bool qed_should_set_need_check(BDRVQEDState *s)
}
/**
- * Write new data cluster
+ * Start an allocating write request or queue it
*
- * @acb: Write request
- * @len: Length in bytes
+ * @ret: true if request can proceed, false if queued
*
- * This path is taken when writing to previously unallocated clusters.
+ * If a request is queued this function returns false and the caller should
+ * return. When it becomes time for the request to proceed the qed_aio_next()
+ * function will be called.
*/
-static void qed_aio_write_alloc(QEDAIOCB *acb, size_t len)
+static bool qed_start_allocating_write(QEDAIOCB *acb)
{
BDRVQEDState *s = acb_to_s(acb);
@@ -1119,7 +1120,26 @@ static void qed_aio_write_alloc(QEDAIOCB *acb, size_t
len)
}
if (acb != QSIMPLEQ_FIRST(&s->allocating_write_reqs) ||
s->allocating_write_reqs_plugged) {
- return; /* wait for existing request to finish */
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Write new data cluster
+ *
+ * @acb: Write request
+ * @len: Length in bytes
+ *
+ * This path is taken when writing to previously unallocated clusters.
+ */
+static void qed_aio_write_alloc(QEDAIOCB *acb, size_t len)
+{
+ BDRVQEDState *s = acb_to_s(acb);
+ BlockDriverCompletionFunc *cb;
+
+ if (!qed_start_allocating_write(acb)) {
+ return;
}
acb->cur_nclusters = qed_bytes_to_clusters(s,
--
1.7.5.3
- [Qemu-devel] [PATCH 00/13] QED image streaming, Stefan Hajnoczi, 2011/06/14
- [Qemu-devel] [PATCH 06/13] qed: add support for copy-on-read, Stefan Hajnoczi, 2011/06/14
- [Qemu-devel] [PATCH 07/13] qed: avoid deadlock on emulated synchronous I/O, Stefan Hajnoczi, 2011/06/14
- [Qemu-devel] [PATCH 09/13] block: add bdrv_aio_copy_backing(), Stefan Hajnoczi, 2011/06/14
- [Qemu-devel] [PATCH 04/13] qed: extract qed_start_allocating_write(),
Stefan Hajnoczi <=
- [Qemu-devel] [PATCH 13/13] trace: trace bdrv_aio_readv/writev error paths, Stefan Hajnoczi, 2011/06/14
- [Qemu-devel] [PATCH 05/13] qed: make qed_aio_write_alloc() reusable, Stefan Hajnoczi, 2011/06/14
- [Qemu-devel] [PATCH 12/13] qed: intelligent streaming implementation, Stefan Hajnoczi, 2011/06/14
- [Qemu-devel] [PATCH 08/13] qerror: add qerror_from_args() to create qerror objects, Stefan Hajnoczi, 2011/06/14
- [Qemu-devel] [PATCH 10/13] qmp: add QMP support for stream commands, Stefan Hajnoczi, 2011/06/14
- [Qemu-devel] [PATCH 11/13] block: add -drive stream=on|off, Stefan Hajnoczi, 2011/06/14
- [Qemu-devel] [PATCH 03/13] qed: replace is_write with flags field, Stefan Hajnoczi, 2011/06/14
- [Qemu-devel] [PATCH 01/13] qemu-config: }, { -> }, { to please checkpatch.pl, Stefan Hajnoczi, 2011/06/14
- [Qemu-devel] [PATCH 02/13] block: add -drive copy-on-read=on|off, Stefan Hajnoczi, 2011/06/14
- Re: [Qemu-devel] [PATCH 00/13] QED image streaming, Philipp Hahn, 2011/06/15