block-queue turned out to be too big effort to be useful for quickly fixing the performance problems that qcow2 got since we introduced the metadata flushes. While I still think the idea is right, it needs more time and qcow2 doesn't have more time. Let's come back to block-queue later when the most urgent qcow2 problems are fixed.
So this is the idea of block-queue applied to the very specific case of qcow2. Whereas block-queue tried to be a generic solution for all kind of things and tried to make all writes asynchronous at the same time, this is only about batching writes to refcount blocks and L2 tables in qcow2 and getting the dependencies right. (Yes, the L1 table and refcount table is left alone. They are almost never written to anyway.) This should be much easier to understand and review, and I myself feel a bit more confident about it than with block-queue, too. Reviews and comments are appreciated. Kevin Wolf (2): qcow2: Add QcowCache qcow2: Use QcowCache Makefile.objs | 2 +- block/qcow2-cache.c | 270 ++++++++++++++++++++++++++++++++++++++++++++++++ block/qcow2-cluster.c | 206 +++++++++++++------------------------ block/qcow2-refcount.c | 249 +++++++++++++++++--------------------------- block/qcow2.c | 43 +++++++- block/qcow2.h | 29 +++++- 6 files changed, 504 insertions(+), 295 deletions(-) create mode 100644 block/qcow2-cache.c -- 1.7.2.3